IDC 有一个 RunPlugin() 函数,但似乎没有办法显式卸载插件。我搜索了很多 - 包括 Hex-Rays 论坛 - 但没有找到答案。从这篇文章来看,我不是唯一一个。
目前,我正试图通过向插件添加一些测试代码并将其加载到 IDA 中来弄清楚某些 SDK 功能是如何工作的。如果我使用,PLUGIN_KEEP那么我可以通过从 IDC 提示调用我的函数来进行试验,但我必须关闭数据库才能卸载插件。如果我使用,PLUGIN_UNL那么我实际上只有一个带有单个整数参数的函数,这严重限制了实验......
目前我具有工作围绕PLUGIN_KEEP在负载设定,但修补PLUGIN_UNL到PLUGIN.flags如果插件的运行函数被调用,参数666,或者该参数为0,这是不是run函数的第一个电话。后者很方便,因为它允许使用单个热键加载/卸载,而无需在命令提示符下放屁。当打开 .IDB 时,插件会自动加载,然后可以通过 .IDB 中配置的热键自由卸载和重新加载PLUGIN.wanted_hotkey。
但是,总的来说,这似乎是一种依赖未记录功能的相当黑客的方法。是否有更好/更干净的卸载插件的方法,或者我应该注意哪些注意事项?