PDA

Просмотр полной версии : HELP -> Работа с NTDLL.DLL


GlOFF
25.11.2007, 21:50
Из своей программы, получаю адресс загрузки NTDLL.DLL и хочу анализировать PE-заголовок, но при попытки проверки MZ-сигнатуры выдается сообщение об ошибки, ошибка доступа к памяти, доступ к памяти запрешен!
VirtualProtect на весь SizeOfImage из NTDLL.DLL тоже не помогает, хотя функция возвращает не ноль.
При просмотре программы через ollyDBG, моя программа анализирует загловок NTDLL.DLL и выполняет то, что запланировано без ошибок.

Как я понел: При выполнении моей проги в контексте отладчика (т.е. при просмотре в ольке) ошибок при обращении к адрессному пространству NTDLL.DLL - НЕТ, как добиться нормальной работы, в чем тут проблема??? :confused:

0x0c0de
25.11.2007, 23:02
фрагмент кода в студию

GlOFF
25.11.2007, 23:27
mov edx, 7C900000
cmp word ptr[edx], 5A4Dh ; cmp 'MZ'
jnz @end

Ошибка при попытке чтения word по адресу загрузки ntdll.dll (7C900000 - на WinXP SP2).

0x0c0de
25.11.2007, 23:34
>>mov edx, 7C900000
cmp word ptr[edx], 5A4Dh ; cmp 'MZ'
jnz @end

А ты уверен, что адрес загрузки там? C помощью LoadLibrary или GetModuleHandleA получаешь адрес загрузки и все прекрасно работает.

GlOFF
25.11.2007, 23:37
0x0c0de При загрузки модуля NTDLL.DLL по умолчанию уже подгружено к каждому процесу, наподобия как kernel32.dll?

0x0c0de
25.11.2007, 23:41
>>0x0c0de При загрузки модуля NTDLL.DLL по умолчанию уже подгружено к каждому процесу, наподобия как kernel32.dll?

Да

ProTeuS
26.11.2007, 00:15
GlOFF, компилятор?

даже делфя нормально сгенерила код и все отрабатывает вне оли:

procedure TForm1.FormCreate(Sender: TObject);
var
res: integer;
begin
res := 0;
asm
pushad
MOV EDX,$7C900000
CMP WORD PTR [EDX],$5A4D
JNZ @fail
mov res, 1
jmp @ending
@fail:
mov res, 0
@ending:
popad
end;

if res = 1 then Showmessage('Found!') else Showmessage('Failed !')
end;

GlOFF
26.11.2007, 00:28
Разобрался :)

Странный факт! Заходим в ОЛЮ, при загрузке модуля на вершине стека [esp] лежит адресс в kernel32 , а на [esp+4] адресс в ntdll.
А при запуске вне отладчика, по [esp+4] совсем другой адресс. :( Вот я и оперался на [esp+4].