跳到主要内容

💰 FindDataEx 搜索数据Ex

🎯功能

搜索指定的二进制数据

📜语法

结果 = dm.FindDataEx(句柄, 地址集合, 数据, 步长, 多线程, 模式)

📥参数

参数数据类型解释
句柄整型数指定搜索的窗口句柄或者进程ID. 默认是窗口句柄. 如果要指定为进程ID,需要调用SetMemoryHwndAsProcessId
地址集合字符串指定搜索的地址集合,这个地方可以是上次FindXXX的返回地址集合,可以进行二次搜索(类似CE的再次扫描); 如果要进行地址范围搜索,那么这个值为的形如如下(类似于CE的新搜索)"00400000-7FFFFFFF" "80000000-BFFFFFFF" "00000000-FFFFFFFF"
数据字符串要搜索的二进制数据, 比如"00 01 23 45 67 86 ab ce f1"等. 这里也可以支持模糊查找, 用??来代替单个字节. 比如"00 01 ?? ?? 67 86 ?? ce f1"
步长整型数每次搜索的步长
多线程整型数表示是否开启多线程查找; 0:关闭, 1:开启; 开启多线程查找速度较快,但会耗费较多CPU资源. 不开启速度较慢,但节省CPU
模式整型数0:扫描全部内存类型, 1:快速扫描(略过只读内存)

📤返回

字符串, 返回搜索到的地址集合,地址格式如下:"addr1|addr2|addr3…|addrn"; 比如"400050|423435|453430", 如果要想知道函数是否执行成功,请查看GetLastError函数.

💡示例

// 全局搜索
result = dm.FindDataEx(hwnd,"00000000-FFFFFFFF","00 01 23 45 67 86 ab ce f1",4,1,0)
if len(result) = 0 then
MessageBox "找不到"
EndScript
end if

result = split(result,"|")
count = ubound(result)+1
MessageBox "找到"&count&"个地址"

📘备注

如果目标窗口的绑定属性中有dx.public.memory,并且是用本对象来绑定的,那么操作方式是直接进入目标进程读写.

dx.public.memory可突破部分窗口读写保护. 如果正常方式无法读写,可以尝试此属性。另外DmGuard中的memory护盾也可以突破部分窗口内存保护,可以尝试使用。