aardio 文档

process.util 库模块帮助文档

process 成员列表 #

process.util #

此扩展库主要在 process 基础增强了进程模块与内存搜索功能。
可兼容 64 位、32 位目标进程,兼容 32 位、64 位操作系统。
64 位系统最低要求 Win7 ,32 位最低支持 XP 系统。

process.util() #

参数可指定要查找的 EXE 文件名,支持模式匹配语法。
也可以指定进程 ID,或者 process 对象。
如果指定 process 对象,则扩展其功能并返回原对象。
否则创建 process 对象并扩展其功能,然后返回该对象。

返回对象:ProcessUtilObject

ProcessUtilObject 成员列表 #

ProcessUtilObject.asm(机器码数组,函数原型,调用约定) #

使用table数组指定任意个机器码参数,使用分号隔开,
机器码可以是字符串,结构体,数值或指针,
函数原型可省略,调用约定默认为"cdecl"

ProcessUtilObject.asmCdecl(函数原型,任意多个机器码参数) #

写入机器码返回函数对象
请参考:aardio工具->其他编译器->INTEL汇编语言->汇编转机器码

ProcessUtilObject.asmStdcall(函数原型,任意多个机器码参数) #

写入机器码返回函数对象
请参考:aardio工具->其他编译器->INTEL汇编语言->汇编转机器码

ProcessUtilObject.asmThiscall(函数原型,任意多个机器码参数) #

写入机器码返回函数对象
请参考:aardio工具->其他编译器->INTEL汇编语言->汇编转机器码

ProcessUtilObject.assignToJobObject(process.job.limitKill) #

绑定到作业对象,成功返回 true
作业对象示例请参考标准库 process.job.limitKill 的源码。
也可直接调用 killOnExit 函数绑定 process.job.limitKill

ProcessUtilObject.closeMainWindow() #

关闭进程的主窗口,忽略隐藏窗口

ProcessUtilObject.ctrlEvent(0) #

发送Ctrl+C(SIGINT信号)
信号将传递到与目标进程控制台连接的所有非分离控制台进程
64位目标进程会导致当前控制台暂时关闭

ProcessUtilObject.ctrlEvent(1) #

发送Ctrl+Break(SIGBREAK信号)
信号将传递到与目标进程控制台连接的所有非分离控制台进程
64位目标进程会导致当前控制台暂时关闭

ProcessUtilObject.emptyWorkingSet() #

将工作集中的内存尽可能移动到页面文件中,
应发在最小化或程序空闲内存确实暂不需要使用时调用,
不应频繁调用此函数

ProcessUtilObject.findModule() #

查找并返回模块信息。
如果参数指定模块名称,则返回单个模块信息。
否则返回所有模块信息组成的数组。
没有找到模块返回 null

模块信息的 path 字段为模块文件路径。
baseAddress 字段为模块基址。
size 字段为模块大小。

ProcessUtilObject.free() #

释放进程对象。
不是关闭进程,仅仅是释放对进程的控制句柄。

ProcessUtilObject.getExitCode() #

该函数调用成功有两个返回值:进程退出代码,进程是否已退出

ProcessUtilObject.getInfo #

获取进程信息

ProcessUtilObject.getInfo() #

获取进程信息

返回对象:ProcessInfoObject

ProcessUtilObject.getInfo(infoClass,infoStruct) #

如果参数 infoClass 指定非 null 数值,
并且 infoStruct 指定结构体。
在 Win8 以及之后系统获取信息到该结构体。
成功返回原结构体。

此用法内部调用 ::Kernel32.GetProcessInformation
细节请参考该 API 文档

ProcessUtilObject.getMainWindow() #

返回进程的主窗口以及窗口进程ID,找不到则搜寻子进程主窗口。
查找时忽略隐藏窗口。

也可以调用 winex.mainWindows 获取主窗口。
winex.mainWindows 查找规则略有不同,请参考源码

ProcessUtilObject.getMainWindow(类名) #

返回进程的指定类名的主窗口以及窗口进程ID,找不到则搜寻子进程主窗口。
类名参数支持模式匹配语法

ProcessUtilObject.getModuleBaseAddress(模块名) #

返回模块基址。
模块名忽略大小写,
不指定模块名则返回应用程序基址。

此函数在返回数值过大时会返回 math.size64 对象,
转换方法兼容 JSON.parse 函数解析 10 进制数值的规则

ProcessUtilObject.getParentId() #

获取父进程 ID

ProcessUtilObject.getPath() #

返回执行程序文件完整路径。
如果该进程以管理权限运行,
则调用函数的进程也必须以管理权限运行
才能获取到路径

ProcessUtilObject.getPriorityClass() #

返回进程优先级

ProcessUtilObject.getUiInfo() #

获取UI线程窗口焦点,光标等信息

返回对象:guithreadinfoObject

