C:分析 .obj 文件的实用程序,以精确字节测量某些函数的大小?

TCS*_*rad 1 c c++ gcc3 .obj

我需要查找几个 C 函数的确切字节大小。任何能够分析由 gcc 编译器生成的 .obj 文件的实用程序的任何建议?

Dev*_*lar 5

我这里只有一个 GCC v4 用于测试,但我认为 binutils 的这个特殊功能最近没有改变。

测试.c:

int foo()
{
    return 42;
}
Run Code Online (Sandbox Code Playgroud)

编译:

$ gcc -c test.c -o test.o
Run Code Online (Sandbox Code Playgroud)

拆解:

$ 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
...
Run Code Online (Sandbox Code Playgroud)

(我们看到foo位于地址 0,大小为 0x000b 字节。)

布丁中有证据:

$ nm -S test.o
0000000000000000 000000000000000b T foo
Run Code Online (Sandbox Code Playgroud)

地址为 0,大小为 0x000b。你在这。;-)

但是,要小心处理这些数字。这是函数的大小没问题,但可能需要更多(例如全局数据对象)才能使函数正确运行