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