我正在尝试推送一个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
答案 0 :(得分:14)
没有push imm64
指令。作为解决方法,您可以执行以下操作之一:
mov rax, 0xACEACEACACEACEAC; push rax
push qword [rel foo]
push dword low32; mov dword [rsp+4], high32
或sub rsp,8; mov dword [rsp], low32; mov dword [rsp+4], high32