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

NASM x64环境下eax寄存器未获取缓冲区DebugStr预期值问题咨询

问题原因拆解

你遇到的是NASM新手非常常见的字符编码+字节序认知错误,具体原因如下:

  • 首先你定义的DebugStr存储的是ASCII字符,不是二进制数值:
    字符0的ASCII编码为0x30,字符1的ASCII编码为0x31,你写的DebugStr开头四个字符依次是0、1、1、1,对应内存里存储的四个字节就是0x30、0x31、0x31、0x31。
  • 其次是x86架构的小端字节序规则:
    mov eax, [r8]的作用是从r8指向的内存地址读取连续4个字节存入32位的eax寄存器,x86默认采用小端字节序,内存中低地址的字节会被放到寄存器的低8位,高地址的字节会被放到寄存器的高8位。
    四个字节按内存地址从低到高是0x30 0x31 0x31 0x31,拼接后存入eax的结果就是0x31313130,和你实际读到的结果完全吻合。

修正建议

如果你需要把字符串形式的二进制串转成对应的整数数值,不能直接读取内存,需要自行写转换逻辑:逐个读取字符,判断是0还是1,通过移位累加的方式计算得到最终的数值。
如果后续你要恢复读取外部文件的逻辑,还要注意区分文件存储的是文本形式的二进制串,还是原始二进制数据,前者都需要做ASCII到数值的转换才能得到你预期的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:06:04