x8664程序集在堆栈上创建字符串或为CreateFile创建寄存器

2024-10-02 18:14:13 发布

您现在位置:Python中文网/ 问答频道 /正文

首先,我知道如果我在编写纯汇编,我可以(并且会…)简单地在.data部分或类似部分中编写字符串。然而,在我的用例中,这不是一个选项

我使用的是python和keystone框架,所以没有.data部分。任务是执行CreateFile(Windows程序集)。你到底是如何制作一个像“C:\mine.exe”这样的字符串并将其放入RCX的

我尝试过qword…我尝试过将3个单独的值推送到堆栈上,然后将堆栈指向rcx。我能找到的任何方向都会有帮助。rax保存CreateFileA的地址(不管怎样,它的存根在kernel32.dll中)。RCX=1.tx(尽量简单…只是一个小测试

    "   mov     QWORD PTR [rsp+48], 0 ;"
    "   mov     DWORD PTR [rsp+40], 128             ;"
    "   mov     DWORD PTR [rsp+32], 2 ;"
    "   xor     r9d, r9d ;"
    "   xor     r8d, r8d ;"
    "   mov     edx, 1073741824                     ;"
    "   mov rcx, 0x00000000312e7479 ;"
    "   int3                        ;"
    "   call    rax ;"
    "   mov     QWORD PTR hFile$[rsp], rax ;"

下面的代码显示了另一种方法,其中我将值存储在堆栈上,然后尝试将rsp指向rcx

    "   mov     QWORD PTR [rsp+48], 0 ;"
    "   mov     DWORD PTR [rsp+40], 128             ;"
    "   mov     DWORD PTR [rsp+32], 2 ;"
    "   xor     r9d, r9d ;"
    "   xor     r8d, r8d ;"
    "   mov     edx, 1073741824                     ;"
    "   push 2e747874h ;"
    "   push 5c746573h ;"
    "   push 656e7473h ;"
    "   push 6f63756dh ;"
    "   push 696e5c44h ;"
    "   push 5c61646dh ;"
    "   push 73657273h ;"
    "   push 433a5c55h ;"
    "   int3                        ;"
    "   mov rcx, rsp                ;"
    "   call    rax ;"
    "   mov     QWORD PTR hFile$[rsp], rax ;"

Tags: 字符串data堆栈pushraxmovxorrsp