Есть ли способ заставить objdump читать из STDIN вместо файла?
8
В моем конкретном случае я хочу использовать его, чтобы сбросить то, что я echo.
Я не хочу включать какой-либо файл ...
Есть ли способ сделать objdumpчтение STDINвместо?
cat t2.o | objdump -d /dev/stdinне работает. /dev/stdinработает только тогда, когда это соответствует реальному файлу. Поскольку ваше решение требует наличия этого файла, это не отвечает OP.
dragonroot
Это может работать, objdumpв частности, для этого вызова , но может не работать для других, если он выполняет seekоперации с файлом. Когда инструменты не -подходят для стандартного ввода, это часто бывает.
Сиро Сантилли 冠状 病毒 审查 六四 事件 法轮功
5
Ты не можешь Обойти это невозможно, вам придется использовать временный файл.
Исходный файл readelf.c имеет эту безусловную проверку (по крайней мере в binutils 2.22-8) перед тем, как даже пытаться открыть файл:
if(! S_ISREG (statbuf.st_mode)){
error (_("'%s' is not an ordinary file\n"), file_name);return1;}
Так что, если файл ничего , кроме обычного файл (например , линк, или символьное устройство , как и в случае /dev/stdin, /proc/self/fd/*и т.д.) , он не будет работать.
В качестве альтернативы, вы можете изменить исходный код и использовать модифицированный objdump, но это переносит вашу переносимость.
Это своего рода обходной путь tee. Таким образом, чтобы разобрать файл с именем inputиспользования
cat input | tee a.out | objdump -d
И, чтобы привести пример для передачи некоторых байтов с помощью echoкоманды, хороший пример должен быть следующий (параметры описаны в этом хорошем ответе SO ):
Ответы:
ты всегда можешь сделать
или
образец
источник
cat t2.o | objdump -d /dev/stdin
не работает./dev/stdin
работает только тогда, когда это соответствует реальному файлу. Поскольку ваше решение требует наличия этого файла, это не отвечает OP.objdump
в частности, для этого вызова , но может не работать для других, если он выполняетseek
операции с файлом. Когда инструменты не-
подходят для стандартного ввода, это часто бывает.Ты не можешь Обойти это невозможно, вам придется использовать временный файл.
Исходный файл readelf.c имеет эту безусловную проверку (по крайней мере в binutils 2.22-8) перед тем, как даже пытаться открыть файл:
Так что, если файл ничего , кроме обычного файл (например , линк, или символьное устройство , как и в случае
/dev/stdin
,/proc/self/fd/*
и т.д.) , он не будет работать.В качестве альтернативы, вы можете изменить исходный код и использовать модифицированный objdump, но это переносит вашу переносимость.
источник
Это своего рода обходной путь
tee
. Таким образом, чтобы разобрать файл с именемinput
использованияИ, чтобы привести пример для передачи некоторых байтов с помощью
echo
команды, хороший пример должен быть следующий (параметры описаны в этом хорошем ответе SO ):Разобрать последовательность байтов кода x86
добавьте к нему префикс
0:
и используйте командуЕго вывод:
это просто код сборки для выхода из программы Linux i386 с кодом выхода 0xA.
источник