汇编语言 nasm 错误

Assembly Language nasm error

我按照教科书的规定用intel 64位语法写了下面的汇编代码

Section .text
global _short
_start:
        jmp short    Gotocall
shellcode:
        pop             rcx
        xor             eax,eax
        mov byte        [rcx+8], al
        lea             rdi, [rax]
        mov long        [rcx+8], rdi
        mov long        [rcx+12], eax
        mov byte        al, 0x3b
        mov             rsi, rax
        lea             rdi, [esi+8]
        lea             edx, [esi+12]
        int             0x80

Gotocall:

        call            shellcode
        db              '/bin/shJAAAAKKKK'

但是我在第 10 行遇到了一个 nasm 错误,就像这样 asmshell.asm:10: 错误:操作数大小不匹配 谁能告诉我他们在我的代码中有什么错误。

谁能告诉我一些关于 64 位英特尔汇编指令的好参考资料。

如果你的意思是错误在第 10 行

mov long [rcx+8], rdi

我正要问你 long 限定符是什么大小,但是下一行

mov long [rcx+12], eax

表明您正在将两个不同大小的寄存器移动到相同大小的目的地。第一种情况下64位寄存器rdi,第二种情况下32位寄存器eaxlong不能同时满足。

为什么不直接删除 long 因为通过指定寄存器,汇编程序知道目标的大小?但遗憾的是,您只允许 4 字节内存存储 64 位寄存器,由 [rcx+8] 后跟 [rcx+12].

给出

也许你有意

mov long [rcx+8], edi