首页 > 编程语言 >C++ ---获取类成员函数地址

C++ ---获取类成员函数地址

时间:2022-11-28 11:24:48浏览次数:66  
标签:char void C++ --- 地址 Func printf ta TA

#include <iostream>

class TA
{
public:
    int a;

    void TA1() 
    {
        //this->a = 5;
        printf("a=%d\n", a); 
    }

    void TA2()
    {
        printf("hha\n");
    }
};

union UU
{
    void* p;
    void(TA::*pfn)();
};

typedef void(*Func)(TA*);

int main(int argc, char** argv)
{
    TA ta;
    ta.a = 2;

    UU u;
    u.pfn = &TA::TA1;
    printf("%p\n", (char*)u.p);

    Func jj = (Func)((char*)u.p);
    jj(&ta);

    printf("%p\n", (char*)u.p + 0xbe);//两个函数的地址相差0xbe, 这个值是预先调试看的。
    Func jj1111 = (Func)((char*)u.p + 0xbe);
    jj1111(&ta);

    u.pfn = &TA::TA2;
    printf("%p\n", (char*)u.p);
    
    Func jj2 = (Func)((char*)u.p);
    jj2(&ta);
    
    
    std::cout << &TA::TA1 << std::endl;

    return 0;
}

简单来说就是 通过union的特性来获取到地址。

参考:https://blog.csdn.net/lhh_qrsly/article/details/124937814

标签:char,void,C++,---,地址,Func,printf,ta,TA
From: https://www.cnblogs.com/linxisuo/p/16931686.html

相关文章

  • JavaWeb-MySql高级
    JavaWeb-MySql高级1,约束1.1概念约束是作用于表中列上的规则,用于限制加入表的数据例如:我们可以给id列加约束,让其值不能重复,不能为null值。约束的存在保证了数据......
  • XCTF---MISC---Wire1
    XCTF---MISC---Wire1 flag:flag{w1reshARK_ez_1sntit}解题思路:1、观察题目,下载附件。2、下载后发现是一个数据包格式文件,使用Wireshark打开,观察协议内容。3、搜索......
  • GIS---WKT、WKB与GeoJSON
    WKT与WKB是OGC中的简单服务标准SFS(SimpleFeaturesInterfaceStandard),但是GeoJSON并不是OGC中的标准。​WKT(Well-knowntext)是开放地理空间联盟OGC(OpenGISConsortium......
  • Django-课程介绍-笔记
    软件框架问题1:什么是软件框架?举个简单的例子,对于一个公司来说,公司中有各个职能部门,每个部门各司其职,通过部门之间的配合来完成工作,这些部门就形成了一个公司的组织架构。从......
  • Django-1.入门-笔记
    本节课是通过Django框架最终完成一个"图书-英雄"信息管理的小例子。目标对使用django框架有一个全面的认识,包括开发流程、基本概念要素,并不针对某个概念知识点详细拆解,后续......
  • Django-1.1搭建环境-笔记
    虚拟环境在开发过程中,当需要使用python的包时可以联网安装sudopip3install包名称使用如上命令,会将包安装到/usr/local/lib/python3.5/dist-packages下。产生的问题如果在......
  • CTF-密码学学习方法分享 |今晚八点免费直播
      *未有时间参加直播课程,课后有录播视频和课堂学习资料,   扫码进群领取。 ......
  • Django-1.2创建项目-笔记
    创建图书管理项目我们以一个电商网站为例,网站上有跟用户有关的页面,有跟商品有关的页面,还有跟订单有关的页面,这样的一块内容其实就是网站的一个功能模块。在django中,项目的组......
  • egrep -rl "搜索关键字" 目录/* 显示的内容为包含关键字的文件名字
    批量替换多个文件中的字符串:1sed-i 's/oldstring/newstring/g'`grep-rl搜索关键词 目录/*`(-r表示递归查找子目录,-l表示输出匹配的文件名)......
  • vue vue-video-player视频播放器
    vuevue-video-player视频播放器安装依赖[email protected]@5.15.0-D使用<template><div><video-playerclass="v......