Собсно сабж. кто-нибуть уже делал? застрял на передаче параметров через регистры в обоих процедурах Помогите разобратся плиз Код (Text): call GetCurrentProcessId mov r8d,eax ;dwProcessId = ProcessID xor rdx,rdx ;bInheritHandle = false mov ecx,PROCESS_ALL_ACCESS call OpenProcess test rax,rax jz Exit ;а здесь уже у мну проблемы mov r9d, PAGE_EXECUTE_READWRITE ;32-бит регистр? mov rcx, rax ;hProcess lea r8, dwSize ; lea? lea rdx, lpAddress ;а куда параметр OldProtection O_o call VirtualProtectEx ВАЖНО: линкер мелкософтовский из дистра VS2005 ml64 AMDx64. В 32-бите параметры просто пихаются в стёк, а тут нужно передать через регистры, а как это сделать я хз
faq.. Код (Text): sub esp,8*(5+5 & 1) ; выравнивание стека на границу 16 mov rcx,-1 lea rdx,[lpAddress] mov r8,[dwSize] mov r9,PAGE_EXECUTE_READWRITE lea rax,[OldProtection] mov [esp+8*4],rax ; 5й аргумент call VirtualProtectEx add esp,8*5+(5 & 1) очепятка..
asmfan Ага, спасибо. Копии кладутся внутри вызываемой функции, если надо (могла бы и стек сама выделить, как в fastcall).
Всем спасибо, проблема решена. Вот только матюкается на амперсанд, кушать не хочет =\ заменил на and то вроде работает... Код (Text): sub esp,8*(5+(5 and 1)) ЗЫ: за факу пасиба, почитал про стёк и передаваемые параметры