我目前正在构建一个可执行的裸机,它包含一些包含代码的特殊部分。但是,当我objdump -d
时,我只会获得.text
和.init.text
部分的代码。 objdump
的联机帮助页仅表示它只会拆解那些预计包含说明的部分"使用-d
选项时。这些是哪些部分,以及objdump
如何判断哪些部分要解码?我知道我也可以使用-D
选项来获得所有部分的完整解码,但这通常比我需要的要多得多。
答案 0 :(得分:5)
objdump
在内部使用libbfd
获取部分信息。 objdump
将回调传递给bfd_map_over_sections()
,后者会调用每个部分的回调。调用时,libbfd
会将asection *
传递给回调,该回调的成员为type
。如果类型包含标记SEC_CONTENTS | SEC_CODE
,则在objdump
选项通过时,它会被-d
反汇编。
进入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}'