CULHook::CULHook(LPSTR pszModName, LPSTR pszFuncName, PROC pfnHook)
{
// jmp eax == 0xFF, 0xE0
// 生成新的执行代码
BYTE btNewBytes[8] = { 0xB8, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xE0, 0x00 };
memcpy(m_btNewBytes, btNewBytes, 8);
*(DWORD *)(m_btNewBytes + 1) = (DWORD)pfnHook; m_hModule = ::LoadLibrary(pszModName);
if(m_hModule == NULL)
{
m_pfnOrig = NULL;
return;
}
m_pfnOrig = ::GetProcAddress(m_hModule, pszFuncName); if(m_pfnOrig != NULL)
{
DWORD dwOldProtect;
MEMORY_BASIC_INFORMATION mbi;
::VirtualQuery( m_pfnOrig, &mbi, sizeof(mbi) );
::VirtualProtect(m_pfnOrig, 8, PAGE_READWRITE, &dwOldProtect); memcpy(m_btOldBytes, m_pfnOrig, 8);
::WriteProcessMemory(::GetCurrentProcess(), (void *)m_pfnOrig,
m_btNewBytes, sizeof(DWORD)*2, NULL);
::VirtualProtect(m_pfnOrig, 8, mbi.Protect, 0);
}
}*(DWORD *)(m_btNewBytes + 1) = (DWORD)pfnHook; 这句话什么意思呢?
是把第2 3 4 5这四个字节换掉还是?
{
// jmp eax == 0xFF, 0xE0
// 生成新的执行代码
BYTE btNewBytes[8] = { 0xB8, 0x00, 0x00, 0x40, 0x00, 0xFF, 0xE0, 0x00 };
memcpy(m_btNewBytes, btNewBytes, 8);
*(DWORD *)(m_btNewBytes + 1) = (DWORD)pfnHook; m_hModule = ::LoadLibrary(pszModName);
if(m_hModule == NULL)
{
m_pfnOrig = NULL;
return;
}
m_pfnOrig = ::GetProcAddress(m_hModule, pszFuncName); if(m_pfnOrig != NULL)
{
DWORD dwOldProtect;
MEMORY_BASIC_INFORMATION mbi;
::VirtualQuery( m_pfnOrig, &mbi, sizeof(mbi) );
::VirtualProtect(m_pfnOrig, 8, PAGE_READWRITE, &dwOldProtect); memcpy(m_btOldBytes, m_pfnOrig, 8);
::WriteProcessMemory(::GetCurrentProcess(), (void *)m_pfnOrig,
m_btNewBytes, sizeof(DWORD)*2, NULL);
::VirtualProtect(m_pfnOrig, 8, mbi.Protect, 0);
}
}*(DWORD *)(m_btNewBytes + 1) = (DWORD)pfnHook; 这句话什么意思呢?
是把第2 3 4 5这四个字节换掉还是?
解决方案 »
- 查找对话框的通知消息问题
- 子对话框按钮事件没反映
- DialogBox不能自动刷新背景,怎么回事?
- 求activeX插件实现网络实名、CNNIC通用网址等插件原理,以及通过网页超级链接调用该插件方法,提供资料者有分
- OpenGL实现实时图像数据采集问题???急急急急!!!
- 求救:关于xp,2000,98,DDB,打印的问题
- 请问各位大哥,MPI能与VC数据库连接吗?谢谢啦!(高分求助)
- bitmap和icon有什么区别?
- 关于目录遍历的问题??救急
- 100分!关于CRecordSet::Update()在RELEASE下自动退出程序的问题
- SkinMagic 和 WindowBlinds 皮肤格式转换
- vc2005编写的带有浮点操作的程序用exe压缩软件压缩后运行出现floating point not loaded错误
0xB8 对应机器码是mov eax
0xFF, 0xE0, 是jmp eax
mov eax,newFn
jmp eax