いくつかのC関数の正確なバイトサイズを調べる必要がありました。gccコンパイラによって生成された.objファイルを分析できるユーティリティの推奨事項はありますか?
質問する
3018 次
1 に答える
5
ここにはテスト用のGCCv4しかありませんが、binutilsのこの特定の機能は最近変更されていないと思います。
test.c:
int foo()
{
return 42;
}
編集済み:
$ gcc -c test.c -o test.o
分解:
$ objdump -D test.o
...
0000000000000000 <foo>:
0: 55 push %rbp
1: 48 89 e5 mov %rsp,%rbp
4: b8 2a 00 00 00 mov $0x2a,%eax
9: c9 leaveq
a: c3 retq
...
(foo
アドレス0にあり、サイズは0x000bバイトです。)
証拠はプリンにあります:
$ nm -S test.o
0000000000000000 000000000000000b T foo
アドレス0、サイズ0x000b。あります。;-)
ただし、これらの番号で何をしたいかには注意してください。これは関数のサイズですが、関数を正しく実行するには、さらに多くのサイズ(グローバルデータオブジェクトなど)が必要になる場合があります。
于 2011-02-25T07:23:57.823 に答える