汇编语言 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位寄存器eax
,long
不能同时满足。
为什么不直接删除 long
因为通过指定寄存器,汇编程序知道目标的大小?但遗憾的是,您只允许 4 字节内存存储 64 位寄存器,由 [rcx+8]
后跟 [rcx+12]
.
给出
也许你有意
mov long [rcx+8], edi
我按照教科书的规定用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位寄存器eax
,long
不能同时满足。
为什么不直接删除 long
因为通过指定寄存器,汇编程序知道目标的大小?但遗憾的是,您只允许 4 字节内存存储 64 位寄存器,由 [rcx+8]
后跟 [rcx+12]
.
也许你有意
mov long [rcx+8], edi