VirtualProtectEx и WriteProcessMemory в x64

Тема в разделе "WASM.X64", создана пользователем r00tk1d, 10 мар 2008.

  1. r00tk1d

    r00tk1d New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2007
    Сообщения:
    3
    Собсно сабж. кто-нибуть уже делал? застрял на передаче параметров через регистры в обоих процедурах :dntknw:
    Помогите разобратся плиз :dntknw:
    Код (Text):
    1.     call    GetCurrentProcessId
    2.     mov   r8d,eax       ;dwProcessId = ProcessID
    3.     xor     rdx,rdx     ;bInheritHandle = false
    4.     mov   ecx,PROCESS_ALL_ACCESS
    5.     call    OpenProcess
    6.  
    7.     test    rax,rax
    8.     jz   Exit
    9.  
    10. ;а здесь уже у мну проблемы
    11.     mov  r9d, PAGE_EXECUTE_READWRITE ;32-бит регистр?
    12.     mov  rcx, rax      ;hProcess
    13.     lea    r8, dwSize   ; lea?
    14.     lea    rdx, lpAddress
    15.  
    16. ;а куда параметр OldProtection O_o
    17.     call    VirtualProtectEx
    ВАЖНО: линкер мелкософтовский из дистра VS2005 ml64 AMDx64. В 32-бите параметры просто пихаются в стёк, а тут нужно передать через регистры, а как это сделать я хз :dntknw:
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    faq..
    Код (Text):
    1. sub  esp,8*(5+5 & 1) ; выравнивание стека на границу 16
    2. mov  rcx,-1
    3. lea  rdx,[lpAddress]
    4. mov  r8,[dwSize]
    5. mov  r9,PAGE_EXECUTE_READWRITE
    6. lea  rax,[OldProtection]
    7. mov  [esp+8*4],rax   ; 5й аргумент
    8. call VirtualProtectEx
    9. add  esp,8*5+(5 & 1)
    очепятка..
     
  3. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    Наверное так вот?

    А на стек копии пар-ров из регистров класть не надо (запамятовал ато)?
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    asmfan
    Ага, спасибо. Копии кладутся внутри вызываемой функции, если надо (могла бы и стек сама выделить, как в fastcall).
     
  5. r00tk1d

    r00tk1d New Member

    Публикаций:
    0
    Регистрация:
    20 окт 2007
    Сообщения:
    3
    Всем спасибо, проблема решена. Вот только матюкается на амперсанд, кушать не хочет =\ заменил на and то вроде работает...
    Код (Text):
    1.     sub esp,8*(5+(5 and 1))
    ЗЫ: за факу пасиба, почитал про стёк и передаваемые параметры :)