Сборка x86-64 - создание строки в стеке или регистра для CreateFile - PullRequest
0 голосов
/ 04 февраля 2020

Прежде всего, я знаю, что если бы я писал чистую сборку, я мог бы (и хотел бы ..) просто написать строки в разделе .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 ;"
...