ProcessUtilObject.handle #

进程句柄

ProcessUtilObject.id #

进程 ID

ProcessUtilObject.isWow64() #

进程是否在64位系统上运行的32进程

ProcessUtilObject.isX64() #

是否64位进程

ProcessUtilObject.kill() #

杀除进程

ProcessUtilObject.killOnExit() #

主进程退出时自动退出此进程

ProcessUtilObject.malloc(长度) #

在目标进程分配内存空间

ProcessUtilObject.malloc(长度,访问类型) #

在目标进程分配内存空间

ProcessUtilObject.malloc(长度,访问类型,分配类型) #

在目标进程分配内存空间

ProcessUtilObject.mfree(指针) #

释放malloc成员函数分配的内存指针

ProcessUtilObject.mfree(指针,释放长度,0x4000) #

释放malloc成员函数分配的内存指针
不建议手工指定长度

ProcessUtilObject.protect(内存地址,4/*_PAGE_READWRITE*/,1) #

修改内存保护属性,返回原来的保护属性,
第三个参数指定内存长度

ProcessUtilObject.readNumber(内存地址) #

读取一个int整数,32位
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readNumber(内存地址,"BYTE") #

读取一个字节,8位无符号
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readNumber(内存地址,"INT") #

读取一个int整数,32位无符号
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readNumber(内存地址,"LONG") #

读取一个long类型整数,64位无符号
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readNumber(内存地址,"WORD") #

读取一个word类型整数,16位无符号
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readNumber(内存地址,"byte") #

读取一个字节,8位
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readNumber(内存地址,"long") #

读取一个long类型整数,64位
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readNumber(内存地址,"word") #

读取一个word类型整数,16位
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readNumberPtr(内存地址) #

读取 int 整数的指针,
然后用在指针指向的内存读取读取数值。
可用参数 @2 指定静态类型,用法同 readNumber 函数。

ProcessUtilObject.readPtr() #

读取指针地址。
64 位进程读取 8 字节并返回 math.size64 对象。
32 位进程读取 4 字节并返回数值。

ProcessUtilObject.readString(内存地址,长度) #

读取定长字符串
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readStringPtr(内存地址,长度) #

在参数指定的地址读取字符串指针,
然后用在指针指向的内存读取字符串。

ProcessUtilObject.readStringUtf16(内存地址,长度) #

读取定长 Unicode 字符串,
返回字符串转换为UTF8编码。
注意长度以字符为单位
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readStringUtf16Ptr(内存地址,长度) #

在参数指定的地址读取字符串指针,
然后用在指针指向的内存读取定长 Unicode 字符串。
返回字符串转换为UTF8编码。
注意长度以字符为单位

ProcessUtilObject.readStruct(内存地址,结构体) #

读取定义的结构体
打开进程需要指定 _PROCESS_VM_READ 权限

ProcessUtilObject.readStructPtr(内存地址,结构体) #

在参数指定的地址读取结构体指针,
然后用在指针指向的内存读取结构体

ProcessUtilObject.remoteApi #

在外部进程内创建远程调用函数

ProcessUtilObject.remoteApi("void()","dll名","函数名") #

参数(函数原型,加载DLL模块名,函数名,调用约定)
不指定调用约定时默认使用stdcall调用约定
不会在API函数名字后面自动添加或移除"A","W"编码声明后缀,
并且要注意搜索DLL时默认搜索路径包含目标EXE所在目录,而非当前EXE目录

ProcessUtilObject.remoteApi("void()","dll名","函数名","cdecl,borland") #

参数(函数原型,加载DLL模块名,函数名,调用约定)
不会在API函数名字后面自动添加或移除"A","W"编码声明后缀,
并且要注意搜索DLL时默认搜索路径包含目标EXE所在目录,而非当前EXE目录

ProcessUtilObject.remoteApi("void()",CALL地址,调用约定) #

参数(函数原型,CALL地址,调用约定)
不指定调用约定在数时默认使用stdcall调用约定

ProcessUtilObject.remoteApi("void(INT thisAddr)","dll名","函数名","thiscall") #

参数(函数原型,加载DLL模块名,函数名,调用约定)
thiscall使用第一个参数指定this指针地址
不会在API函数名字后面自动添加或移除"A","W"编码声明后缀,
并且要注意搜索DLL时默认搜索路径包含目标EXE所在目录,而非当前EXE目录

ProcessUtilObject.resume() #

恢复运行

ProcessUtilObject.searchMemory(strRegEx,count,baseAddress,size) #

搜寻 @baseAddress 指定基址的内存。
@baseAddress 可指定数值或 math.size64 对象。
如果不指定基址,则自动获取进程基址作为参数。
@size 指定要搜索的内存长度,不指定则搜索所有可用内存(不要这样做)。
@strRegEx 指定模搜索的字符串数据,支持正则表达式(不是模式匹配)。
@strRegEx 可省略(这样做没有意义)。

