リンカーとローダーに関する古い本を読んでいますが、そこにオブジェクトコードイメージがあります。
しかし、これらのファイルの内容を表示するためにどのツールを使用する必要があるのかわかりません。
誰でもこのツールを教えてくれたらとても感謝します。
これはCコードとオブジェクトファイルの対応する表示です。
ソースファイルm.c
:
extern void a(char *);
int main(int argc, char **argv)
{
static char string[] = "Hello, world!\n";
a(string);
}
ソースファイルa.c
:
#include <unistd.h>
#include <string.h>
void a(char *s)
{
write(1, s, strlen(s));
}
ターゲットコードm.o
:
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 00000010 00000000 00000000 00000020 2**3
1 .data 00000010 00000010 00000010 00000030 2**3
Disassembly of section .text: 00000000 <_main>:
0: 55 pushl %ebp
1: 89 e5 movl %esp,%ebp
3: 68 10 00 00 00 pushl $0x10
4: 32 .data
8: e8 f3 ff ff ff call 0
9: DISP32 _a
d: c9 leave
e: c3 ret
...
ターゲットコードa.o
:
Sections:
Idx Name Size VMA LMA File off Algn
0 .text 0000001c 00000000 00000000 00000020 2**2
CONTENTS, ALLOC, LOAD, RELOC, CODE
1 .data 00000000 0000001c 0000001c 0000003c 2**2
CONTENTS, ALLOC, LOAD, DATA
Disassembly of section .text: 00000000 <_a>:
0: 55 pushl %ebp
1: 89 e5 movl %esp,%ebp
3: 53 pushl %ebx
4: 8b 5d 08 movl 0x8(%ebp),%ebx
7: 53 pushl %ebx
8: e8 f3 ff ff ff call 0
9: DISP32 _strlen
d: 50 pushl %eax
e: 53 pushl %ebx
f: 6a 01 pushl $0x1
11: e8 ea ff ff ff call 0
12: DISP32 _write
16: 8d 65 fc leal -4(%ebp),%esp
19: 5b popl %ebx
1a: c9 leave
1b: c3 ret
答え1
あなたはそれを使用することができますobjdump
。バラより人オブジェクトダンプ。たとえば、-d
分解オプション(多くのオプションがあります):
objdump -d a.o
その他の便利なプログラムが含まれています。バイナリツール。