Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2003.09.18;
Скачать: [xml.tar.bz2];

Вниз

Изучаю 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.46 MB
Время: 0.01 c
1-58611
DelphiNew
2003-09-08 14:58
2003.09.18
Чувствительность к регистру


8-58791
Ricks
2003-05-12 22:22
2003.09.18
JPEG


3-58563
zorik
2003-08-27 13:50
2003.09.18
сайт по IB


3-58601
AlexWeb
2003-08-26 13:11
2003.09.18
Почему не редактируется таблица в DBGrid-е?


3-58517
P0tia
2003-08-28 13:33
2003.09.18
Сохранение Рабочий книги в





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский