1

いくつかのC関数の正確なバイトサイズを調べる必要がありました。gccコンパイラによって生成された.objファイルを分析できるユーティリティの推奨事項はありますか?

4

1 に答える 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 に答える