我正在反编译Windows PE(在PDB中具有完整的调试符号),并且正在使用IDA进行帮助。
我想知道如何获取所有指向的参考列表给定的类成员变量。当我在反编译器窗口中的类成员变量名称中按“ X”时,它仅在正在反编译的实际函数中显示对其的外部参照。我想查看所有功能中的参考。即使不编写脚本,这是否有可能?

#1 楼

另一个答案是错误的。
在IDA 7.4及更高版本中(我认为可能是7.3),这是完全有可能的(假设IDB已经具有所讨论结构的类型,并且该类型已应用于Hex-Rays中的参数/变量)。
),右键单击该变量,然后按“跳转到全局外部参照”,如下所示:

您将弹出一个包含所有全局外部参照的弹出窗口,如下所示:

这是基于缓存的,因此,第一次执行该操作时,您需要右键单击并按“刷新”,如上图所示(对于大型数据库,这会花费一些时间,但是完全值得) -这是我在Hex-Rays中最常用的功能之一。

评论


感谢你的回答!可悲的是我的许可证在7.1过期。通过脚本编写将如何可行?我对IDA脚本的了解不多。

–避免
20 Nov 12'上午6:53

满容易。从ctree_visitor_t派生一个类,该类的visit_expr方法查找cot_memptr / cot_memref表达式。找到这样的表达式x时,请将x-> type与所需的结构类型进行比较。如果匹配,您已经找到了使用该结构的地方。要查找对特定字段的访问,请将x-> m与所需字段的偏移量进行比较。要在整个数据库中找到此消息,请将ctree_visitor_t派生应用于数据库中的所有函数。

–滚轴
20 Nov 12'在7:09

@Rolf Rolles非常好。您知道一个已经做到的插件吗?

–避免
20 Nov 12'在8:21

我不。这样的插件不是必需的,因为该功能内置于更高版本中(请参见上面的讨论)。

–滚轴
20-11-12的16:13

#2 楼

这是不可能的。您必须恢复类实例结构,然后通过所有类方法并在使用该类结构的地方应用它。然后,您去查看在何处创建该类,并跟踪在何处使用其所有实例,并确保找到对该类的公共成员的所有访问点。然后,转到结构窗口,查看所需成员的所有外部参照。

评论


由于我拥有PE的PDB,因此您所说的所有初始内容都可以收集在PBE中。 IDA已经认识到世界各地的结构和变量。问题是我无法弄清楚如何获得包含访问给定变量的所有代码的列表。我认为使用脚本执行该操作应该非常容易,但是我只是认为这应该是我不知道的默认功能。

–避免
20/11/11在11:14

该类结构必须出现在“结构”窗口中,然后再将其应用到汇编器上,而不是应用到反编译的代码上。有关如何执行该操作的视频youtube.com/watch?v=X3xCwNt2ZVY

–安东·库科巴(Anton Kukoba)
20-11-11在11:21