Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.18;
Скачать: CL | DM;

Вниз

Изучаю PE заголовок...   Найти похожие ветки 

 
Spawn ©   (2003-07-05 12:01) [0]

...и вот появился такой вопрос. В одной статье написано, что поле Signature должно содержать ASCII код, обозначающий тип файла. Пробую делать так.

Base:=GetModuleHandle(nil);
ImageDosHeader:=PImageDosHeader(Base);
ImageNtHeaders:=PImageNtHeaders(Base+ImageDosHeader._lfanew);
ShowMessage(PChar(ImageNtHeader.Signature)); - так возникает Access Violetion

А если же я сделаю так

ShowMessage(PChar(Base+ImageDosHeader._lfanew)), то показывает сообщение с надписью "PE". Так в чем сдесь ошибка? Возможно, я еще не очень хорошо понимаю как нужно использовать указатели. Заранее спасибо.


 
R4D][   (2003-07-05 12:20) [1]

Сигнатура это не указатель, а DWORD, поэтому писать, что это PCHAR - ересь. Так же, так как PImageDos(NT)Header - это указатель, то надо использовать символ ^. В общем я проэксперементировал и вот, что получил. Показывает 17744, что по-моему соответсвует "PE", хотя я могу ошибаться:

var
ImageDosHeader: PImageDosHeader;
ImageNtHeaders: PImageNtHeaders;
Base ( nil)
Сигнатура это не указатель, а DWORD, поэтому писать, что это PCHAR - ересь. Так же, так как PImageDos(NT)Header - это указатель, то надо использовать символ ^. В общем я проэксперементировал и вот, что получил. Показывает 17744, что по-моему соответсвует "PE", хотя я могу ошибаться:

var
ImageDosHeader: PImageDosHeader;
ImageNtHeaders: PImageNtHeaders;
Base : THANDLE;
begin
Base:=GetModuleHandle(nil);
ImageDosHeader:=PImageDosHeader(Base);
ImageNtHeaders:=PImageNtHeaders(Base+ImageDosHeader^._lfanew);
ShowMessage(IntToStr(ImageNtHeaders^.Signature));
end;


 
R4D][   (2003-07-05 12:26) [2]

Да, соответсвует. Если добавить такой код перед самыым end;, то сообщение не выдается:

if ImageNtHeaders^.Signature<>IMAGE_NT_SIGNATURE then ShowMessage("error");


 
Spawn ©   (2003-07-05 14:24) [3]

Без значка указателя (^) абсолютно те же самые данные. То есть нет различия. И вообще обьясните мне плиз в чем разница записи ImageDosHeader._lfanew и ImageDosHeader^._lfanew ?


 
VMcL ©   (2003-07-05 15:51) [4]

>Spawn © (05.07.03 14:24)

Разницы нет.


 
Poirot ©   (2003-07-05 16:46) [5]

Сдаётся мне эта фишка осталась ещё от паскаля.... типа для совместимости!


 
Spawn ©   (2003-07-05 16:52) [6]

Избыточность языка программирования получается


 
R4D][   (2003-07-05 17:17) [7]

А я считаю, для порядка так сказать, для крайней ясности :)


 
Morfein ©   (2003-07-05 20:40) [8]


MessageBox(0, @ImageNtHeaders.Signature, nil, 0);


 
AlexRush ©   (2003-07-06 18:40) [9]

Если кому-то интересна тема, предлагаю глянуть rush-x-change.front.ru/peview.rar
Это исходнники моей проги, которая позволяет прсмотреть PE модуль подобно TDUMP"у.
P.S. Не судите строго, я ее писал, когда с ПЕ разбирался :)



Страницы: 1 вся ветка

Текущий архив: 2003.09.18;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.018 c
1-58762
Ghost
2003-09-06 13:37
2003.09.18
Не могу понять в чем ошибка :(


3-58594
3APA3A
2003-08-26 14:17
2003.09.18
Выбрать все записи в таблице


14-58907
Пкфте
2003-08-29 10:50
2003.09.18
TListView


14-58828
Igorek
2003-08-30 15:34
2003.09.18
Ну и про меня замолвите словечко


1-58692
Alibaba
2003-08-28 03:03
2003.09.18
DragDrop Pro