C ++中的逆向工程虚拟函数代码
|
我只是在VS2010上编译了以下内容(关闭了优化功能)。
class Shape {
public:
int x,y;
Shape() {
x=10;
y=20;
}
virtual void function1() {
cout<<\"function1\";
}
virtual void function2() {
cout<<\"function2\";
}
};
int main() {
Shape *s = new Shape();
s->function1();
s->function2();
return 0;
}
反汇编未显示与虚拟函数相对应的代码块或对虚拟函数的任何调用,因此Im假定这是由于使用vftable查找虚拟函数的方式引起的。我正在使用IDA Pro,因此它可能无法解决此类问题。如果我错了,请纠正我。
在这方面,我也有一些疑问。
我有什么办法可以像在拆卸过程中查看其他虚拟功能一样查看虚拟功能?我可以使用任何脚本(IDAPython)/方法吗?
有什么办法可以列出可执行文件中的所有虚拟功能?
建议阅读?
没有找到相关结果
已邀请:
4 个回复
悍蕾驮苇袜
邵酮
缉康怪
联海
)它提取vptr,将其偏移并通过寄存器中的值进行调用)。 Shape :: function2的定义(注意.weak表示内联)
Shape :: function1的定义(同样,.weak表示内联)
vtable本身对Shape的定义:
主要的定义:
至于其他人所说的,编译器可以完全取消虚拟调度或内联函数,这是事实。这个版本的g ++不会针对特定的代码段执行此操作,而是通过删除指针(使用具有静态存储持续时间的
)来实现