В моем конкретном случае я хочу использовать его, чтобы сбросить то, что я echo
.
Я не хочу включать какой-либо файл ...
Есть ли способ сделать objdump
чтение STDIN
вместо?
В моем конкретном случае я хочу использовать его, чтобы сбросить то, что я echo
.
Я не хочу включать какой-либо файл ...
Есть ли способ сделать objdump
чтение STDIN
вместо?
Ответы:
ты всегда можешь сделать
objdump -d /dev/stdin < t2.o
или
cat t2.o | objdump -d /dev/stdin
образец
[root @ myhost cc] # objdump -h / dev / stdin <t2.o
/ dev / stdin: формат файла elf64-x86-64
Разделы: Idx Имя Размер VMA LMA
Файл выключен Algn 0 .группа 00000008 0000000000000000 0000000000000000 00000040 2 ** 2 СОДЕРЖАНИЕ, ЧИТАТЬ, ИСКЛЮЧИТЬ, ГРУППА, LINK_ONCE_DISCARD
cat t2.o | objdump -d /dev/stdin
не работает. /dev/stdin
работает только тогда, когда это соответствует реальному файлу. Поскольку ваше решение требует наличия этого файла, это не отвечает OP.
objdump
в частности, для этого вызова , но может не работать для других, если он выполняет seek
операции с файлом. Когда инструменты не -
подходят для стандартного ввода, это часто бывает.
Ты не можешь Обойти это невозможно, вам придется использовать временный файл.
Исходный файл readelf.c имеет эту безусловную проверку (по крайней мере в binutils 2.22-8) перед тем, как даже пытаться открыть файл:
if (! S_ISREG (statbuf.st_mode))
{
error (_("'%s' is not an ordinary file\n"), file_name);
return 1;
}
Так что, если файл ничего , кроме обычного файл (например , линк, или символьное устройство , как и в случае /dev/stdin
, /proc/self/fd/*
и т.д.) , он не будет работать.
В качестве альтернативы, вы можете изменить исходный код и использовать модифицированный objdump, но это переносит вашу переносимость.
Это своего рода обходной путь tee
. Таким образом, чтобы разобрать файл с именем input
использования
cat input | tee a.out | objdump -d
И, чтобы привести пример для передачи некоторых байтов с помощью echo
команды, хороший пример должен быть следующий (параметры описаны в этом хорошем ответе SO ):
Разобрать последовательность байтов кода x86
b8 01 00 00 00 bb 0a 00 00 00 cd 80
добавьте к нему префикс 0:
и используйте команду
echo "0: b8 01 00 00 00 bb 0a 00 00 00 cd 80" | xxd -r | tee a.out | objdump -D -Mintel,i386 -b binary -m i386
Его вывод:
a.out: file format binary
Disassembly of section .data:
00000000 <.data>:
0: b8 01 00 00 00 mov eax,0x1
5: bb 0a 00 00 00 mov ebx,0xa
a: cd 80 int 0x80
это просто код сборки для выхода из программы Linux i386 с кодом выхода 0xA.