getprocaddress, действующий в отличие от DLL и EXE - PullRequest
0 голосов
/ 29 февраля 2012

Я пытаюсь получить адрес GetProcAddress с помощью GetProcAddress (да, вызывая его сам).Когда я делаю это из пустого exe-проекта, я получаю действительный адрес (между выделенным адресом kernel32).

Когда я вызываю его из dll, я получаю неверный адрес (не вдиапазон выделенного ядра32)

В чем разница?Я работаю на Windows 7 с 64-разрядным.

Проект скомпилирован как 32-разрядный.Вот код, который я запускаю:

typedef FARPROC (WINAPI * GetProcAddressType) (HMODULE, LPCSTR);

HMODULE kernel32Hmodule = LoadLibraryW (L "c: \ windows \ system32 \ kernel32.dll ");

GetProcAddressType abc = (GetProcAddressType) GetProcAddress (kernel32Hmodule," GetProcAddress ");

Я также пытался получить адрес следующим образом: void * a = GetProcAddress;но он возвращает тот же недействительный адрес при запуске из DLL ...

Пожалуйста, помогите.

Ответы [ 2 ]

0 голосов
/ 04 марта 2012

хорошо, я нашел проблему.когда я загружал dll с rundll32, он действовал странно ... когда я сам собирал загрузчик (loadlibrary, чем getprocaddress), он работал нормально.rundll32 - тот, кто вызвал проблемы

0 голосов
/ 03 марта 2012

Exe обычно загружаются по их предпочтительным адресам, DLL часто перемещаются (не загружаются по их предпочтительным адресам), когда они выбирают ASLR и когда необходимо перемещение (например, их предпочтительный адрес уже занят). Это может объяснить разницу между поведением.

...