Как загрузить DLL в определяемый пользователем адрес памяти или возможно ли изменить адрес DLL после загрузки DLL с помощью функции loadlibrary ().
Я пытался использовать VirtualAllocEx () для выделения адреса памятии загрузить DLL в удаленный процесс.DLL загружается в удаленный процесс, но адрес не тот.
//virtually allocating the memory address
DWORD *arg = (PDWORD)VirtualAllocEx(process, /*(LPVOID)0x81200000*/0, strlen(buffer), MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
if(arg == NULL) {
return 1;
}
//Write the argument to LoadLibraryA to the process's newly allocated memory region.
int n = WriteProcessMemory(process, arg, buffer, strlen(buffer), NULL);
if(n == 0) {
return 1;
}
//Inject our DLL into the process's address space.
HANDLE threadID = CreateRemoteThread(process, NULL, 0, (LPTHREAD_START_ROUTINE)address, arg, NULL, NULL);
Я также пытался использовать функцию rebaseimage (), но адрес памяти менялся после загрузки DLL.
//rebaseimage function to change the base address of the DLL
ret = ReBaseImage("WinMemoryDLL.dll","",TRUE,TRUE,FALSE,0,&OldImage,&OldImageBase,&NewImageSize,&NewImageBase,0);
hinstLib = LoadLibrary(TEXT("WinMemoryDLL.dll"));