Сейчас на форуме: -Sanchez- (+7 невидимых) |
eXeL@B —› Основной форум —› Загруженная программа не находит базовый адрес библиотеки kernel32.dll |
Посл.ответ | Сообщение |
|
Создано: 07 октября 2017 08:50 · Личное сообщение · #1 Столкнулся с проблемой! Распаковал одну программу, упакованную PEP. Сделал дамп памяти программы, прикрутил к нему импорт, и получил файл размером в 361 MB. Программа написана на Delphi. В полученном дампе памяти я нашел все секции файла (их оказалось 10 секций), сдампировал с помощью скрипта, прикрутил к этому дампу импорт, и получил размер файла 77 MB. Распаковку делал на WinXP, и оба файла прекрасно проходят подпрограммы инициализации. Но на Win7 столкнулся с такой проблемой. При инициализации одной из подпрограмм нужно найти базовый адрес kernel32.dll. Большой файл (361 MB) его прекрасно находит с помощью функции kernel32.GetModuleHandleW, а вот маленький файл (77 MB) базовый адрес этой библиотеки не находит, в регистр EAX записывает 00000000, а в флаге LastErr пишет ошибку ERROR_MOD_NOT_FOUND (0000007E), хотя библиотека kernel32.dll загружена в память программы. Я не смог разобраться с причиной появления этой ошибки. Может ли кто-нибудь подсказать решение этой проблемы? Заранее благодарен за ответы... | Сообщение посчитали полезным: difexacaw |
|
Создано: 07 октября 2017 09:16 · Поправил: plutos · Личное сообщение · #2 |
|
Создано: 07 октября 2017 09:32 · Личное сообщение · #3 |
|
Создано: 08 октября 2017 08:29 · Личное сообщение · #4 Я нашел причину появления ошибки. Как оказалось, в директории TLS я указал небольшой размер блока данных - 3Ch (обычно этого размера вполне достаточно). Однако, учитывая большой размер файла (77 MB) этого размера оказалось недостаточно, что и вызывало вышеуказанную ошибку. Когда я увеличил размер блока данных в директории TLS до 900h, то все прекрасно заработало. Возможно, что эта информация окажется полезной для тех, кто занимается распаковкой программ. | Сообщение посчитали полезным: Gideon Vi, mak, dosprog, VodoleY, plutos |
eXeL@B —› Основной форум —› Загруженная программа не находит базовый адрес библиотеки kernel32.dll |
Эта тема закрыта. Ответы больше не принимаются. |