ファイルの代わりにSTDINからobjdumpを読み取る方法はありますか?


8

私の特定のケースでは、それを使って自分のデータをダンプしたいと思いechoます。
ファイルを含めたくありません... 代わりにファイルから読み取る
方法はありますか?objdumpSTDIN


あなたの状況についてもう少し説明してもらえますか?
クォンタ

回答:


5

いつでもできる

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 Name Size VMA LMA
File off Algn 0 .group 00000008 0000000000000000 0000000000000000 00000040 2 ** 2 CONTENTS、READONLY、EXCLUDE、GROUP、LINK_ONCE_DISCARD


1
cat t2.o | objdump -d /dev/stdin動作しません。/dev/stdin実際のファイルに対応する場合にのみ機能します。ソリューションはそのファイルの存在を必要とするため、これはOPに応答しません。
dragonroot

これはobjdump、特にこの呼び出しで機能する可能性がseekありますが、ファイルで操作を行う場合、他の場合は失敗する可能性があります。ツール-に標準入力がない場合は、多くの場合そうです。
Ciro Santilli冠状病毒审查六四事件法轮功

5

できません。それを回避する方法はありません。一時ファイルを使用する必要があります。

ソースファイルreadelf.cには、ファイルを開こうとする前に、(少なくともbinutils 2.22-8で)この無条件のチェックがあります。

if (! S_ISREG (statbuf.st_mode))
    {
      error (_("'%s' is not an ordinary file\n"), file_name);
      return 1;
    }

そのため、ファイルが通常のファイル(symlink、またはの場合のようにcharデバイスなど)以外の場合は/dev/stdin、機能し/proc/self/fd/*ません。

あるいは、ソースを変更して変更されたobjdumpを使用することもできますが、移植性があります。


0

一種の回避策はを使用していteeます。したがって、inputuse という名前のファイルを逆アセンブルするには

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

これは、終了コード0xAでi386 linuxプログラムを終了するためのアセンブリコードです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.