Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.226.166.214] |
|
Сообщ.
#1
,
|
|
|
есть пример на ассемлере загрузки dll из памяти
часть кода rb = PeHeader->OptionalHeader.AddressOfEntryPoint; __asm { mov eax, rb add eax, retadr // EAX = ENTRY POINT push 0 push DLL_PROCESS_ATTACH // ставим флаг что подгрузили DLL push retadr call eax // передадим управление на точку входа в DLL } Прекрасно работает в 32-битной версии, но 64-битной __asm запрещен. Можно как то извратиться, и минуя ассемблер, так же передать управление в точку входа? СПС |
Сообщ.
#2
,
|
|
|
BOOL WINAPI (*rb)(HINSTANCE, DWORD, LPVOID) = PeHeader->OptionalHeader.AddressOfEntryPoint; rb(retadr, DLL_PROCESS_ATTACH, NULL); |
Сообщ.
#3
,
|
|
|
Я делаю так, но это не под Windows. Может сгодидзе?
typedef void(*pFunction)(void); pFunction JumpToApplication; unsigned int JumpAddress; main() { JumpAddress = *(unsigned int*)(ADDR_FUNCT); // Адрес куда прыгать JumpToApplication = (pFunction)JumpAddress; JumpToApplication(); // Ушли на адрес return 0; } |
Сообщ.
#4
,
|
|
|
Это то же самое. Автор по-видимому пытается вызвать DllMain, я взял её реальный прототип из MSDN. Префикс WINAPI и имена typedef важны для предоставления компилятору соглашений о вызовах, кои у 32- и 64-бит слегка отличаются.
|
Сообщ.
#5
,
|
|
|
Спасибо
|