搜索二进制数据 - FindDataEx
函数简介
搜索指定的二进制数据,可定制步长、多线程、内存类型等。
接口名称
FindDataEx
DLL调用
long FindDataEx(long instance, long hwnd, string addr_range, string data, int step, int multi_thread, int mode);
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| instance | 长整数型 | OLAPlug对象的指针,由 CreateCOLAPlugInterFace 接口生成。 |
| hwnd | 长整数型 | 窗口句柄 |
| addr_range | 字符串 | 地址范围 |
| data | 字符串 | 要搜索的二进制数据,支持单字节CE数据格式搜索,如"00 01 23 45 * ?? ?b c? * f1"等 |
| step | 整数型 | 步长 |
| multi_thread | 整数型 | 是否开启多线程 |
| mode | 整数型 | 搜索模式(0:全部,1:可写,2:不可写,4:可执行,8:不可执行,16:写时复制,32:不写时复制) |
CE地址格式示例
<Game.exe>+1234 // 模块基址+偏移
<Game.exe>+1234+8+4 // 多级偏移(非指针)
[<Game.exe>+1234]+8+4 // 一级指针+偏移
[[<Game.exe>+1234]+8]+4 // 二级指针+偏移
[[[<module>+offset1]+offset2]+offset3] // 三级指针
[0x12345678]+10 // 直接地址+偏移
示例
C++
long instance = CreateCOLAPlugInterFace();
// hwnd 为目标窗口句柄
// 搜索二进制数据,步长1,开启多线程,搜索可执行内存
long strPtr = FindDataEx(instance, hwnd, "0x00400000-0x7FFFFFFF", "8B 45 ?? 89 * C3", 1, 1, 4);
char* result = GetStringFromPtr(strPtr);
printf("搜索结果: %s\n", result);
FreeStringPtr(strPtr);
Python
# 待补充
返回值
返回字符串的指针,格式: "addr1|addr2|...|addrn"。
注意事项
- 返回的字符串指针需调用 FreeStringPtr 释放内存。
