OSDev

для всех
Текущее время: 09 май 2024, 13:27

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Запуск PE программы
СообщениеДобавлено: 21 ноя 2010, 17:31 

Зарегистрирован: 21 ноя 2010, 17:28
Сообщения: 7
Здравствуйте, друзья!
У меня вопрос, как заполнить таблицу импорта PE программы при её загрузке адресами "заглушек"?
Ситуация такая:
1. я загрузился с диска
2. я загрузил PE программу в память
3. перевёл проц с защищённый режим
4. переташил прогу по адресу 100000h
5. Запускаю её - ноль результата)

Покапался в проге дебаггером, и увидел что она сразу после запуска обращается к kernel32.dll и так как таблица импорта не заполнена она передаёт управление в никуда... Вот такие дела)

Код который я использую - изменённый код от сюда: brokenthorn.com/Resources/OSDevMSVC.html - тут используется загрузка с дискетки и запуск PE проги которая скомпилена таким образом, что не использует внешних импортируемых функций а сразу передаёт управление на полезный код. Я же хочу запустить прогу скомпиленную в Delphi, которая всегда импортирует функции из kernel32.dll перед тем как передать управление на полезный код.

Оооооооочень надо, третий день бьюсь...

Большое всем спасибо! :)

p.s.: прога на делфи ничего не делает пока, просто: begin [вставка на ассемблере для проверки] end.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запуск PE программы
СообщениеДобавлено: 22 ноя 2010, 12:09 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Либо самому клепать заглушки по заранее известным именам (естественно, анализируя загружаемый PE-файл на наличие ссылок к этим именам), либо делать собственный модуль System для Дельфей и при этом молиться, чтобы сам компилятор никакой хрени не вставлял, оставляя все обращения к функциями АПИ системы на совести модулей. Второй путь лучше -- конечно, при условии, что все ссылки на кернел32.длл возникают только из-за модуля System.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Запуск PE программы
СообщениеДобавлено: 29 ноя 2010, 04:08 

Зарегистрирован: 30 янв 2010, 19:44
Сообщения: 63
думаю тут просто недопонимание всех механизмов есть...
при запуске программы нужно выполнить некоторые действия которые позволят запускаемой программе работать. Что-то на вроде: инициализировать переменные, получить ссылки на объекты, выделить память под структуры и прочие логичные вещи. Для простоты понимания можно взять такой пример. При окончании работы программы она должна вызвать некий механизм который разрушит неиспользуемые структуры, освободит память и т.п. Но ведь и при запуске нужно выполнить первоначальные настройки для работы программы. Эти вещи стандартные для большинства программ. Любой компилятор вставляет вызовы процедур инициализации вначале выполнения главного блока и процедуры при завершении программы в конце. Для виндовса вызовы в kernel32..
Если ты хочешь не использовать эти включения, то тебе нужно изменить точку входа. Т.е. первые байты кода должны делать call или jmp на главный блок (на С это _main). Но тут нужно понимать, что использование стандартных вещей для дельфей будет невозможно, пока ты не сделаешь их реализацию. Например тебе нужно в первую очередь написать функции выделения памяти. А все остальные функции покатятся как снежный ком.
Как вариант могу предложить делать так: компилируется PE, потом этот PE переделывается в какой-нить объектный формат и уже после этого собирается новый PE в котором точка входа заменена твоей.
Но лучше всего учить C. (хотя нужно попробовать может ли GCC компилировать паскать в объекты)


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 102


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB