Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Аватара для DillerInc

Обратный инженер


Сообщения: 644
Благодарности: 47

Профиль | Отправить PM | Цитировать


Вообще,как то странно это...к примеру:
Код: Выделить весь код
var
 EntryPoint : LPDWORD;
 Temp_Protect : Cardinal;
begin
 VirtualProtectEx(pInfo.hProcess, PPointer(EntryPoint), 2, PAGE_EXECUTE_READWRITE, Temp_Protect);
end;
...работает на ура,а этот вариант:
Код: Выделить весь код
var
 ProcAddress : LPDWORD;
 Temp_Protect : Cardinal;
begin
 ProcAddress := LPDWORD(GetProcAddress(GetModuleHandle('Kernel32.dll'), 'LoadLibraryA'));
 VirtualProtectEx(pInfo.hProcess, PPointer(ProcAddress), 2, PAGE_EXECUTE_READWRITE, Temp_Protect);
end;
...продолжает упорно возвращать STATUS_CONFLICTING_ADDRESSES, хотя если взять последнюю предоставленную ссылку,то там описывается как раз аналогичный вариант с внедрением своего кода в начало системной функции (только там сразу применяется функция ReadProcessMemory,что кстати странно, т.к. кто гарантирует,что у нас есть право записи в эту страницу памяти ).
Вопрос: почему первый вариант работает,а второй нет ?
Как можно поправить ситуацию ?

-------
То,что неясно,следует выяснить.То,что трудно творить,следует делать с великой настойчивостью. © Конфуций


Отправлено: 21:31, 23-07-2005 | #8