如何检测IDA SDK中的地址变化?

逆向工程 艾达 idapro插件 蟒蛇
2021-07-05 01:17:34

我正在用 Python 为 IDA 开发一个自定义内存查看器。显然我需要知道当前的 EA。现在,我只是要求用户通过AskAddr()提供它并且它工作正常。但是,我希望我的插件能够更好地与 IDA 集成。例如,如果我单击函数窗口中的一个函数,或单击导航器中的任何内容,它应该打开我的窗口(如果它已经聚焦),而不是十六进制视图或反汇编视图。好吧,至少我希望它如此。我不相信在 IDA 的内部打开这些是硬编码的,因为我们可以根据需要获得尽可能多的十六进制/反汇编视图,并且 IDA 总是使用最后一个作为 EA 处理程序......所以他们可能以某种方式注册自己。

我尝试过的是使用UI hooks,但它们根本不注册所需的事件。如果我点击导航器,它什么也不显示,但如果我按下G,它会正确接收JumpAsk事件。所以它似乎一时兴起。我尝试过的另一件事是使用simplecustviewer_t该 offer OnCursorPosChanged,但显然它处理的是窗口中文本插入符号的位置变化,而不是 EA“光标”的变化。

有什么办法可以让我参与到这些事件中吗?

1个回答

idc.ScreenEA() 是你的朋友。

ScreenEA()
Get linear address of cursor

您可以打开一个线程,它会每隔一段时间询问一次该值,或者将同步菜单项添加到您的自定义视图中,或者使用 PyQt4 功能来检查窗口上的设置焦点,而不是 simplecustviewer_t。