对vc++类和对象的逆向研究

2019-07-24 16:08:11 浏览数 (1)

经过反编译动态调试,vcpp的类实际上就是struct,跟delphi不同,它没有类头,而且所有的函数都直接放在函数表里头,跟普通的函数一样混在一起。而成员变量,则直接就在对象头开始算起,成员变量的结尾是0xfdfdfdfd,如果没有成员变量,则对象的开头就是0xfdfdfdfd。

举个例子:如果有1个int成员变量,则sizeof(class)=4;如果有2个int成员变量,则sizeof(class)=8; 如果没有,则sizeof(class)=1;

对象指针默认通过ecx传递,而delphi是第一个参数传递。

目标结论如下:

所以想要设计一个兼容delphi对象的c文件,让cpp当作一个类使用,是不合适的,因为它不是通过对象指针的偏移来调用成员函数的,而是直接跳转到了静态函数表。但是用struct调用函数指针还是可以的,这样其实就没必要使用cpp的类了,直接用c就可以了,而且函数指针更加灵活,方便定义和响应事件,以及多态,有着无与伦比的灵活优势,为什么我喜欢javascript呢,因为指针函数发挥的淋漓尽致。

逆向其他软件,比如游戏等,需要研究更多,比如虚函数等。

今天先这样,以后研究了再增加。。。

0 人点赞