如何在NASM中推送64位整数?

我试图推送一个64位整数,但是在组装时,NASM似乎希望将其视为DWORD而不是QWORD。

我正在使用ASM创建我需要将64位DLL注入64位进程的shellcode。 第一个QWORD是旧的指令指针,第二个是包含DLL地址的地址,第三个是LoadLibrary的地址。 占位符在运行时填入。

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

没有push imm64指令。 作为解决方法,您可以执行以下任一操作:

  • 通过一个寄存器: mov rax, 0xACEACEACACEACEAC; push rax mov rax, 0xACEACEACACEACEAC; push rax
  • 通过内存: push qword [rel foo]
  • 将它分为两​​部分: push dword low32; mov dword [rsp+4], high32 push dword low32; mov dword [rsp+4], high32sub rsp,8; mov dword [rsp], low32; mov dword [rsp+4], high32 push dword low32; mov dword [rsp+4], high32 sub rsp,8; mov dword [rsp], low32; mov dword [rsp+4], high32 sub rsp,8; mov dword [rsp], low32; mov dword [rsp+4], high32
  • 如果您的立即允许使用符号扩展名
  • 链接地址: http://www.djcxy.com/p/72421.html

    上一篇: How to push a 64bit int in NASM?

    下一篇: Assembly get actual variable address?