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

为何GDB查看内存结果会因是否预先查看字符串而存在差异?

GDB 查看内存地址返回结果不一致问题解答

两个返回结果均准确,差异来自GDB x(examine)命令的默认参数记忆特性:

  • GDB的x命令支持自定义读取长度、单位、显示格式,若未显式指定参数,会复用最近一次执行x命令时的配置。
  • 初始状态下x86_64环境的GDB默认x命令读取单位为4字节(word),因此首次直接执行x/x 0x401110会读取该地址起始的4个连续字节,按x86小端序拼接后返回0x000001b8。
  • 若先执行x/s 0x404028查看字符串,x/s为了按字符遍历会隐式将读取单位设置为1字节(byte),后续再执行x/x 0x401110时就只会读取该地址的首个字节,返回0xb8,这个值正好是4字节结果0x000001b8的最低有效字节,和你观察到的偏移地址结果等于原结果右移1字节的规律完全吻合。

内存地址本身的最小寻址单位就是1字节,0x401110本身指向的是1字节的存储单元,不存在“实际对应4字节还是单字节”的说法,你可以根据需求读取该地址起始任意长度的内容。

要彻底避免该类问题,每次执行x命令时显式指定读取单位即可:

  • 单字节十六进制读取:x/xb 0x401110
  • 2字节十六进制读取:x/xh 0x401110
  • 4字节十六进制读取:x/xw 0x401110
  • 8字节十六进制读取:x/xg 0x401110

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 15:24:04