- 注册时间
- 2011-3-6
- 最后登录
- 1970-1-1
该用户从未签到
|
//申请内存
PVOID NewVirtualAllocEx(ULONG *ulSize)
{
PVOID pHeapRet = NULL;
DWORD dwSize;
__try{
dwSize = *ulSize;
HANDLE m_hMapFile = CreateFileMapping((HANDLE)0xFFFFFFFF,NULL,PAGE_READWRITE,0,dwSize,NULL);
if (m_hMapFile){
__int64 qwFileOffset = 0;
pHeapRet = (PVOID)MapViewOfFile(m_hMapFile,FILE_MAP_ALL_ACCESS,(DWORD)(qwFileOffset >> 32),(DWORD)(qwFileOffset & 0xFFFFFFFF),dwSize);
CloseHandle(m_hMapFile);
}
}__except(1){
}
return pHeapRet;
}
PVOID __stdcall NewVirtualAlloc(
_In_opt_ LPVOID lpAddress,
_In_ SIZE_T dwSize,
_In_ DWORD flAllocationType,
_In_ DWORD flProtect
)
{
VirtualAlloc_1 OldVirtualAlloc;
ULONG ulPageRet;
//取返回地址,如果是dll,就直接用原始,不然要崩溃(因为这个时候可能是在HOOK) -_-!!
__asm
{
mov eax,dword ptr[ebp+4]
mov ulPageRet,eax
}
//只优化来自游戏客户端的内存申请
if (ulPageRet >= GameBinBase && ulPageRet <= GameBinBase + GameBinSize)
{
return NewVirtualAllocEx(&dwSize);
}
OldVirtualAlloc = (VirtualAlloc_1)VirtualAllocHookZone;
return OldVirtualAlloc(
lpAddress,
dwSize,
flAllocationType,
flProtect
);
}
//HOOK掉,免得游戏关闭的时候,要释放内存导致崩溃,虽然不影响,但是看起来不美观!!!
BOOL __stdcall NewVirtualFree(
_In_opt_ LPVOID lpAddress,
_In_ SIZE_T dwSize,
_In_ DWORD dwFreeType
)
{
return TRUE;
} |
|