Jawaban:
kamu selalu bisa melakukannya
objdump -d /dev/stdin < t2.o
atau
cat t2.o | objdump -d /dev/stdin
Sampel
[root @ myhost cc] # objdump -h / dev / stdin <t2.o
/ dev / stdin: format file elf64-x86-64
Bagian: Idx Nama Ukuran VMA LMA
File off Algn 0 .group 00000008 0000000000000000 0000000000000000 00000040 2 ** 2 DAFTAR ISI, READONLY, EXCLUDE, GROUP, LINK_ONCE_DISCARD
cat t2.o | objdump -d /dev/stdin
tidak bekerja. /dev/stdin
hanya berfungsi jika sesuai dengan file asli. Karena solusi Anda memerlukan keberadaan file itu, ini tidak menjawab OP.
objdump
secara khusus, tetapi mungkin gagal untuk orang lain jika seek
operasi pada file. Ketika alat tidak memiliki -
untuk stdin, itu sering terjadi.
Kamu tidak bisa Tidak ada jalan lain, Anda harus menggunakan file sementara.
File sumber readelf.c memiliki pemeriksaan tanpa syarat ini (setidaknya dalam binutils 2.22-8) bahkan sebelum mencoba membuka file:
if (! S_ISREG (statbuf.st_mode))
{
error (_("'%s' is not an ordinary file\n"), file_name);
return 1;
}
Jadi jika file adalah sesuatu tetapi file biasa (seperti symlink, atau perangkat arang seperti dalam kasus /dev/stdin
, /proc/self/fd/*
dll) tidak akan bekerja.
Atau, Anda dapat memodifikasi sumber dan menggunakan objdump yang dimodifikasi, tetapi portabilitas Anda hilang.
Semacam solusi menggunakan tee
. Jadi untuk membongkar file bernama input
use
cat input | tee a.out | objdump -d
Dan, untuk memberikan contoh untuk melewatkan beberapa byte dengan echo
perintah, berikut ini harus menjadi contoh yang baik (Parameter dijelaskan dalam jawaban SO yang baik ini ):
Untuk membongkar urutan byte kode x86
b8 01 00 00 00 bb 0a 00 00 00 cd 80
awali dengan 0:
dan gunakan perintah
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
Outputnya adalah:
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
yang hanya kode perakitan untuk keluar dari program linux i386 dengan kode keluar 0xA.