如何卸载RtlInstallFunctionTableCallback?其逆向操作函数是什么?
RtlInstallFunctionTableCallback 相关疑问解答 - 回调卸载方法:你猜测的
TableIdentifier参数确实和卸载逻辑相关。目前官方无公开文档说明该参数的具体用途,实际使用中卸载已注册的回调不需要调用额外的独立API,直接调用RtlDeleteFunctionTable,传入你注册回调时填写的TableIdentifier参数即可完成卸载,该参数的作用等价于普通函数表注册时传入的基地址,用于唯一标识你注册的回调实例。 - 回调返回函数表的生命周期:系统不会将你回调返回的函数表自动传入
RtlAddFunctionTable做持久化注册,该返回值仅作临时使用,系统完成当前的unwind信息查询逻辑后就不会再访问对应内存,你也不需要额外调用RtlDeleteFunctionTable清理这部分返回的函数表内容。 - 使用注意事项:你需要自行保证
TableIdentifier全局唯一,不要和现有已加载模块的基地址、其他已注册回调的TableIdentifier重复,否则会触发unwind信息查询冲突,导致程序异常。用于临时JIT代码场景时,该方案的性能确实远高于反复批量调用RtlAddFunctionTable/RtlDeleteFunctionTable的实现。
内容的提问来源于stack exchange,提问作者Eric Grange
相关产品推荐
相关产品推荐

