eXeLab
eXeL@B DVD 2017 !

Видеокурс программиста и крэкера 5D 2O17
(актуальность: октябрь 2O17)
Свежие инструменты, новые видеоуроки!

  • 400+ видеоуроков
  • 800 инструментов
  • 100+ свежих книг и статей

УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

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

Ранг: 327.8 (мудрец)
Статус: Участник

Создано: 7 октября 2017 08:50 New!
· Личное сообщение · #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

plutos


Ранг: 265.8 (наставник)
Статус: Участник

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

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

Ранг: 138.6 (ветеран)
Статус: Участник

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

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

Ранг: 327.8 (мудрец)
Статус: Участник

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

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

| Сообщение посчитали полезным: Gideon Vi, VodoleY, mak, dosprog, plutos

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

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS