![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| 12usver12 |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
Не могу понять почему нормально не вызывается экспортируемая функция из екзешника
такой конструкцией
в чем может быть причина ? подозреваю что-то связанное с импортом Это сообщение отредактировал(а) 12usver12 - 8.4.2010, 23:08 |
||||
|
|||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
да, подозреваю так же либо надо убрать __stdcall, либо указать __stdcall в ExtMess конечно, соглашение о вызове можно выставить и в настройках проекта (по умолчанию это __cdecl), но если это не сделано, то это наиболее очевидная ошибка -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
основная проблема как оказалось, посмотрев под отладчиком, в том что при LoadLibrary или loadLibraryExA не обрабатываются релоки и слетает на вызове эксп функции так как таблица импорта не обработалась у подгружаемого екзе
погуглив хорошенько, наткнулся на подобную тему... оказывается, что загрузчик обрабатывает релоки только если это длл файл а у екзешника отказывается производить стандартные действия которые выполняются при loadlibrary длл |
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
релоки, в смысле Base Relocations?
LoadLibrary просто не может их не обрабатывать, если грузит образ именно для исполнения -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
если у файла не стоит IMAGE_FILE_DLL в File Header то они почему то не обрабатываются, в этом вся и загвоздка...
когда выполняется уже в моем процессе
|
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Смотрим MSDN на LoadLibraryEx:
И вообще, попытка что то исполнить из exe, загруженного куда то, выглядит очень и очень подозрительно ненадежно. Встроенной функциональности LoadLibrary для обеспечения этого явно недостаточно |
||||
|
|||||
| 12usver12 |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 247 Регистрация: 5.1.2007 Репутация: 1 Всего: 1 |
мне кажется что функциональности LoadLibrary с головой предостаточно , ну просто не хочет с екзешником заморачиваться и все... Когда-то игрался с кодом который является аналогом лоадлабрари, ручная обработка импортов релоков атрибутов секци и т.д. грузились как длл так и екзе..., ведь отличий по сути очень мало
пробовал вручную трасировать LoadLibraryEwW -> LdrLoadDll на предмет проверки PE dll/exe, но к сожаленью асм не могу читать как открытую книгу |
|||
|
||||
| xvr |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 40 Всего: 223 |
Посмотрел в сорцы загрузчика - он явно проверяет на тип загружаемого имаджа (dll/не dll), и если грузится не dll то обработка секций импорта и релокаций явно блокируется. Загрузчик находится в ядре и в user space (в ntdll.dll функции Ldr*) |
||||
|
|||||
| ИванМ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1260 Регистрация: 19.6.2006 Где: СПб Репутация: нет Всего: 23 |
У exe слово по смещению 12h от начала COFF File Header'а обычно 010Fh / 0107h, у dll 2xxxh. Можно попробовать его изменить на нужное и потом уже работать с ним.
|
|||
|
||||
![]()
|
| Правила форума "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. |