11-底层理解类

this call

  • _thiscall是C++中类的成员函数访问时定义的函数调用约定
    1. 通常寄存器ecx用来存放类的指针
    2. 参数由右到左入栈
    3. 堆栈由被调用者负责恢复
  • 类中的非静态成员函数都可以使用this指针,this指针本质上来讲就是把对象的指针通过寄存器ecx传入成员函数,因此类中的成员函数访问其变量是,都是通过指针+偏移的形式来访问的,不管是否明确使用this指针

类的静态成员函数,本质上是采用_cdecl约定

  1. 参数由右到左入栈
  2. 由调用者恢复堆栈平衡
  • 因为类的静态成员函数本质上就是一个普通的函数,所以根本没有传递对象的指针,因此,也就不能访问其成员变量,
  • 而类的静态成员变量本质上相当于一个全局变量,有着固定的内存地址,与类对象并无关系,所以类的静态成员可以在类没有实例的情况下通过 __类::静态成员__这样的形式来访问

类一定要有构造函数吗

  • 通常情况下,每个类都有一个默认的构造函数,如果没有显式指定,编译器会为我们添加一个空的默认构造函数
  • 但是在逆向汇编时会发现,一个空的构造函数实际上没有任何意义,所以某些情况下编译器会删除掉没有意义的构造函数

std call

  • 参数从左往右依次入栈,并且在函数返回前,清空堆栈
comments powered by Disqus