6

我正在尝试推送一个 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
4

1 回答 1

21

没有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. 如果您的直接允许,请使用符号扩展
于 2013-06-04T14:44:10.900 回答