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

汇编项目编译报错‘undefined symbol: stringread’的含义与原因咨询

汇编代码编译错误:undefined symbol: stringread 问题解析

问题重现

在大学汇编课程的项目中,最初在.data段声明字符串/数组时使用了错误语法:

stringread BYTE DUP(STRSIZE)

主函数中调用ReadFileLine的代码如下:

push OFFSET stringread
push esi
call ReadFileLine
pop esi
pop OFFSET stringread

编译时触发错误:

undefined symbol: stringread

将声明修改为stringread BYTE STRSIZE DUP(?)后,编译通过,问题解决。

错误含义

undefined symbol: stringread 表示汇编器在代码中找不到名为stringread的有效符号定义——你的stringread声明不符合汇编语法规范,导致汇编器未将其识别为合法符号,后续代码引用时就会判定该符号未定义。

出错原因

主流x86汇编器(如MASM、NASM)中,使用DUP批量定义数据的语法规则为:类型 重复次数 DUP(重复内容)。

你最初的写法完全颠倒了顺序:

  • 正确逻辑:先指定重复次数(STRSIZE),再写DUP关键字,最后在括号内定义重复的内容(这里用?表示未初始化的字节)
  • 错误写法把DUP放在了次数前面,汇编器无法解析该声明,自然不会生成stringread这个符号,后续代码引用OFFSET stringread时就会触发符号未定义错误。

对比教授的示例array DWORD 1,2,3,4,5,这是直接枚举数据的写法;而用DUP批量定义时,必须遵循[类型] [次数] DUP([内容])的语法,stringread BYTE STRSIZE DUP(?)就是正确写法:告诉汇编器定义一个名为stringread的字节数组,长度为STRSIZE,每个字节初始化为未定义状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 05:02:18