1

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

4

1 回答 1

5

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

测试.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 回答