看流星社区

 找回密码
 注册账号
查看: 1788|回复: 0

vc内存优化

[复制链接]

该用户从未签到

发表于 2013-4-28 09:02:25 | 显示全部楼层 |阅读模式
//申请内存
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;
}
点击按钮快速添加回复内容: 支持 高兴 激动 给力 加油 苦寻 生气 回帖 路过 感恩
您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

小黑屋|手机版|Archiver|看流星社区 |网站地图

GMT+8, 2024-5-4 04:47

Powered by Kanliuxing X3.4

© 2010-2019 kanliuxing.com

快速回复 返回顶部 返回列表