count 指定返回结果的数目,0 为返回所有结果,
如果 @count 为负数则查询其绝对值数目的结果,并返回最后一个匹配结果
@count 为负数时返回单个值,否则返回数组。
如果没有找到匹配,返回 null 。

ProcessUtilObject.searchModuleMemory(moduleName,strRegEx,count) #

搜寻指定模块内存。
@moduleName 指定模块名称,忽略大小写并支持模式匹配语法。

strRegEx 指定模搜索的字符串数据,支持正则表达式(64位系统此参数不使用模式匹配)。
在 32 位操作系统上 @strRegEx 只能使用模式匹配与正则都支持的语法。
@strRegEx 可省略(这样做没有意义)。

count 指定返回结果的数目,0 为返回所有结果,
如果 @count 为负数则查询其绝对值数目的结果,并返回最后一个匹配结果
@count 为负数时返回单个值,否则返回数组。
如果没有找到匹配,返回 null 。

ProcessUtilObject.sendMessage(hwnd,message,wParam,lParam) #

向外部进程窗口发送消息
lParam如果是结构体则复制到目标进程内存,
结构体如果包含指针应当自行调用 process.malloc 分配内存并复制
发送消息涉及的用法太多,尤其是涉及到访问外部进程内存,
所涉及的知识量不能通过看几句函数说明获得,
普通用户请不要学习或使用此函数

ProcessUtilObject.setAffinity(1) #

指定进程运行的CPU内核

ProcessUtilObject.setInfo(infoClass,infoStruct) #

设置进程信息,成功返回 true。
infoClass 指定数值,infoStruct 指定结构体。
此函数内部调用 ::Kernel32.SetProcessInformation 。
详细用法请参考 API 文档。
在低于 Win8 的系统不执行操作

ProcessUtilObject.setPriorityClass(0x80/*_HIGH_PRIORITY_CLASS*/) #

设置进程优先级

ProcessUtilObject.stillActive() #

进程是否仍在运行

ProcessUtilObject.suspend() #

暂停进程

ProcessUtilObject.terminate() #

强行终止进程
可在参数中指定退出代码

ProcessUtilObject.tid #

返回进程的主线程 ID

ProcessUtilObject.wait() #

等待进程关闭,
可选使用一个毫秒值参数设定超时
超时或失败返回 false,
进程已退出则返回值1为true,返回值2为退出代码

ProcessUtilObject.waitMainWindow #

等待并返回进程主窗口以及窗口进程ID。
也可调用 winex.mainWindows 且指定参数 @2 为 true 以等待主窗口。
winex.mainWindows 查找规则略有不同,请参考源码

ProcessUtilObject.waitMainWindow(类名,等待窗口句柄) #

等待并返回进程主窗口以及窗口进程ID。
所有参数可选。
可选指定要等待的类名,类名参数支持模式匹配语法,
不指定类名时忽略隐藏窗口,
可选指定等待窗口句柄,该窗口关闭时些函数不再等待并直接返回结果

ProcessUtilObject.waitOne() #

等待进程关闭,不阻塞UI消息循环,
可选使用一个毫秒值参数设定超时
超时或失败返回 false,
进程已退出则返回值1为true,返回值2为退出代码

ProcessUtilObject.write(内存地址,任意个字符串或结构体参数) #

写入数据,成功返回写入尾部内存地址,
失败返回空

ProcessUtilObject.writeNumber(内存地址,0) #

写入一个int整数,32位

ProcessUtilObject.writeNumber(内存地址,0,"BYTE") #

写入一个字节,8位无符号

ProcessUtilObject.writeNumber(内存地址,0,"INT") #

写入一个int整数,32位无符号

ProcessUtilObject.writeNumber(内存地址,0,"LONG") #

写入一个long类型整数,64位无符号

ProcessUtilObject.writeNumber(内存地址,0,"WORD") #

写入一个word类型整数,16位无符号

ProcessUtilObject.writeNumber(内存地址,0,"byte") #

写入一个字节,8位

ProcessUtilObject.writeNumber(内存地址,0,"long") #

写入一个long类型整数,64位

ProcessUtilObject.writeNumber(内存地址,0,"word") #

写入一个word类型整数,16位

ProcessUtilObject.writeString(内存地址,字符串,长度) #

写入字符串,长度为可选参数,
省略内存地址参数则自动分配内存,
该函数返回写入内存地址,写入长度

ProcessUtilObject.writeStringUtf16(内存地址,字符串) #

写入Unicode字符串
参数可以为默认的UTF8编码文本

ProcessUtilObject.writeStruct(内存地址,结构体) #

写入定义的结构体,
省略内存地址参数则自动分配内存,
该函数返回写入内存地址,写入长度

Markdown 格式