NASM:解析器:指令预期rep movs

Rob*_*ass 2 x86 assembly nasm

我一直在将一个可执行文件转换成一些NASM shellcode(对于Windows来说,如果它是相关的)但是我遇到了"错误:解析器:指令预期"错误来自rep指令的所有地方.

label_0000641:
lea    edi,[esp+0x164]                      
label_0000648:
rep movs DWORD es:[edi],DWORD ds:[esi]
label_000064a:
and    DWORD [esp+0x168],0x0    
Run Code Online (Sandbox Code Playgroud)

是否有一些特殊的nasm语法?我犯了一个愚蠢的错误吗?我不知道如何修复这些错误,并且非常想要一些指导.

(我正在用nasm -f bin编译-o out.bin test.asm)

谢谢.

Sep*_*and 6

NASM不接受 rep movs DWORD es:[edi],DWORD ds:[esi]

来自NASM手册; 2.2.3 NASM不存储变量类型

根据设计,NASM选择不记住您声明的变量类型.虽然MASM会在看到var dw 0你将var声明为一个字大小变量时记住,然后能够填写指令大小的模糊性mov var,2,NASM会故意记住符号变量,除非它开始,所以你必须明确地编码mov word [var],2.

出于这个原因,NASM不支持LODS,MOVS,STOS,SCAS,CMPS,INS,或OUTS说明,但仅支持形式,如LODSB,MOVSWSCASD,其中明确指定字符串的组件的尺寸被操纵.

因此,使用的代码是 rep movsd