![]() |
Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply |
![]() ![]() ![]() |
|
Joker07 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 17.6.2006 Репутация: нет Всего: нет |
Пишу программу, просматривающую PE заголовок, не использую структуры, описанные в windows.pas. Так уж вышло что начал описывать их сам, в отдельном модуле, незнал, что оно уже все давно расписано в оном файлике.
Так вот, DOS, PE, Optional PE, Data Directories, Sessions я считываю и вывожу. Хочу также вывести таблички импорта/экспорта (как минимум) и ресурсы. Вот с этим у меня проблема. Для начала: 1. Как преобразовать значение Time_Date_Stamp в удобоваримый вид, типа Mon Mar 06 04:10:48 MSK 2006 ? 2. Как получить список всех экспортируемых функций - имя, адрес, ординал? Пишу так:
|
|||
|
||||
RA |
|
|||
![]() Брутальный буратина ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3497 Регистрация: 31.3.2002 Где: Лес Репутация: 7 Всего: 115 |
http://forum.vingrad.ru/index.php?showtopi...t&p=1227483 на всякий случай
|
|||
|
||||
Joker07 |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 17.6.2006 Репутация: нет Всего: нет |
Как преобразовать значение Time_Date_Stamp в удобоваримый вид, типа Mon Mar 06 04:10:48 MSK 2006 ?
|
|||
|
||||
Joker07 |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 40 Регистрация: 17.6.2006 Репутация: нет Всего: нет |
Не пойму как отобразить список импортируемых функций. Единственно стоящий материал нашел по адресу http://www.wasm.ru/article.php?article=1002006 Только вот примеры там на асме, а в нем я нуль.
Там пишут: Пpедставьте, что мы хотим создать список ВСЕХ импоpтиpуемых функций PE-файла. Для этого нам потpебуетя сделать следующие шаги. * Убедиться, что файл является Portable Executable * От DOS-заголовка пеpейти к PE-заголовку * Получить адpес диpектоpии данных в OptionalHeader * Пеpейти ко втоpому элементу диpектоpии данных. Извлечь значение VirtualAddress * Использовать это значение, чтобы пеpейти к пеpвой стpуктуpе IMAGE_IMPORT_DESCRIPTOR * Пpовеpьте значение OriginalFirstThunk. Если оно не pавно нулю, следуйте RVA в OriginalFirstThunk, чтобы пеpейти к RVA-массиву. Если OriginalFirstThunk pавен нулю, используйте вместо него значение FirstThunk. Hекотоpые линкеpы генеpиpуют PE-файлы с 0 в OriginalFirstThunk. Это считается багом. Только для того, чтобы подстpаховаться, мы сначала пpовеpяем значение OriginalFirstThunk. * Мы сpавниваем значение каждого элемента массива с IMAGE_ORDINAL_FLAG32. Если MSB pавен единице, значит функция экспоpтиpуется чеpез оpдинал и мы можем получить его из нижнего слова элемента. * Если MSB pавен нулю, используйте значение элемента как RVA на IMAGE_IMPORT_BY_NAME, пpопустите Hint, и вы у имени функции. * Пеpейдите к следующему элементу массива и извлекайте имена пока не будет достигнут конец массива (он кончается null'ом). Сейчас мы получили имена функций, импоpтиpованных из данной DLL. Пеpеходим к следующей DLL. * Пеpейдите к следующему IMAGE_IMPORT_DESCRIPTOR'у и обpаботайте его. Делайте это, пока не обpаботаете весь массив (массив IMAGE_IMPORT_DESCRIPTOR кончается элементом с полями, заполненными нулями). Используемые там структуры:
С седьмого пункта я уже ни черта не понимаю. После получения полей структуры IMAGE_IMPORT_DESCRIPTOR (у меня это Import_Table) пишу так:
Помогите пж-та ![]() |
||||
|
|||||
Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Для начала, я бы выбросила к чертовой бабушке все BlockRead, seek и иже с ними, а использовала бы MMF. Насчет остального... Для подгядывания, как с этим боролись другие ![]() рискну дать юнит (с) Игоря Шевченко аж от 2003 г. Надеюсь, он не будет возражать, что выкладываются столь давнишние его работы ![]() (Если понадобятся "зависимые" юниты - они есть. Но в них все стандартно. Вся работа с указателями и смещениями в этом юните)
|
|||
|
||||
CodeMonkey |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1839 Регистрация: 24.6.2008 Где: Россия, Тверь Репутация: 16 Всего: 89 |
...я бы отправил к JclPeImage.pas из JCL...
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. |
|||
|
||||
Riply |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Комодератор Сообщений: 572 Регистрация: 27.3.2007 Где: St. Petersburg Репутация: 21 Всего: 32 |
Т.е. что надо куда-то послать - мнения совпали ![]() А место назначения играет не очень важную роль: принцип разбора же один и тот же. Может Jcl вариант и получше (не смотрела), а данный код даже когда-то использовала, работает ![]() |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 21 Всего: 88 |
-------------------- Обижено школьников: 8 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: WinAPI и системное программирование" | |
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |