前言
特征码定位在很多情况下是非常方便的。如动态地址,游戏更新地址变动等
一、原理
特征码定位的原理,其实就是读程序内存,将读出的字节数组与欲寻找的字节数组做匹配。如果匹配成功,将得到的偏移加上读取首地址就得到指定特征码的地址了。
二、过程
1.获取进程句柄
读取内存之前,要获得具有 PROCESS_VM_READ 权限的进程句柄。用OpenProcess()实现。至于进程pid,方法不唯一,大家自取。我是通过取进程快照遍历对比进程名得到的。
/**
* @brief Get the Pro Id object
*
* @param proName 进程名
* @return DWORD 进程id
*/
DWORD getProIdByName(char *proName)
{
PROCESSENTRY32 proInfo;
proInfo.dwSize = sizeof(PROCESSENTRY32);
//获取所有进程快照
HANDLE hProSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProSnap == INVALID_HANDLE_VALUE)
{
return -1;
}
Process32First(hProSnap, &proInfo);
while (strcmp(proInfo.szExeFile, proName) != 0)
{
if (Process32Next(hProSnap, &proInfo) == 0)
break;
}
//关闭快照句柄
CloseHandle(hProSnap);
if (strcmp(proInfo.szExeFile, proName)