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

i386汇编读取内存值时寄存器数值异常跳升问题

问题成因

核心问题是操作数大小不匹配引发的内存越界读取:

  • .data段中direction_offset用db定义,属于单字节变量,仅占用1字节内存,存储的有效值只有0x03
  • 32位x86汇编场景下,执行mov esi, [direction_offset]时,esi是32位(4字节)寄存器,NASM默认会从direction_offset对应的内存地址连续读取4字节数据赋值给esi
  • 你的direction_offset后紧跟direction数组,所以读取的4字节中,除首字节是预期的0x03,后3字节都是direction数组前3个元素的数值,经x86小端模式拼接后就得到了调试时看到的异常大值。

修复方案

任选一种即可:

  1. 修改变量定义,将direction_offset改为4字节双字类型,匹配32位寄存器读取长度:
direction_offset dd 3
direction db -15,1,15,-1
  1. 读取时指定操作数大小,做零扩展后赋值给32位寄存器:
; 仅读取direction_offset的1个字节,高位补0填充为32位后赋值给esi
movzx esi, byte [direction_offset]
mov edi, [direction + esi]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 13:45:03