6

64 ビット整数をプッシュしようとしていますが、NASM をアセンブルするときに、QWORD ではなく DWORD として認識したいようです。

ASM を使用して、64 ビット DLL を 64 ビット プロセスに挿入するために必要なシェルコードを作成しています。最初の QWORD は古い命令ポインター、2 番目は DLL のアドレスを含むアドレス、3 番目は 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. それを 2 つの部分に分けて書く:push dword low32; mov dword [rsp+4], high32またはsub rsp,8; mov dword [rsp], low32; mov dword [rsp+4], high32
  4. 即時に許可されている場合は、符号拡張を使用してください
于 2013-06-04T14:44:10.900 に答える