You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GDB反汇编结果全为零,objdump可得到预期汇编代码的技术咨询

GDB反汇编全为零但objdump正常的排查方案

我之前调试自定义内核时也碰到过一模一样的问题,这种情况基本都是GDB没正确关联到代码的实际加载地址,或者加载的内存区域不对,给你几个具体的排查步骤:

  • 先确认GDB加载的文件是否正确
    在GDB里执行file命令,看看输出是不是指向你的kernel.elf——有时候不小心加载了旧版本或者其他无关文件,自然会反汇编出空白内容。如果不对,重新执行file kernel.elf加载正确的文件。

  • 检查ELF文件的程序头配置
    用readelf -l kernel.elf查看程序头(Program Headers),重点看.text段对应的paddr(物理地址)和vaddr(虚拟地址)是不是0x100000。GDB默认会按照程序头里的地址加载符号和代码,如果这里的地址和你实际运行时的加载地址不匹配,GDB就会去错误的内存区域反汇编,结果自然全是零。

  • 手动关联符号与加载地址
    如果是裸机内核这类非标准ELF文件,GDB经常会自动识别错地址。这时候可以用add-symbol-file kernel.elf 0x100000命令,手动把符号表和0x100000这个地址绑定,之后再用x/20i 0x100000或者disassemble __code反汇编试试。

  • 确认GDB的目标架构
    你的文件是elf32-i386格式,要确保GDB是适配i386的版本,或者在GDB里执行set architecture i386切换到正确架构——架构不匹配的话,反汇编指令会出错,甚至直接显示全零。

  • 直接指定地址范围反汇编
    别只输入disassemble,试试明确指定地址:disassemble 0x100000, 0x100020,或者用x/16i 0x100000查看指定地址的指令,排查是不是GDB默认反汇编的区域不对。

另外,你可以在GDB里用info files查看当前加载文件的内存映射,确认.text段的加载地址和objdump显示的0x100000是否一致,不一致的话就需要调整加载地址或者符号关联。

内容的提问来源于stack exchange,提问作者Jet Blue

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:54:42