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

经过反编译动态调试,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呢,因为指针函数发挥的淋漓尽致。

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

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

#学习路径##C/C++#
全部评论
感谢大佬分享!!!!
点赞 回复 分享
发布于 2022-01-12 20:43

相关推荐

中核苏能 等招聘结束才会定 第一年总包14+2w餐补
点赞 评论 收藏
分享
评论
点赞
1
分享
牛客网
牛客企业服务