How to push a 64bit int in NASM?

生来就可爱ヽ(ⅴ<●) 提交于 2019-12-17 06:14:53

问题


I'm trying to push a 64bit integer but when assembling NASM seems to want to see it as a DWORD not a QWORD.

I'm using ASM to create the shellcode I need to inject a 64bit DLL into a 64bit process. The first QWORD is the old instruction pointer, the second is the address containing the address of the DLL, the third is the address of LoadLibrary. The placeholders are filled in at runtime.

section .text
global _start   

_start:
BITS 64
PUSH QWORD 0xACEACEACACEACEAC
PUSHFQ
push rax
PUSH QWORD 0xACEACEACACEACEAC
MOV RAX, 0xACEACEACACEACEAC
CALL RAX
pop RAX
POPFQ
RETN

回答1:


There is no push imm64 instruction. As a workaround you can do one of the following:

  1. go through a register: mov rax, 0xACEACEACACEACEAC; push rax
  2. go through memory: push qword [rel foo]
  3. write it in two parts: push dword low32; mov dword [rsp+4], high32 or sub rsp,8; mov dword [rsp], low32; mov dword [rsp+4], high32
  4. use sign-extension if your immediate allows it


来源:https://stackoverflow.com/questions/16917643/how-to-push-a-64bit-int-in-nasm

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!