Не могу понять, в чем ошибка, или масм глючит, или я не знаю какой-то матчасти. Есть код вида Код (ASM): invoke GetModuleHandle,chr$("user32.dll") mov pMem,rax invoke VirtualProtect,pMem,16d,PAGE_EXECUTE_READWRITE,addr oldProtect ;т.е. это invoke NtProtectVirtualMemory,INVALID_HANDLE_VALUE,ppMem,addr tmp,PAGE_EXECUTE_READWRITE,addr oldProtect Перевожу вызов функции на сисколл Код (ASM): mov rcx,INVALID_HANDLE_VALUE mov rdx,ppMem lea r8,tmp mov r9,PAGE_EXECUTE_READWRITE lea rax,oldProtect mov qword ptr [rsp+32],rax call xNtProtectVirtualMemory ;Вот эта строка xNtProtectVirtualMemory: ;и эта, без них не робит mov r10, rcx mov eax, 50h syscall ret Почему-то оно не работает, если убрать эти две строки (call и метку), тогда идет ошибка доступа к памяти (C000005) и сискол не отрабатывает. Если же метку и переход оставить, то норм. Почему так?
В сурках XP описаны прототипы и непосредственно открыт код сервисной обработки, прототипы смотри. Только не позеленей при этом
Indy_, так а что не так? Хендл текущего процесса же будет HANDLE - 1, т.е. вот эта константа. --- Сообщение объединено, 20 июн 2020 --- И с обычным вызовом натив апи работает, сисколл только нет.
M0rg0t, А тебе не очевидно что стек смещён ? Когда вызываешь процедуру он смещается, а сервисные аргументы не только через регистры передаются. Да и вообще зачем тебе сервисы трогать, глупая бессмысленная затея. --- Сообщение объединено, 20 июн 2020 --- > т.е. вот эта константа. Это код ошибки использованный вместо описателя процесса, значение тоже но смысл иной.
Да вроде как очевидно, но непонятно. Т.е. достаточно добавить push rax и будет норм? Ну интересно просто, для обучения. А как надо? (HANDLE - 1 ) ?
Ошибка в конвенции вызова, вроде как NumberOfBytesToProtect должно быть в r8, указатель OldAccessProtection на стеке. Если сам исполняемый код доступен на запись, то все работает как надо, если READ_EXECUTE то странно что оно отрабатывает.
Это есть , см rax (заношу адрес туда и на стек). Ну обычный вызов апи отрабатывает , просто через сисколл нужно добавить еще 1 пуш..
ormoulu, там все идентичное. Просто видимо нужен лишний push , возможно внутри функция (в ядре) что-то там считает, хз. В юзермодном отладчике, повторюсь, отличий нет.
Сервис в курсе, что на стеке должен быть есчо и адрес возврата из NtProtectVirtualMemory --- Сообщение объединено, 20 июн 2020 --- То есть тупо по коду если, то вот это смещение в стеке 6. mov qword ptr [rsp+32], rax без call будет другим
Подниму тему. Реально ли выполнить сискол в WOW64 без Heavens Gate? Пишу примерно так Код (ASM): push offset oldProtect push PAGE_EXECUTE_READWRITE mov tmp,4096 push offset tmp ; NumberOfBytesToProtect, push offset pMem push 0FFFFFFFFh ; дальше либо так mov eax, 50h ;тут номер NtProtectVM lea edx,[esp+4] xor ecx,ecx assume fs:nothing call dword ptr fs:[0C0h] ;TEB->WOW32Reserved ;либо так, один хрен ACCESS_VIOLATION invoke GetModuleHandleW,uni$("ntdll") mov edx,eax invoke GetProcAddress,edx,chr$("Wow64Transition") .if !eax exit .else mov dwWOW, eax ;addr wow64t .endif mov edx,dwWOW .... call @f @@: call dword ptr[edx] Опять , все как в дебагере, а на деле х. --- Сообщение объединено, 13 дек 2020 --- Все работает, видимо временный глюк с выравниванием / стеком / алкоголем.
M0rg0t, Слой эмуляции wow64, не получится по простому. Предлагаю выложить дамп кл что бы ссылаться на уже решённые задачи. Тем более ты ведь его выкачал.
Я не хочу вручную эмулировать это все, просто прыжок туда, а там пусть ОС выполняет. Так то вроде работает, не знаю насколько стабильное решение правда. так надо куда-то залить, видимо. Я же делал chm файл, но это не то. Сайт какой-то сделать рид-онли и туда?
M0rg0t, > Сайт какой-то сделать рид-онли и туда? Не знаю, тебе лучше знать. Да и вообще вопрос не простой, если даже сюда это прицепить то вероятно форум заддосят или есчо как то поломают.
А почему бы, как и все решения (являющиеся ответами не только на многие заданные вопросы, но так же и на которые есчо никто не думал задавать!) не выкласть на inde-vx.nаrod.ru в html? Или даже в chm. И ссылацо на нево, типо, иди вон цхм читай там всё решено где выборка из еп и графствует морфом по стеку
О хоспаде, я уже писал, сделайте экспорт в html, чтобы все ссылки между страницами работали, и захостите бесплатно на гитхабе. Визоры они осилили, а статический сайт запостить не могут, позорище, а не спецы.