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

发布于 2024-10-19 10:11:43 字数 65 浏览 8 评论 0原文

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

I needed to look-up the exact byte size of few C functions.
Any recommendation of any utility which is able to analyze .obj files generated by the gcc compiler?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一梦等七年七年为一梦 2024-10-26 10:11:43

我这里只有 GCC v4 进行测试,但我认为 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。你就在那里。 ;-)

但是,请谨慎对待这些数字的用途。这是函数的大小,但是可能需要更多的大小(例如全局数据对象)才能使函数正确运行。

I only have a GCC v4 here for testing, but I don't think this particular feature of binutils has changed recently.

test.c:

int foo()
{
    return 42;
}

Compiled:

$ gcc -c test.c -o test.o

Disassembled:

$ 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
...

(We see foo is located at address 0, the size being 0x000b bytes.)

Proof is in the pudding:

$ nm -S test.o
0000000000000000 000000000000000b T foo

At address 0, size 0x000b. There you are. ;-)

However, be careful with what you want to do with these numbers. This is the size of the function allright, but there might be more (e.g. global data objects) required to make the function run correctly.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文