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

GDB无法打印汇编代码中value2的原因排查求助

问题原因与修复方案

1. 调试符号缺失是核心问题

你没有在汇编阶段生成调试符号,导致GDB只能依赖ELF符号表的基础信息,无法正确关联.short类型的value2到.data段,进而出现地址显示错误、无法打印值的情况。

修复步骤

汇编时添加-g选项生成调试信息:

as -g your_asm.s -o asm.o

再用ld链接生成可执行文件:

ld asm.o -o asm_exec

重新启动GDB调试,此时print &value2会显示正确的.data段内地址,print value2也能正常输出值。

2. 段对齐机制的误解

x86 ELF的.data段默认按4字节(32位环境)/8字节(64位环境)对齐,汇编器会自动插入填充字节以满足对齐要求:

  • value1(.int,4字节)占据.data起始的4字节空间
  • value2(.short,2字节)紧跟在value1之后,地址为value1 + 4,完全属于.data段
  • value3(.byte,1字节)之后会被填充1字节,凑够8字节对齐

你可以在GDB中执行info sections查看.data段的地址范围,对比print &value2的结果,就能确认它在.data段内。

3. 验证符号存在性

用readelf检查可执行文件的符号表,确认value2确实存在:

readelf -s asm_exec | grep value2

如果能看到对应的符号条目,说明链接器没有丢弃该变量,只是GDB缺少调试信息无法正确解析。

内容的提问来源于stack exchange,提问作者Victoria Hwang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 18:31:02