objdump默认哪个部分反汇编

我目前正在构build一个可执行的裸机,其中包含一些包含代码的特殊部分。 但是,当我做objdump -d .init.text我只获得.text.init.text部分的代码。 objdump的联机帮助页仅表示在使用-d选项时,它“仅反汇编那些预期包含指令的部分”。 这些部分是什么,以及objdump如何告诉哪些部分解码? 我知道我也可以使用-D选项来获得所有部分的完整解码,但这通常比我需要的要多得多。

    objdump内部使用libbfd来获取部分信息。 objdump将回调传递给bfd_map_over_sections() ,它调用每个部分的回调bfd_map_over_sections() 。 被调用时, libbfdasection *传递给具有成员type的回调。 如果该类型包含SEC_CONTENTS | SEC_CODE标志 SEC_CONTENTS | SEC_CODE-d选项被传递时被objdump反汇编。

    进入libbfd是相当困难的,我期望类型检测取决于架构,但我希望我给你至少正确的指针。 (可能有更多的时间,我会进一步挖掘并扩展答案)..


    顺便说一句,如果你需要一个脚本来过滤从objdump -D感兴趣的部分,你可以使用sed ,像这样:

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