Я пытаюсь получить адрес GetProcAddress с GetProcAddress (да, вызывая его сам по себе). Когда я делаю это из пустого проекта exe, я получаю действительный адрес (между выделенным адресом kernel32).getprocaddress, действующая отличная от dll и exe
Когда я звоню его из библиотеки DLL, я получаю неверный адрес (не в пределах выделенного kernel32)
В чем разница? Я работаю на Windows 7 с 64 бит.
Проект составлен как 32 бит. Вот код, который я использую:
typedef FARPROC (WINAPI * GetProcAddressType) (HMODULE, LPCSTR);
Ядро HMODULE32Hmodule = LoadLibraryW (L "c: \ windows \ system32 \ kernel32.dll");
GetProcAddressType abc = (GetProcAddressType) GetProcAddress (kernel32Hmodule, "GetProcAddress");
Я также попытался получить адрес следующим образом: void * a = GetProcAddress; , но он возвращает тот же неверный адрес при работе с dll ...
Пожалуйста, помогите.
Kernel32.dll не перемещается. Смещения ASLR не изменяются до перезагрузки. –
Правильный Ханс, я забыл это, спасибо! Вот почему я написал «мог бы объяснить ...» :-) – mox
ok, я нашел проблему. Когда я загрузил dll с rundll32, он действовал странно ... когда я сам создавал загрузчик (loadlibrary, чем getprocaddress), он работал нормально. rundll32 является причиной проблем –