如何在NASM中推送64位int?

时间:2013-06-04 12:19:05

标签: assembly x86-64 nasm

我正在尝试推送一个64位整数,但是在组装NASM时似乎想把它看成是一个DWORD而不是QWORD。

我正在使用ASM来创建shellcode,我需要将64位DLL注入到64位进程中。第一个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

1 个答案:

答案 0 :(得分:14)

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

  1. 通过注册:mov rax, 0xACEACEACACEACEAC; push rax
  2. 浏览记忆:push qword [rel foo]
  3. 分为两部分:push dword low32; mov dword [rsp+4], high32sub rsp,8; mov dword [rsp], low32; mov dword [rsp+4], high32
  4. 如果您的直接允许,请使用sign-extension