Apakah ada cara untuk membuat objdump dibaca dari STDIN bukan file?


8

Dalam kasus khusus saya, saya ingin menggunakannya untuk membuang apa yang saya echo.
Saya tidak ingin melibatkan file apa pun ...
Apakah ada cara untuk membuat objdumpbaca STDIN?


Bisakah Anda jelaskan situasi Anda sedikit lagi?
quanta

Jawaban:


5

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


1
cat t2.o | objdump -d /dev/stdintidak bekerja. /dev/stdinhanya berfungsi jika sesuai dengan file asli. Karena solusi Anda memerlukan keberadaan file itu, ini tidak menjawab OP.
Dragonroot

Ini mungkin bekerja untuk permohonan ini objdumpsecara khusus, tetapi mungkin gagal untuk orang lain jika seekoperasi pada file. Ketika alat tidak memiliki -untuk stdin, itu sering terjadi.
Ciro Santilli 冠状 病毒 审查 六四 事件 法轮功

5

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.


0

Semacam solusi menggunakan tee. Jadi untuk membongkar file bernama inputuse

cat input | tee a.out | objdump -d

Dan, untuk memberikan contoh untuk melewatkan beberapa byte dengan echoperintah, 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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.