如何使 objdump 显示部分的程序集只出现在源代码中?
Posted
技术标签:
【中文标题】如何使 objdump 显示部分的程序集只出现在源代码中?【英文标题】:How to make objdump show assembly of sections only appeared in source code? 【发布时间】:2013-10-19 16:03:46 【问题描述】:我想生成类似于这个问题的答案Using GCC to produce readable assembly? 中的程序集
对于简单的测试代码:test.c
void main()
int i;
for(i=0;i<10;i++)
printf("%d\n",i);
gcc 命令:gcc -g test.c -o test.o
objdump 命令:objdump -d -M intel -S test.o
但我得到的是程序集以 .init 部分开头
080482bc<_init>:
并以 .fini 部分结尾 080484cc<_fini>
我不希望它们显示出来。
为什么会这样?以及如何避免显示不在源文件中的部分?
【问题讨论】:
您可以使用grep(假设您使用Linux)在反汇编中搜索您想要查看的部分,例如:` objdump -D test.out | grep -A20 main.: `这只会显示主要部分的前 20 行。 【参考方案1】:现在您正在创建一个可执行文件,而不是一个目标文件。可执行文件当然包含很多额外的部分。
如果要创建目标文件,请使用 GCC 的 -c
标志。
【讨论】:
【参考方案2】:您可以使用-j
选项指定部分。
所以objdump -d executable -j .text -j .plt
只会显示 .text 和 .plt 部分的反汇编。
【讨论】:
以上是关于如何使 objdump 显示部分的程序集只出现在源代码中?的主要内容,如果未能解决你的问题,请参考以下文章
你好,请问linux下程序编译遇到的那种segment fault你怎么解决的啊 看他们说的那个#objdump -D XXX >debug