【发布时间】:2019-05-30 03:33:46
【问题描述】:
我正在反转一些汇编代码,并且一直遇到某些结构,这些结构在结构的最开头有一个地址。
此地址似乎是指向与该特定结构相关的函数地址数组开头的指针。
我还注意到数组中的第一个函数通常与结构的释放/清理有关。
有人知道这种结构叫什么吗?我想了解它是如何工作的
【问题讨论】:
-
您可能正在查看指向 vtable(虚拟表)的指针。
-
虚拟表。对于虚函数。例如析构函数或用户定义的虚函数。因为这些是运行时相关的。尝试对没有虚函数的类/结构进行逆向工程。看到不同。或者也很有趣:使用虚拟表进行继承。
-
How do objects work in x86 at the assembly level? 展示了 vtable 的工作原理,并附有编译器生成代码的 x86 示例。
-
vtable 中的第一个函数是析构函数吗?
-
它依赖于实现。 Linux 和 Windows 以完全相反的顺序实现它们的 vtable(这取决于声明 IIRC 的顺序)。
标签: c++ assembly reverse-engineering powerpc