www.pudn.com > DetourQQ.rar > CodeAtom.h
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // 预处理 #pragma once #include//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // CODEATOM 结构 typedef struct tagCODEATOM { DWORD dwAddress; // 地址 UINT uRangeSize; // 范围大小 UINT uStampSize; // 标识大小,不能大于 255 BYTE bStamp[255]; // 标识数据 BYTE bPatch[255]; // 替换数据 PBYTE pbStart; // 内部使用的数据指针 PBYTE pbEnd; // 内部使用的结束指针 BOOL bPatched; // 内部使用的补丁标志 } CODEATOM, *PCODEATOM; //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // CCodeAtom 类 class CCodeAtom { public: // 执行文件并打补丁 static UINT Execute(PTSTR ptzFileName, PCODEATOM pCa, UINT uNum = 1, UINT uTry = 5, UINT uSleep = 400, BYTE bIgnore = '?'); private: // 打补丁 static BOOL Patch(HANDLE hProcess, PCODEATOM pCa, BYTE bIgnore); // 比较标识 static BOOL EqualStamp(PBYTE pbData, PBYTE pbStamp, UINT uSize, BYTE bIgnore); // 写入补丁 static BOOL WritePatch(HANDLE hProcess, DWORD dwAddress, PBYTE pbPatch, UINT uSize, BYTE bIgnore); }; ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////