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

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

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

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

目标结论以下:设计

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

逆向其余软件,好比游戏等,须要研究更多,好比虚函数等。调试

今天先这样,之后研究了再增长。。。对象

相关文章
相关标签/搜索