 |
Help -> Работа с Ntdll.dll |

25.11.2007, 21:50
|
|
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
С нами:
10531106
Репутация:
1338
|
|
Help -> Работа с Ntdll.dll
Из своей программы, получаю адресс загрузки NTDLL.DLL и хочу анализировать PE-заголовок, но при попытки проверки MZ-сигнатуры выдается сообщение об ошибки, ошибка доступа к памяти, доступ к памяти запрешен!
VirtualProtect на весь SizeOfImage из NTDLL.DLL тоже не помогает, хотя функция возвращает не ноль.
При просмотре программы через ollyDBG, моя программа анализирует загловок NTDLL.DLL и выполняет то, что запланировано без ошибок.
Как я понел: При выполнении моей проги в контексте отладчика (т.е. при просмотре в ольке) ошибок при обращении к адрессному пространству NTDLL.DLL - НЕТ, как добиться нормальной работы, в чем тут проблема??? 
Последний раз редактировалось GlOFF; 25.11.2007 в 22:27..
|
|
|

25.11.2007, 23:02
|
|
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
С нами:
9981026
Репутация:
1564
|
|
фрагмент кода в студию
|
|
|

25.11.2007, 23:27
|
|
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
С нами:
10531106
Репутация:
1338
|
|
Код:
mov edx, 7C900000
cmp word ptr[edx], 5A4Dh ; cmp 'MZ'
jnz @end
Ошибка при попытке чтения word по адресу загрузки ntdll.dll (7C900000 - на WinXP SP2).
Последний раз редактировалось GlOFF; 25.11.2007 в 23:31..
|
|
|

25.11.2007, 23:34
|
|
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
С нами:
9981026
Репутация:
1564
|
|
>>mov edx, 7C900000
cmp word ptr[edx], 5A4Dh ; cmp 'MZ'
jnz @end
А ты уверен, что адрес загрузки там? C помощью LoadLibrary или GetModuleHandleA получаешь адрес загрузки и все прекрасно работает.
Последний раз редактировалось 0x0c0de; 25.11.2007 в 23:38..
|
|
|

25.11.2007, 23:37
|
|
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
С нами:
10531106
Репутация:
1338
|
|
0x0c0de При загрузки модуля NTDLL.DLL по умолчанию уже подгружено к каждому процесу, наподобия как kernel32.dll?
|
|
|

25.11.2007, 23:41
|
|
Постоянный
Регистрация: 25.05.2007
Сообщений: 448
С нами:
9981026
Репутация:
1564
|
|
>>0x0c0de При загрузки модуля NTDLL.DLL по умолчанию уже подгружено к каждому процесу, наподобия как kernel32.dll?
Да
|
|
|

26.11.2007, 00:15
|
|
Познавший АНТИЧАТ
Регистрация: 26.11.2004
Сообщений: 1,367
С нами:
11291486
Репутация:
2175
|
|
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;
|
|
|

26.11.2007, 00:28
|
|
Постоянный
Регистрация: 08.05.2006
Сообщений: 816
С нами:
10531106
Репутация:
1338
|
|
Разобрался
Странный факт! Заходим в ОЛЮ, при загрузке модуля на вершине стека [esp] лежит адресс в kernel32 , а на [esp+4] адресс в ntdll.
А при запуске вне отладчика, по [esp+4] совсем другой адресс.  Вот я и оперался на [esp+4].
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|