您当前的位置: 首页 >  c++

插件开发

暂无认证

  • 9浏览

    0关注

    492博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

C++-逆向分析-类的成员函数地址与对象地址动态绑定-this指针-成员函数和成员虚函数反汇编解析

插件开发 发布时间:2022-10-16 09:44:01 ,浏览量:9

文章目录
    • 1.类的成员函数
    • 2.this指针
    • 3.类成员函数指针
      • 3.1.常规成员函数转换
      • 3.2.虚函数情形
      • 3.3.成员函数指针数组及其应用
      • 3.4.成员函数调用和 this 指针
    • 4.成员函数和成员虚函数汇编分析
    • 5.作者答疑

1.类的成员函数

类实例化为对象,数据成员是根据对象的首地址来偏移的,而对象的成员函数在内存中是公用的,但在C++或者C写代码时,却可以根据对象加操作符.或者->来进行访问,这在底层到底是如何实现的呢? 不同类的相同函数名的函数在内存中有不同的实现。C++中的函数在编译时会根据命名空间、类、参数签名等信息进行重新命名,形成新的函数名。

2.this指针

this指针具有如下特点:

名称属性:标识符this表示。 类型属性:classname* const 值属性:表示当前调用该函数对象的首地址。 作用域:this指针是编译器默认传给类中非静态函数的隐含形参,其作用域在非静态成员函数的函数体内。 链接属性:在类作用域中,不同类的非静态成员函数中,this指针变量的链接属性是内部的,但其所指对象是外部的,即this变量是不同的实体,但指向对象是同一个。 存储类型:this指针是由编译器生成,当类的非静态成员函数的参数个数一定时,this指针存储在ECX寄存器中;若该函数参数个数未定(可变参数函数),则存放在栈中。 this指针并不是对象的一部分,this指针所占的内存大小是不会反映在sizeof操作符上的。this指针的类型取决于使用this指针的成员函数类型以及对象类型。

类的成员函数默认第一个参数为T* const register this。

3.类成员函数指针

C++编译器在代码编译阶段会对类对象调用的成员函数进行静态绑定(虚函数进行动态绑定),类成员函数的地址在代码编译时就确定,类成员函数地址可以使用成员函数指针进行保存。 成员函数指针定义语法如下:

ReturnType (ClassName::* pointerName) (ArgumentLList);

ReturnType:成员函数返回类型 ClassName: 成员函数所属类的名称 Argument_List: 成员函数参数列表 pointerName:指针名称

class Test
{
public:
    void print()
    {
        cout             
关注
打赏
1665481431
查看更多评论
0.0458s