![]() |
Help -> Работа с Ntdll.dll
Из своей программы, получаю адресс загрузки NTDLL.DLL и хочу анализировать PE-заголовок, но при попытки проверки MZ-сигнатуры выдается сообщение об ошибки, ошибка доступа к памяти, доступ к памяти запрешен!
VirtualProtect на весь SizeOfImage из NTDLL.DLL тоже не помогает, хотя функция возвращает не ноль. При просмотре программы через ollyDBG, моя программа анализирует загловок NTDLL.DLL и выполняет то, что запланировано без ошибок. Как я понел: При выполнении моей проги в контексте отладчика (т.е. при просмотре в ольке) ошибок при обращении к адрессному пространству NTDLL.DLL - НЕТ, как добиться нормальной работы, в чем тут проблема??? :confused: |
фрагмент кода в студию
|
Код:
mov edx, 7C900000 |
>>mov edx, 7C900000
cmp word ptr[edx], 5A4Dh ; cmp 'MZ' jnz @end А ты уверен, что адрес загрузки там? C помощью LoadLibrary или GetModuleHandleA получаешь адрес загрузки и все прекрасно работает. |
0x0c0de При загрузки модуля NTDLL.DLL по умолчанию уже подгружено к каждому процесу, наподобия как kernel32.dll?
|
>>0x0c0de При загрузки модуля NTDLL.DLL по умолчанию уже подгружено к каждому процесу, наподобия как kernel32.dll?
Да |
GlOFF, компилятор?
даже делфя нормально сгенерила код и все отрабатывает вне оли: Код:
procedure TForm1.FormCreate(Sender: TObject); |
Разобрался :)
Странный факт! Заходим в ОЛЮ, при загрузке модуля на вершине стека [esp] лежит адресс в kernel32 , а на [esp+4] адресс в ntdll. А при запуске вне отладчика, по [esp+4] совсем другой адресс. :( Вот я и оперался на [esp+4]. |
| Время: 05:30 |