Здравствуйте.
Изучаю Manual Map Injecting, использую код от
В своем проекте есть необходимость делать deattach, FreeLibraryAndExitThread не подходит т.к. нет самого модуля.
пробовал этот метод
но он не работает (проверял через + видно, что не освобождается память в процессе)
так же пробовал метод
но он крашит процесс.
ImageBase - адрес, куда мапится длл, SizeOfImage - размер dll
В чем может быть проблема?
Изучаю Manual Map Injecting, использую код от
В своем проекте есть необходимость делать deattach, FreeLibraryAndExitThread не подходит т.к. нет самого модуля.
пробовал этот метод
C++:
DECLSPEC_NORETURN void WINAPI ManualFreeLibraryAndExitThread(LPVOID imageBase, SIZE_T imageSize) {
printf("Call erase... \n");
void* exitThread = GetProcAddress(GetModuleHandle("Kernel32.dll"), "ExitThread");
void* virtualFree = GetProcAddress(GetModuleHandle("Kernel32.dll"), "VirtualFree");
__asm
{
mov esi, imageSize
mov edi, imageBase
push 0
push exitThread
push edi
push esi
push MEM_RELEASE
push exitThread
mov esi, virtualFree
jmp esi
}
}
так же пробовал метод
C++:
__declspec(noreturn) void ExitDll(void* ImageBase, SIZE_T SizeOfImage)
{
auto* pmemset = memset;
auto* pVirtualFree = VirtualFree;
auto* pExitThread = ExitThread;
pmemset(ImageBase, 0, SizeOfImage);
pVirtualFree(ImageBase, 0, MEM_RELEASE);
pExitThread(0);
}
auto* pExitDll = reinterpret_cast<decltype(ExitDll)*>(VirtualAlloc(nullptr, 0x100, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE));
memcpy(pExitDll, ExitDll, 0x100);
pExitDll(imageBase, imageSize);
но он крашит процесс.
ImageBase - адрес, куда мапится длл, SizeOfImage - размер dll
В чем может быть проблема?