aardio 文档

process.apiHook 库模块帮助文档

process 成员列表 #

process.apiHook #

在外部32位进程内安装 API 函数钩子,
作用仅仅是安装,需要要用 C,或 C++ 写 32位 dll 钩子。
可以在 aardio 中通过远程 API 调用钩子 DLL 中的函数。
具体用法可参考 process.ruffle 扩展库源码。

进程内钩子请改用 thread.apiHook,
线程内钩子请改用 raw.apiHook

创建 API Hook 工具

process.apiHook() #

返回对象:processApihookObject

process.apiHook(执行文件,命令行参数,{suspended=true}) #

运行执行文件或关联文档,并返回 API Hook 安装工具。
启动后暂停进程,可在安装钩子以后调用 resume() 函数继续运行进程

process.apiHook(执行文件,命令行参数,启动参数) #

运行执行文件或关联文档,并返回 API Hook 安装工具。
也可以仅指定第二个参数运行纯命令行
启动参数为 process.STARTUPINFO 结构体,可选,
可以使用普通table对象替代启动参数.将自动转换为STARTUPINFO结构体

process.apiHook(进程ID) #

使用进程 ID 打开进程,并返回 API Hook 安装工具。
失败则返回 null,以及错误信息.

processApihookObject 成员列表 #

processApihookObject.freeLibrary(模块地址) #

卸载DLL

processApihookObject.getProcAddress(模块地址,"API函数名") #

查找外部进程API函数,返回函数地址

processApihookObject.install("拦截DLL模块名","拦截API函数名","钩子模块名","钩子API函数名") #

安装钩子,返回HookInfo对象
也可以直接写拦截函数地址或钩子函数地址,
但函数地址必须是目标进程内的函数地址,不可使用aardio函数,

注意是在目标进程内调用LoadLibrary搜索DLL,
默认搜索路径包含目标EXE所在目录,而非当前EXE所在目录
但以斜杠开头的路径aardio会在当前进程中解析为完整路径

processApihookObject.install() #

返回对象:procssHookInfoObject

processApihookObject.loadLibrary("DLL模块名") #

在目标进程中加载DLL,返回数值类型句柄

processApihookObject.process #

进程对象,

返回对象:processObject

processApihookObject.resume() #

继续运行进程

processApihookObject.unInstall(HookInfo) #

卸载钩子,
传入参数必须是 install函数的返回值

要注意的问题:
1、如果钩子函数正在回调中卸载自身会导致目标进程崩溃,
1、卸载钩子时目标函数不能正在使用中,
aardio会先暂停目标进程主线程,卸载完再恢复,
但目标进程可能是多线程的,请避免目标函数正在被调用时去释放

processApihookObject.unInstallAll() #

释放所有钩子,
该函数会在对象回收时自动调用
如果不希望在进程关闭时卸载钩子,请将此函数赋值为null

procssHookInfoObject 成员列表 #

procssHookInfoObject.addrHookFunction #

钩子函数地址

procssHookInfoObject.addrProtect #

函数内存保护属性

procssHookInfoObject.addrTargetFunction #

被拦截函数地址

procssHookInfoObject.addrTrampoline #

用于调用原函数的跳板地址

procssHookInfoObject.hHookModule #

钩子模块地址

procssHookInfoObject.hModule #

被拦截模块地址

procssHookInfoObject.restoreOpCodeSize #

安装钩子覆盖指令长度

Markdown 格式