使用as汇编、objdump反汇编时自定义段被跳过,该如何解决?
问题原因与解决方法
问题根源
objdump -d 默认仅反汇编**标记为可执行(executable)**的段。你自定义的 a_random_section 未设置可执行属性,GNU汇编器(GAS)会默认将其标记为不可执行,因此被 objdump -d 跳过。
解决方法
方法一:给自定义段添加可执行属性
修改汇编代码,在 .section 指令后添加段属性标记,明确指定该段可分配且可执行:
.section a_random_section, "ax" # "a" 表示段可分配(会被加载到内存),"x" 表示段可执行 label_number1: jmp label_number1
重新编译后,该段会被标记为可执行,objdump -d 就能正常反汇编它。
方法二:强制反汇编所有段
如果不想修改汇编代码,使用 objdump 的 -D(大写)选项,它会反汇编目标文件中的所有段,无论是否标记为可执行:
as -o test.o test.s && objdump -D test.o
内容的提问来源于stack exchange,提问作者TornaxO7
相关产品推荐
相关产品推荐

