如何使 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&lt;_init&gt;: 并以 .fini 部分结尾 080484cc&lt;_fini&gt;

我不希望它们显示出来。

为什么会这样?以及如何避免显示不在源文件中的部分?

【问题讨论】:

您可以使用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 显示部分的程序集只出现在源代码中?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 objdump 反汇编一个函数?

你好,请问linux下程序编译遇到的那种segment fault你怎么解决的啊 看他们说的那个#objdump -D XXX >debug

objdump 如何发出 intel 语法

C# FORM 如何使DATAGRIDVIEW始终显示纵向滚动条啊?

objdump 分析

我如何使网格包装器匹配项目的宽度?