单击 IDA 中的虚拟函数

逆向工程 艾达
2021-06-16 19:59:38

我正在反转一些具有 RTTI 的东西,所以找到 vftables 很容易。

我有一个类的实例some_object,有一个方法通过它的__vftable. method_4有一个类型的data_struct *(__thiscall *method_4)(void *not_sure, data_struct *data_struct, int a3)它看起来像这样:

在此处输入图片说明

有没有办法实际单击method_4此处并转到 vftable/underlaying 中的指针sub_<something>当我想查看该函数的作用时,我似乎只能手动返回 vftable。

感觉就像我需要以某种方式将实例some_object或更确切地说它的实例链接_vftable到实际的 vftable 内存位置,但不确定这是否是一回事?我想要的太多了吗?:)

1个回答

我不知道它是否可以点击,但您可以使用add_cref将一个位置链接到另一个代码位置。

如果我有一个呼叫站点,我通常会使用它,call eax并且我知道它eax总是指向相同的位置(就像你使用 vtables 的情况一样)。

这样,IDA 将call eax连接到目标位置,您将获得所有好处,例如参数传播、目标上的外部参照等,也许它使其可点击但我不使用反编译器。

像这样使用它:

add_cref(addr_from, addr_to, fl_CN | XREF_USER)

如果您忘记了 XREF_USER,如果我没记错的话,代码引用有时会被自动分析丢失。