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

Ubuntu16.04 32位NASM汇编代码字符串长度计算异常求助

问题根因及修复方案

核心错误:未给长度变量分配内存

你在.bss段对长度变量的定义存在致命错误:

len_a resb 0
len_b resb 0

resb 0的语义是预留0字节内存,相当于没有给len_a、len_b分配任何存储空间,两个变量的地址和后续定义的num_a完全重合。你对len_a的写入操作会直接覆盖后续其他变量的内存,同时其他变量的操作也会篡改len_a的取值,这就是你计数逻辑执行次数正确,但最终长度值异常的根本原因。

修复方式:给每个长度变量分配1字节存储空间:

len_a resb 1
len_b resb 1

其他需要修复的逻辑错误

  • 系统调用参数错误:3号sys_read调用的ebx参数需要设为0(标准输入stdin的文件描述符),你当前设为2是标准错误流,无法正常读取用户输入。
  • 输入结尾判断错误:sys_read读取的输入不会自动补\0,输入内容的结尾是换行符\n(ASCII 0x0A),你当前判断cmp byte[input+edx],0无法正确识别输入结束,会导致内存越界遍历。建议改为判断是否等于换行符,或者使用sys_read的返回值(存放在eax中)确定输入总长度。
  • 输出逻辑错误:你的output函数每次固定输出10字节print_test缓冲区,你每次仅修改了缓冲区第一个字节,剩余9字节都是未初始化的垃圾值,会导致输出结果混杂无效字符。建议根据实际要输出的内容长度设置edx参数。

最小修复验证

将.bss段的len_a、len_b定义修改为resb 1后,重新编译运行即可看到长度计数符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 07:24:02