[?] mprotect & windows
А чего ты хоешь в итоге?
VirtualProtect
В итоге хочу получить доступ на запись и исполнение страницы. Разбираюсь с полиморфным кодом.
Насколько я понял из MSDN-а, VirtualProtect работает только с явно выделенной раньше памятью, а мне нужно получить право на запись в сегмент кода.
Ты плохо понял. Связка [Open/Create]Process->VirtualProtectEx работает на ура.
Подсовываешь указатель на код, который хочешь изменять в VirtualProtect и устанавливаешь права на read/write/execute.
В x86 это невозможно afaik.
однако (если вспомнить mmap) можно сделать это хаком:
мапить можно файл, причем несколько раз один файл замапить можно. но с разными доступами.
1) мапим с возможностью read+execute
2) мапим с возможностью write
Все получилось, комбинацией OpenProcess и WriteProcessMemory
Стек исполним.
а, перепутал
library project1;
{всякий код}
{$ifdef fpc}
procedure fpc_do_exit;stdcall;external name 'FPC_DO_EXIT';
var
tt:integer;
p:^byte;
{$endif}
begin
{$ifdef fpc}
{$ifdef mswindows}
p:=pointer(@FPC_DO_EXIT);
VirtualProtect(p,5,PAGE_EXECUTE_READWRITE,@tt);
p^:=$C3;
{$endif}
{$endif}
end.
Оставить комментарий
stm7583298
Подскажите, плз, как в винде сэмулировать вызов mprotect, например такой:mprotect( (char*)page, getpagesize PROT_READ | PROT_WRITE | PROT_EXEC )
Эмуляцию getpagesize уже нашел.