![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Форумчанин
Регистрация: 22.04.2013
Сообщений: 588
|
![]()
КАК сигнатура узнает какие байты РЕ файла соотвецтвуют ее частям? К примеру, я хочу начать разбор файла.
Отсчитывать байты равными долями или же как? То есть для каждого поля структуры- сигнатуры, как опридилить что чему соотвецтвует? Код:
|
![]() |
![]() |
![]() |
#2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
РЕ формат читает загрузчик операционки, и как правило он опирается на смещения. Т.е. (очень грубо скажу) например 4 первых байта - указатель на сколько сместиться в глубину файла, чтоб стать на первый байт секции данных. Следующие 4 - смещение на секцию, где находится скомпилированный код. Почитай про формат РЕ, как он устроен, и какие данные заголовок исполнимого файла хранит. Можешь, если хочешь, взять мою статью про компиляторы, я в первых главах слегка разбирал этот заголовок.
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#3 |
Форумчанин
Регистрация: 22.04.2013
Сообщений: 588
|
![]()
А как для начала найти статью?
|
![]() |
![]() |
![]() |
#4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]()
В блоге нашего клуба: http://www.programmersclub.ru/%D0%9A...D%D0%B8%D1%8F/
Там же в конце чтиво.
I'm learning to live...
|
![]() |
![]() |
![]() |
#5 | |
Форумчанин
Регистрация: 22.04.2013
Сообщений: 588
|
![]()
Спасибо!!!
Я так и не понял насчет поля e_lfanew. Это по ходу самое важное поле этой сигнатуры, _IMAGE_DOS_HEADER, а я не понял. Вот я всю статью читаю в нотепаде, я озаглавил .asm ак много красивее подсветка. Возьмем также типовой файл .exe. во всяком случае нормальный файл и без наворотов, я его прилагаю. И вот его разбор. Я размечаю поля структуры (сигнатуры или как ее) прямо в нотепаде. Цитата:
Код:
PE-заголовок Формат PE-заголовка представлен структурой Последний раз редактировалось Stilet; 01.07.2014 в 23:24. |
|
![]() |
![]() |
![]() |
#6 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
Это поле в первом заголовке. Заголовке старого DOS, который еще оставлен. Х.з. для чего. Так вот это поле - указатель на сколько байт сместиться от начала файла (от его первого байтика) чтоб наткнуться на байты, описывающие PE заголовок - новый тип заголовкой применяемых в Винде. Вот винда именно со второго заголовка читает описание файла, и как его загружать. А первый DOS-заголовок ей нужен только чтоб попасть во второй (ну и для совместимости еще)
I'm learning to live...
|
|
![]() |
![]() |
![]() |
#7 |
Форумчанин
Регистрация: 22.04.2013
Сообщений: 588
|
![]()
указатель на сколько байт сместиться от начала файла (от его первого байтика) чтоб наткнуться на байты, описывающие PE заголовок - новый тип заголовкой применяемых в Винде.
Конечно. Это поле указатель на PE заголовок. Я только найти его не могу! Я же понимаю что оно должно быть не ноль. Однако если PE файл разбирать равномерно от начала разбивая его, по 2 байта и заполняя поля структуры _IMAGE_DOS_HEADER то сначала все так, а вот в конце чего то не то, ерунда выходит. во всяком случае все врод так кроме этого самого поля e_lfanew! То есть, пока поставим вопрос так Я разбираю файл PE ,,руками,, В каких случаях, запролняя поля структур- можно разбирать его последовательно, по два байта ( ну смотря если поле структуры DWORD то видимо четыре и т.п.) А в каких нельзя? Последний раз редактировалось Stilet; 01.07.2014 в 19:13. |
![]() |
![]() |
![]() |
#8 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
и научитесь считать, все там должно быть. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
![]() |
![]() |
![]() |
#9 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
![]() Цитата:
![]() Цитата:
Во всех остальных случаях РЕ заголовок разбирается одинаково. Смотри:Безымянный.jpg Заголовок начинается буквами "РЕ". Указатель на него я выделил.
I'm learning to live...
|
||
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 22.04.2013
Сообщений: 588
|
![]()
Спасибо!!! !! Да.. Да, я видел в общем 80 00 00 00, только думал что это 80. И не знал куда же отнести его. Конечно я нашол ''PE", разобрал и часть дальше- машина и т.п. Я еще хотел понять все принципы! Ну вроде я программа и делаю все как программа.
Да, конечно же! К стати 80 и есть, там же все перевернуто. И все же смотрите! LONG e_lfanew; // Адрес в файле нового .exe-заголовка 00 00 24-25 Где 24-25- это смещение поля e_lfanew если каждое поле структуры щитать по 2 байта, последовательно. У нас же, 80 00 00 00- значение поля e_lfanew расположено в 3C-3F! Да, я на пару часов отвлекся и вроде все более проясняется. попробую файл дальше расписать, где что. Последний раз редактировалось Stilet; 01.07.2014 в 23:25. |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Сигнатура проблемы. | D3caHTH1k | Помощь студентам | 2 | 16.06.2013 16:26 |
Сигнатура. | фудоррр | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 21.04.2012 00:09 |
Сигнатура | Dasha1610 | Помощь студентам | 2 | 04.04.2012 00:48 |
Сигнатура. | Dasha1610 | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 30.03.2012 16:29 |
Сигнатура криптора | Flippp | Общие вопросы Delphi | 0 | 27.09.2009 15:11 |