D3D9黑屏优化大幅降低CPU占用率代码
2015-02-03 16:35
435 查看
#define BaseBlackScreenMainHook //BaseBlackScreenMainThreadHook
#define BaseBlackScreenD3D9Hook
//主线程HOOK 黑屏优化
00528EDF 8BC0 MOV EAX,EAX
00528EE1 90 NOP
00528ECA 74**E8********8B86940100008B088B91A8000000
//+15 ?00528EDF-00528ECA
//HOOK Data[3]={0x8B,0xC0,0x90}//{0x90,0x90,0x90};
//022 00528ECA 74**E8********8B86940100008B088B91A8000000
// 00528ECA 74**E8********8B86940100008B088B91A8000000
//+15 ?00528EDF-00528ECA
//HOOK Data[3]={0x8B,0xC0,0x90}//MOV EAX,EAX;NOP//{0x90,0x90,0x90};
//主线程HOOK 黑屏优化
strcpy_s(szpFeatureCode,"74**E8********8B86940100008B088B91A8000000");
//定位特征码
ndCurAddr=ScanFeatureCode(hProcess,szpFeatureCode,0x0527000,0x0527000+0x10000);
//读取基址1
ndBase=ndCurAddr+0x15;
// printf("ndCurAddr=%X\n",ndCurAddr);
printf("#define BaseBlackScreenMainHook 0x%X//022 主线程黑屏优化基址0x%X \n",ndBase,ndBase);
fprintf(pfile,"#define BaseBlackScreenMainHook 0x%X//022 主线程黑屏优化基址 0x%X\n",ndBase,ndBase);
d3d9.5F32279F=GetModuleHandle("d3d9.dll")+0x2279F;
5F322797 C2 0400 RETN 0x4
HOOK Data[3]={0xc2,0x04,0x00};HINSTANCE LoadLibrary(
LPCTSTR lpLibFileName // address of filename of executable module
);
HMODULE GetModuleHandle(
LPCTSTR lpModuleName // address of module name to return handle
// for
);//返回值就是模块基址
d3d9.5F32279F=GetModuleHandle("d3d9.dll")+偏移;
d3d9.5F32279F=GetModuleHandle("d3d9.dll")+d3d9.5F32279F-d3d9.5F300000
d3d9.5F32279F=GetModuleHandle("d3d9.dll")+0x2279F;
5F322796 5D POP EBP
5F322797 C2 0400 RETN 0x4
5F32279A 90 NOP
5F32279B 90 NOP
5F32279C 90 NOP
5F32279D 90 NOP
5F32279E 90 NOP
5F32279F 8BFF MOV EDI,EDI
5F3227A1 55 PUSH EBP ; 5F322860 C2 0400 RETN 0x4
5F3227A2 8BEC MOV EBP,ESP
5F3227A4 6A FF PUSH -0x1
5F3227A6 68 FCAD495F PUSH d3d9.5F49ADFC
5F3227AB 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
5F3227B1 50 PUSH EAX
5F3227B2 83EC 14 SUB ESP,0x14
5F3227B5 53 PUSH EBX
5F3227B6 56 PUSH ESI
5F3227B7 57 PUSH EDI
5F3227B8 A1 50924A5F MOV EAX,DWORD PTR DS:[0x5F4A9250]
5F3227BD 33C5 XOR EAX,EBP
5F3227BF 50 PUSH EAX
5F3227C0 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-0xC]
5F3227C3 64:A3 00000000 MOV DWORD PTR FS:[0],EAX
5F3227C9 8965 F0 MOV DWORD PTR SS:[EBP-0x10],ESP
5F3227CC 8B75 08 MOV ESI,DWORD PTR SS:[EBP+0x8]
5F3227CF 33DB XOR EBX,EBX
5F3227D1 3BF3 CMP ESI,EBX
//主线程HOOK 黑屏优化
00528EDF 8BC0 MOV EAX,EAX
00528EE1 90 NOP
00528ECA 74**E8********8B86940100008B088B91A8000000
//+15 ?00528EDF-00528ECA
00528EB7 |. 8B91 E4000000 |MOV EDX,DWORD PTR DS:[ECX+0xE4]
00528EBD |. 6A 01 |PUSH 0x1
00528EBF |. 6A 0E |PUSH 0xE
00528EC1 |. 50 |PUSH EAX
00528EC2 |. FFD2 |CALL EDX
00528EC4 |> 391D 30E3F500 |CMP DWORD PTR DS:[0xF5E330],EBX
00528ECA |. 74 05 |JE SHORT Client.00528ED1
00528ECC |. E8 9F380000 |CALL Client.0052C770
00528ED1 |> 8B86 94010000 |MOV EAX,DWORD PTR DS:[ESI+0x194]
00528ED7 |. 8B08 |MOV ECX,DWORD PTR DS:[EAX]
00528ED9 |. 8B91 A8000000 |MOV EDX,DWORD PTR DS:[ECX+0xA8] ; d3d9.6C24279F
00528EDF 50 PUSH EAX
00528EE0 FFD2 CALL EDX ; 真正的黑屏优化
00528EE2 |. 8BCE |MOV ECX,ESI
00528EE4 |. 891D C0F9F500 |MOV DWORD PTR DS:[0xF5F9C0],EBX
00528EEA E8 71E5FFFF CALL Client.00527460 ; 伪黑屏CALL
00528EEF |. 3D 68087688 |CMP EAX,0x88760868
00528EF4 |. 74 0E |JE SHORT Client.00528F04
00528EF6 |. 3D 27087688 |CMP EAX,0x88760827
00528EFB |. 74 07 |JE SHORT Client.00528F04
00528EFD |. 3D 6C087688 |CMP EAX,0x8876086C
00528F02 |. 75 1D |JNZ SHORT Client.00528F21
00528F04 |> 50 |PUSH EAX
00528F05 |. 68 0016A000 |PUSH Client.00A01600 ; ASCII "Device Lost : Present() returned %d"
00528F0A |. E8 41C6F9FF |CALL Client.004C5550
00528F0F |. 83C4 08 |ADD ESP,0x8
00528F12 |. C686 AE000000>|MOV BYTE PTR DS:[ESI+0xAE],0x1
00528F19 |> 6A 64 |PUSH 0x64 ; /Timeout = 100. ms
00528F1B |. FF15 CCD19E00 |CALL DWORD PTR DS:[<&KERNEL32.Sleep>] ; \Sleep
00528F21 |> 83BD D0D6FFFF>|CMP DWORD PTR SS:[EBP-0x2930],0x12
#define BaseBlackScreenD3D9Hook
//主线程HOOK 黑屏优化
00528EDF 8BC0 MOV EAX,EAX
00528EE1 90 NOP
00528ECA 74**E8********8B86940100008B088B91A8000000
//+15 ?00528EDF-00528ECA
//HOOK Data[3]={0x8B,0xC0,0x90}//{0x90,0x90,0x90};
//022 00528ECA 74**E8********8B86940100008B088B91A8000000
// 00528ECA 74**E8********8B86940100008B088B91A8000000
//+15 ?00528EDF-00528ECA
//HOOK Data[3]={0x8B,0xC0,0x90}//MOV EAX,EAX;NOP//{0x90,0x90,0x90};
//主线程HOOK 黑屏优化
strcpy_s(szpFeatureCode,"74**E8********8B86940100008B088B91A8000000");
//定位特征码
ndCurAddr=ScanFeatureCode(hProcess,szpFeatureCode,0x0527000,0x0527000+0x10000);
//读取基址1
ndBase=ndCurAddr+0x15;
// printf("ndCurAddr=%X\n",ndCurAddr);
printf("#define BaseBlackScreenMainHook 0x%X//022 主线程黑屏优化基址0x%X \n",ndBase,ndBase);
fprintf(pfile,"#define BaseBlackScreenMainHook 0x%X//022 主线程黑屏优化基址 0x%X\n",ndBase,ndBase);
d3d9.5F32279F=GetModuleHandle("d3d9.dll")+0x2279F;
5F322797 C2 0400 RETN 0x4
HOOK Data[3]={0xc2,0x04,0x00};HINSTANCE LoadLibrary(
LPCTSTR lpLibFileName // address of filename of executable module
);
HMODULE GetModuleHandle(
LPCTSTR lpModuleName // address of module name to return handle
// for
);//返回值就是模块基址
d3d9.5F32279F=GetModuleHandle("d3d9.dll")+偏移;
d3d9.5F32279F=GetModuleHandle("d3d9.dll")+d3d9.5F32279F-d3d9.5F300000
d3d9.5F32279F=GetModuleHandle("d3d9.dll")+0x2279F;
5F322796 5D POP EBP
5F322797 C2 0400 RETN 0x4
5F32279A 90 NOP
5F32279B 90 NOP
5F32279C 90 NOP
5F32279D 90 NOP
5F32279E 90 NOP
5F32279F 8BFF MOV EDI,EDI
5F3227A1 55 PUSH EBP ; 5F322860 C2 0400 RETN 0x4
5F3227A2 8BEC MOV EBP,ESP
5F3227A4 6A FF PUSH -0x1
5F3227A6 68 FCAD495F PUSH d3d9.5F49ADFC
5F3227AB 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
5F3227B1 50 PUSH EAX
5F3227B2 83EC 14 SUB ESP,0x14
5F3227B5 53 PUSH EBX
5F3227B6 56 PUSH ESI
5F3227B7 57 PUSH EDI
5F3227B8 A1 50924A5F MOV EAX,DWORD PTR DS:[0x5F4A9250]
5F3227BD 33C5 XOR EAX,EBP
5F3227BF 50 PUSH EAX
5F3227C0 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-0xC]
5F3227C3 64:A3 00000000 MOV DWORD PTR FS:[0],EAX
5F3227C9 8965 F0 MOV DWORD PTR SS:[EBP-0x10],ESP
5F3227CC 8B75 08 MOV ESI,DWORD PTR SS:[EBP+0x8]
5F3227CF 33DB XOR EBX,EBX
5F3227D1 3BF3 CMP ESI,EBX
//主线程HOOK 黑屏优化
00528EDF 8BC0 MOV EAX,EAX
00528EE1 90 NOP
00528ECA 74**E8********8B86940100008B088B91A8000000
//+15 ?00528EDF-00528ECA
00528EB7 |. 8B91 E4000000 |MOV EDX,DWORD PTR DS:[ECX+0xE4]
00528EBD |. 6A 01 |PUSH 0x1
00528EBF |. 6A 0E |PUSH 0xE
00528EC1 |. 50 |PUSH EAX
00528EC2 |. FFD2 |CALL EDX
00528EC4 |> 391D 30E3F500 |CMP DWORD PTR DS:[0xF5E330],EBX
00528ECA |. 74 05 |JE SHORT Client.00528ED1
00528ECC |. E8 9F380000 |CALL Client.0052C770
00528ED1 |> 8B86 94010000 |MOV EAX,DWORD PTR DS:[ESI+0x194]
00528ED7 |. 8B08 |MOV ECX,DWORD PTR DS:[EAX]
00528ED9 |. 8B91 A8000000 |MOV EDX,DWORD PTR DS:[ECX+0xA8] ; d3d9.6C24279F
00528EDF 50 PUSH EAX
00528EE0 FFD2 CALL EDX ; 真正的黑屏优化
00528EE2 |. 8BCE |MOV ECX,ESI
00528EE4 |. 891D C0F9F500 |MOV DWORD PTR DS:[0xF5F9C0],EBX
00528EEA E8 71E5FFFF CALL Client.00527460 ; 伪黑屏CALL
00528EEF |. 3D 68087688 |CMP EAX,0x88760868
00528EF4 |. 74 0E |JE SHORT Client.00528F04
00528EF6 |. 3D 27087688 |CMP EAX,0x88760827
00528EFB |. 74 07 |JE SHORT Client.00528F04
00528EFD |. 3D 6C087688 |CMP EAX,0x8876086C
00528F02 |. 75 1D |JNZ SHORT Client.00528F21
00528F04 |> 50 |PUSH EAX
00528F05 |. 68 0016A000 |PUSH Client.00A01600 ; ASCII "Device Lost : Present() returned %d"
00528F0A |. E8 41C6F9FF |CALL Client.004C5550
00528F0F |. 83C4 08 |ADD ESP,0x8
00528F12 |. C686 AE000000>|MOV BYTE PTR DS:[ESI+0xAE],0x1
00528F19 |> 6A 64 |PUSH 0x64 ; /Timeout = 100. ms
00528F1B |. FF15 CCD19E00 |CALL DWORD PTR DS:[<&KERNEL32.Sleep>] ; \Sleep
00528F21 |> 83BD D0D6FFFF>|CMP DWORD PTR SS:[EBP-0x2930],0x12
相关文章推荐
- CPU与代码优化(1):用三元操作符替代if-else以降低CPU分支预测惩罚;函数13倍提速(Unity)。
- [编程技巧] 巧用CPU缓存优化代码:数组 vs. 链表
- [编程技巧] 巧用CPU缓存优化代码:数组 vs. 链表
- AGISPEEDY发布1.1大幅降低CPU负载率
- OpenCv训练降低CPU占用率
- liunx下cpu占用率高如何定位代码问题
- 请朋友帮忙优化一下下面的代码,降低其时间复杂度。。。
- cpu的占用率通过直线表现的代码
- papervision3d大场景时 如何降低cpu占用率
- C#程序优化-有效减少CPU占用率
- 巧用CPU缓存优化代码:数组 vs. 链表(转)
- Flex 性能优化之cpu占用率
- Linux系统中使用GCC 对CPU参数优化代码编译
- 游戏编程入门学习笔记19——网络篇——利用虚拟机测试、降低CPU占用率
- [编程技巧] 巧用CPU缓存优化代码:数组 vs. 链表
- 使用Java代码控制CPU占用率
- 使用Java代码控制CPU占用率
- 实战开发经验: 如何降低CPU占用率
- 降低 CPU 占用率的方法
- Linux服务器定位CPU高占用率代码位置经历