【发布时间】:2016-02-14 14:55:26
【问题描述】:
我正在尝试查看我的简单 C 应用程序的程序集。因此,我尝试使用objdump 从二进制文件生成程序集,它会生成大约 4.3MB 大小的文件,其中包含103228 行汇编代码。然后,我尝试通过向gcc 提供-S 和-save-temps 标志来做到这一点。
我使用了以下三个命令:
1. arm-linux-gnueabi-objdump -d hello_simple > hello_simple.dump
2. arm-linux-gnueabi-gcc -save-temps -static hello_simple.c -o hello_simple -lm
3. arm-linux-gnueabi-gcc -S -static hello_simple.c -o hello_simple.asm -lm
在 2 和 3 的情况下,产生完全相同的结果,即 65 行汇编代码。我知道objdump 也会产生一些额外的细节。
但是,为什么会有巨大的差异?
EDIT1:我已使用以下命令构建该二进制文件:
arm-linux-gnueabi-gcc -static hello_simple.c -o hello_simple -lm
EDIT2:虽然,-static 和 -lm 标志在这里看起来可能是不必要的,但是,我必须在编译时添加一些程序集组件之后在模拟器上执行这个二进制文件,这使得它们成为必须的。
那么,在分析执行跟踪期间,我应该考虑哪些汇编代码最相关? (我知道这是另一个问题,但在同一个答案中涵盖它会很方便。)
【问题讨论】:
-
.debug_info 我猜?尝试先剥离
-
如果您的程序使用
-static链接,它还将包含libc和其他链接到可执行文件的库。这些也会被objdump倾倒。 -
回复:您的最后一次编辑。
-static -lm对 command 3 没有影响。 它们显然对其他命令有影响,因为它们 确实 生成二进制文件。 -
这是命令 2.,它们确实有效果,就像我说的那样。
-
为什么两个反对票和两个赞成票没有任何评论?我认为 SO 哲学是帮助和指导,而不仅仅是谴责。如果也有一些 cmets,我至少会学到一些东西。
标签: c debugging gcc assembly objdump