![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| roko |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 2.3.2008 Репутация: нет Всего: нет |
Как получить файловое смещение таблицы экспорта? Я думал что для этого надо: а) в нулевом элементе массива DataDirectory узнать RVA экспорта, б) посмотреть где в таблице секций находится полученный в предыдущем пункте RVA, в) PointerToRawData, соответствующий найденному RVA, и будет файловым смещением.
Дело в том, что в одной dll-ке, в таблице секций, не нашлось ни одного элемента VirtualAddress, который был бы равен элементу VirtualAddress нулевого элемента массива DataDirectory. Можета это я неправильно что то делаю или это dll-ка такая? |
|||
|
||||
| W4FhLF |
|
|||
![]() found myself ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2831 Регистрация: 2.12.2006 Репутация: 12 Всего: 121 |
б) перевести RVA во внутрифайловый Offset.
-------------------- "Бог умер" © Ницше "Ницше умер" © Бог |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
в принципе, табличные смещения не обязательно должны совпадать с началом секции,
просто ищи секцию, виртуальный регион которой покрывает смещение в таблице, а исходя из относительного виртуального смещения (относительно начала найденной секции), прибавляя к нему PointerToRawData и найдешь файловое смещение можно еще поискать конкретно секцию .edata -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| roko |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 2.3.2008 Репутация: нет Всего: нет |
GremlinProg, думаю ты имел в виду это: 1. Найти Export_RVA = IMAGE_DATA_DIRECTORY[IMAGE_DIRECTORY_ENTRY_EXPORT]
2. В списке секций найти секцию s, содержащую Export_RVA (т.е. s.VirtualAddress <= Export_RVA < s.VirtualAddress+s.VirtualSize) 3. Найти смещение в файле: Export_Offset = (Export_RVA-s.VirtualAddress)+s.PointerToRawData; Это на форуме wasm.ru нашлось(автор reverser). Всем спасибо вопрос решен. |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
да, roko, верно,
можно еще заменить пункт 2 на API: ImageRvaToSection -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| roko |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 2.3.2008 Репутация: нет Всего: нет |
Еще раз спасибо, а то уже два дня промучися. Зато ответ нашелся
|
|||
|
||||
| roko |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 46 Регистрация: 2.3.2008 Репутация: нет Всего: нет |
Тема закрыта.
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |