Сейчас на форуме: -Sanchez- (+7 невидимых)

 eXeL@B —› Основной форум —› Загруженная программа не находит базовый адрес библиотеки kernel32.dll
Посл.ответ Сообщение

Ранг: 329.6 (мудрец), 192thx
Активность: 0.140.01
Статус: Участник

Создано: 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


Ранг: 622.6 (!), 521thx
Активность: 0.330.89
Статус: Участник
_Вечный_Студент_

Создано: 07 октября 2017 09:16 · Поправил: plutos
· Личное сообщение · #2

Попробуй
GetModuleHandle(_T("kernel32")); + <tchar.h>.
или
GetModuleHandleW(L"kernel32");

-----
Give me a HANDLE and I will move the Earth.





Ранг: 337.5 (мудрец), 348thx
Активность: 2.112.42
Статус: Участник

Создано: 07 октября 2017 09:32
· Личное сообщение · #3

Очевидно не корректное имя модуля, иной причины не может быть. Лайкну за чёткое описание задачи.

-----
vx




Ранг: 329.6 (мудрец), 192thx
Активность: 0.140.01
Статус: Участник

Создано: 08 октября 2017 08:29
· Личное сообщение · #4

Я нашел причину появления ошибки. Как оказалось, в директории TLS я указал небольшой размер блока данных - 3Ch (обычно этого размера вполне достаточно). Однако, учитывая большой размер файла (77 MB) этого размера оказалось недостаточно, что и вызывало вышеуказанную ошибку. Когда я увеличил размер блока данных в директории TLS до 900h, то все прекрасно заработало. Возможно, что эта информация окажется полезной для тех, кто занимается распаковкой программ.

| Сообщение посчитали полезным: Gideon Vi, mak, dosprog, VodoleY, plutos
 eXeL@B —› Основной форум —› Загруженная программа не находит базовый адрес библиотеки kernel32.dll
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати