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

标签 assembly x86-64 nasm

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

我正在使用 ASM 创建将 64 位 DLL 注入(inject) 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
  • 遍历内存:push qword [rel foo]
  • 分两部分写:push dword low32; mov dword [rsp+4], high32sub rsp,8; mov dword [rsp], low32; mov dword [rsp+4], high32
  • 如果您的直接允许,请使用符号扩展
  • 关于assembly - 如何在 NASM 中推送 64 位整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16917643/

    相关文章:

    c - C代码在Visual Studio中编译成什么汇编语言?

    debugging - gdb + nasm调试信息未创建

    objective-c - Skype Mac API - 使用 AppleScript 还是 5 年前的 API?

    linux - 如何在 nasm 上正确设置 execve 调用?

    c - 将编译代码与 NASM 和 MSVC 链接时 Unresolved reference

    assembly - MIPS 计数 MARS 中 1's given a user input (B instruction doesn' t 跳转的数量)

    从masm 64调用C函数

    assembly - 如何在程序集 x86-64 中保存字符串临时变量

    testing - 如何测试引导加载程序

    assembly - 一个从数组中查找最大和最小数字的程序