在外部32位进程内安装 API 函数钩子,
作用仅仅是安装,需要要用 C,或 C++ 写 32位 dll 钩子。
可以在 aardio 中通过远程 API 调用钩子 DLL 中的函数。
具体用法可参考 process.ruffle 扩展库源码。
进程内钩子请改用 thread.apiHook,
线程内钩子请改用 raw.apiHook
创建 API Hook 工具
运行执行文件或关联文档,并返回 API Hook 安装工具。
启动后暂停进程,可在安装钩子以后调用 resume() 函数继续运行进程
运行执行文件或关联文档,并返回 API Hook 安装工具。
也可以仅指定第二个参数运行纯命令行
启动参数为 process.STARTUPINFO 结构体,可选,
可以使用普通table对象替代启动参数.将自动转换为STARTUPINFO结构体
使用进程 ID 打开进程,并返回 API Hook 安装工具。
失败则返回 null,以及错误信息.
卸载DLL
查找外部进程API函数,返回函数地址
安装钩子,返回HookInfo对象
也可以直接写拦截函数地址或钩子函数地址,
但函数地址必须是目标进程内的函数地址,不可使用aardio函数,
注意是在目标进程内调用LoadLibrary搜索DLL,
默认搜索路径包含目标EXE所在目录,而非当前EXE所在目录
但以斜杠开头的路径aardio会在当前进程中解析为完整路径
在目标进程中加载DLL,返回数值类型句柄
进程对象,
继续运行进程
卸载钩子,
传入参数必须是 install函数的返回值
要注意的问题:
1、如果钩子函数正在回调中卸载自身会导致目标进程崩溃,
1、卸载钩子时目标函数不能正在使用中,
aardio会先暂停目标进程主线程,卸载完再恢复,
但目标进程可能是多线程的,请避免目标函数正在被调用时去释放
释放所有钩子,
该函数会在对象回收时自动调用
如果不希望在进程关闭时卸载钩子,请将此函数赋值为null
钩子函数地址
函数内存保护属性
被拦截函数地址
用于调用原函数的跳板地址
钩子模块地址
被拦截模块地址
安装钩子覆盖指令长度