IDC具有RunPlugin()函数,但似乎没有办法明确卸载插件。我进行了广泛搜索-包括Hex-Rays论坛-但没有找到答案。从这篇文章来看,我并不是唯一一个。

目前,我正在尝试通过将一些测试代码添加到插件并将其加载到IDA中来了解某些SDK函数是如何工作的。如果使用PLUGIN_KEEP,则可以通过在IDC提示符下调用函数来进行试验,但必须关闭数据库以卸载插件。如果我使用PLUGIN_UNL,那么我实际上只有一个带有单个整数参数的函数,这严重地限制了实验...

当前,我正在通过在加载时设置PLUGIN_KEEP并将PLUGIN_UNL修补到PLUGIN.flags中来解决该问题如果插件的run函数是用参数666调用的,或者参数是0,并且这不是对run函数的第一次调用。后者很方便,因为它允许使用单个热键进行加载/卸载,而不会影响命令提示符。打开.IDB时,该插件会自动加载,然后可以通过在PLUGIN.wanted_hotkey中配置的热键进行自由卸载和重新加载。是否有更好/更干净的方法来卸载插件,或者我应该注意一些警告?

#1 楼


当前,我正在通过在加载时设置PLUGIN_KEEP来解决该问题,但将PLUGIN_UNL修补到PLUGIN.flags中。 IDA卸载插件的记录方法。

#define PLUGIN_UNL  0x0008      ///< Unload the plugin immediately after calling 'run'.
                                ///< This flag may be set anytime.
                                ///< The kernel checks it after each call to 'run'
                                ///< The main purpose of this flag is to ease
                                ///< the debugging of new plugins.


评论


谢谢,当我梳理头文件以获得少量信息时,我一定忽略了“标志随时可以设置”的位...

– DarthGizka
2015年1月8日在11:53