|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
30.06.2014, 17:55 | #1 |
Форумчанин
Регистрация: 22.04.2013
Сообщений: 592
|
КАК сигнатура знает!
КАК сигнатура узнает какие байты РЕ файла соотвецтвуют ее частям? К примеру, я хочу начать разбор файла.
Отсчитывать байты равными долями или же как? То есть для каждого поля структуры- сигнатуры, как опридилить что чему соотвецтвует? Код:
|
30.06.2014, 18:18 | #2 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,792
|
Цитата:
РЕ формат читает загрузчик операционки, и как правило он опирается на смещения. Т.е. (очень грубо скажу) например 4 первых байта - указатель на сколько сместиться в глубину файла, чтоб стать на первый байт секции данных. Следующие 4 - смещение на секцию, где находится скомпилированный код. Почитай про формат РЕ, как он устроен, и какие данные заголовок исполнимого файла хранит. Можешь, если хочешь, взять мою статью про компиляторы, я в первых главах слегка разбирал этот заголовок.
I'm learning to live...
|
|
30.06.2014, 18:21 | #3 |
Форумчанин
Регистрация: 22.04.2013
Сообщений: 592
|
А как для начала найти статью?
|
30.06.2014, 18:26 | #4 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,792
|
В блоге нашего клуба: http://www.programmersclub.ru/%D0%9A...D%D0%B8%D1%8F/
Там же в конце чтиво.
I'm learning to live...
|
30.06.2014, 18:30 | #5 | |
Форумчанин
Регистрация: 22.04.2013
Сообщений: 592
|
Спасибо!!!
Я так и не понял насчет поля e_lfanew. Это по ходу самое важное поле этой сигнатуры, _IMAGE_DOS_HEADER, а я не понял. Вот я всю статью читаю в нотепаде, я озаглавил .asm ак много красивее подсветка. Возьмем также типовой файл .exe. во всяком случае нормальный файл и без наворотов, я его прилагаю. И вот его разбор. Я размечаю поля структуры (сигнатуры или как ее) прямо в нотепаде. Цитата:
Код:
PE-заголовок Формат PE-заголовка представлен структурой Последний раз редактировалось Stilet; 01.07.2014 в 23:24. |
|
01.07.2014, 17:45 | #6 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,792
|
Цитата:
Это поле в первом заголовке. Заголовке старого DOS, который еще оставлен. Х.з. для чего. Так вот это поле - указатель на сколько байт сместиться от начала файла (от его первого байтика) чтоб наткнуться на байты, описывающие PE заголовок - новый тип заголовкой применяемых в Винде. Вот винда именно со второго заголовка читает описание файла, и как его загружать. А первый DOS-заголовок ей нужен только чтоб попасть во второй (ну и для совместимости еще)
I'm learning to live...
|
|
01.07.2014, 18:22 | #7 |
Форумчанин
Регистрация: 22.04.2013
Сообщений: 592
|
указатель на сколько байт сместиться от начала файла (от его первого байтика) чтоб наткнуться на байты, описывающие PE заголовок - новый тип заголовкой применяемых в Винде.
Конечно. Это поле указатель на PE заголовок. Я только найти его не могу! Я же понимаю что оно должно быть не ноль. Однако если PE файл разбирать равномерно от начала разбивая его, по 2 байта и заполняя поля структуры _IMAGE_DOS_HEADER то сначала все так, а вот в конце чего то не то, ерунда выходит. во всяком случае все врод так кроме этого самого поля e_lfanew! То есть, пока поставим вопрос так Я разбираю файл PE ,,руками,, В каких случаях, запролняя поля структур- можно разбирать его последовательно, по два байта ( ну смотря если поле структуры DWORD то видимо четыре и т.п.) А в каких нельзя? Последний раз редактировалось Stilet; 01.07.2014 в 19:13. |
01.07.2014, 20:30 | #8 | |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
Цитата:
и научитесь считать, все там должно быть. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
|
01.07.2014, 20:40 | #9 | ||
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,792
|
Цитата:
Цитата:
Во всех остальных случаях РЕ заголовок разбирается одинаково. Смотри:Безымянный.jpg Заголовок начинается буквами "РЕ". Указатель на него я выделил.
I'm learning to live...
|
||
01.07.2014, 22:42 | #10 |
Форумчанин
Регистрация: 22.04.2013
Сообщений: 592
|
Спасибо!!! !! Да.. Да, я видел в общем 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 |