#include
#include
#include
using namespace std;
/*
findMatchingCode() 参数说明:
1) hProcess 要打开的进程句柄
2) markCode 特征码,支持通配符(??),如: 55 8b ec ?? 56 83 ec 20 ?? ?? 08 d9 ee
3) memBeginAddr 起始搜索地址
4) memEndAddr 结束搜索地址
5) retAddr[] 记录找到的地址,传入这个参数前一定要清0,如 DWORD retAddr[32] = {0}; 或者 DWORD *retAddr = new DWORD[32]();
6) deviation 特征码地址离目标地址的偏移距离,上负下正
7) isCall 是否为找CALL的跳转地址,true 则 retAddr[] 返回的是CALL跳转的地址
8) isAll 是否查找所有符合的地址,false找到第一个符合的地址后就结束搜索,true继续搜索,直到搜索地址大于结束地址(memEndAddr)
return返回值 找到的地址总数
*/
DWORD findMatchingCode(HANDLE hProcess, string markCode, DWORD memBeginAddr, DWORD memEndAddr, DWORD retAddr[], int deviation, bool isCall, bool isAll = false);
DWORD findMatchingCode(HANDLE hProcess, string markCode, DWORD memBeginAddr, DWORD memEndAddr, DWORD retAddr[], int deviation, bool isCall, bool isAll)
{
//----------------------处理特征码----------------------//
//去除所有空格
if (!markCode.empty())
{
int index = 0;