MasmBasic文件加密汇编代码报错A2008:第15行逗号语法错误
MasmBasic文件加密代码编译报错A2008的解决方法
你的代码编译报错test.asm(15) : error A2008: syntax error : ,,主要是三个问题导致的:MasmBasic不存在ByteAt语法、操作数类型不匹配、xor指令不支持双内存操作数。以下是具体修正方案:
错误原因分析
- 无
ByteAt宏:MasmBasic没有ByteAt(addr, index)这种用法,直接用key[索引]的内存寻址方式即可。 - keyLength定义错误:
keyLength db 3,0定义了两个字节,且字节类型和32位寄存器ebx做模运算时会有类型冲突,改成编译期常量更合适。 - xor指令操作数非法:Masm不允许xor指令直接对两个内存地址进行运算,必须将其中一个操作数加载到寄存器后再执行运算。
修正后的完整代码
include \masm32\MasmBasic\MasmBasic.inc .data key db "AMU", 0 keyLength equ 3 ; 改为编译期常量,避免类型不匹配问题 Init Let esi = Input$("Enter the filename: ", "test.txt") Let edi = FileRead$(esi) Let eax = LastFileSize Let ebx = 0 For_ ebx = 0 To eax - 1 ; 先将key对应位置的字节加载到al寄存器 mov al, key[ebx % keyLength] ; 明确指定byte ptr,确保汇编器识别为字节操作 xor byte ptr [edi + ebx], al Next ; 生成加密后的文件名(若原文件名无点号,需额外处理,此处保留原逻辑) Let esi = Left$(esi, Rinstr(esi, ".")) + "xyz" ; 写入加密后的文件 FileWrite esi, edi, LastFileSize EndOfCode
编译验证
使用原编译命令即可通过:
ml.exe /c /coff test.asm
之后可通过link工具链接生成可执行文件:
link /subsystem:console test.obj kernel32.lib user32.lib masm32.lib
内容的提问来源于stack exchange,提问作者exe apk world
相关产品推荐
相关产品推荐

