游戏中的控制流操作与Direct3D钩子技术
1. Adobe AIR模块钩子实现
在游戏开发与调试过程中,有时需要对特定模块的代码进行钩子操作,以监控或修改其行为。这里以Adobe AIR.dll模块为例,介绍如何实现钩子。
1.1 两部分近调用钩子设计
设计了一个两部分的近调用钩子。第一部分是reportDecode()函数,用于记录每个通过的数据包:
void __stdcall reportDecode(const unsigned char* buffer, unsigned int size) { printBuffer(buffer, size); }由于当时没有循环索引,所以决定记录每个部分数据包。
第二部分是myDecode()函数,作为新的被调用者执行具体工作:
void __declspec(naked) myDecode() { __asm { MOV EAX, DWORD PTR SS:[ESP + 0x4] // get buffer MOV EDX, DWORD PTR SS:[ESP + 0x8] // get size PUSH EDX // push size PUSH EAX // push buf