Reputation: 13
I have written the following assembly code as prescribed by my text book in the intel 64 bit syntax
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'
but i get a nasm error in line 10 like this asmshell.asm:10: error: mismatch in operand sizes Can anybody tell me what mistake is their in my code.
And can anybody please tell me some good references to the 64 bit intel assembly instructions.
Upvotes: 0
Views: 546
Reputation: 34560
If you mean the error is on line 10
mov long [rcx+8], rdi
I was about to ask you what size long
qualifier is, but the next line
mov long [rcx+12], eax
shows that you are moving two different sizes of register to the same size destination. In the first case the 64-bit register rdi
, in the second case the 32-bit register eax
, and long
cannot satisfy them both.
Why not just drop the long
since by specifying the register, the assembler knows the size of the destination? But sadly, you have only allowed 4 bytes memory to store a 64-bit register, given away by the [rcx+8]
followed by [rcx+12]
.
Perhaps you intended
mov long [rcx+8], edi
Upvotes: 1