我打算对以面向对象的方式编写的应用程序进行一些反向工程。现在我很好奇一个C ++类在汇编中的样子。我已经找到了有关函数及其调用约定的基础知识。但是类可能要复杂得多,对吧?

所以我们说我们有一个类:

class Rectangle {
    int width, height;
  public:
    void set_values (int,int);
    int area() {return width*height;}
};

void Rectangle::set_values (int x, int y) {
  width = x;
  height = y;
}


和这个对象:

Rectangle rect;
rect.set_values (3,4);


组装后会是什么样?

评论

即使对于简单的C代码,汇编输出也取决于编译器和编译器选项。要查看各种编译器中的输出情况,请使用GCC Godbolt编译器资源管理器

#1 楼

如https://reverseengineering.stackexchange.com/a/5957/1562中所述,它取决于编译器(不同的编译器将生成不同的机器代码和数据结构)。但是,您可能想要请参阅“反转C ++”,因为它在显示大多数编译器如何编译C ++类方面做得很好。

评论


反向C ++论文是无价的。

–雅各布·珀西(Jacob Persi)
17年3月3日在13:20