objdump默认反汇编哪个部分?

6

我正在构建一个裸机可执行文件,其中包含一些特殊的代码段。然而,当我执行 objdump -d 命令时,我只能得到 .text.init.text 段的代码。根据 objdump 的 man 手册,该命令只会反汇编那些被期望包含指令的段,使用 -d 选项时。那么这些段是哪些,objdump 如何判断哪些段需要进行反汇编?我知道也可以使用 -D 选项对所有段进行完整的反汇编,但这通常远远超出了我的需求。

1个回答

6

objdump内部使用libbfd获取节(section)信息。 objdump通过回调函数传递给bfd_map_over_sections(),该函数在每个节上调用回调函数。当被调用时,libbfdasection *传递给回调函数,其中具有成员变量type。如果类型包含SEC_CONTENTS | SEC_CODE标志,则在传递-d选项时,objdump会对其进行反汇编。

深入了解libbfd相对困难,我预计类型检测取决于体系结构,但我希望至少提供了正确的指针。(也许我有更多时间后,会深入挖掘并扩展答案)。


顺便说一句,如果您需要从objdump -D中过滤出感兴趣的节(section),可以使用sed脚本,如下所示:

# ------------Place section names here ---------------vvv 
objdump -D object.o | sed -rn '/Disassembly of.*\.(comment|text)/{:a;p;n;/Disassembly of/!ba}'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接