[C++] 虚指针,虚表,虚函数地址打印
来源:互联网 发布:淘宝旧杂志回收 编辑:程序博客网 时间:2024/06/05 04:19
#include <iostream>using namespace std;class Base{public :int base_data;Base() { base_data = 1; }virtual void func1() { cout << "base_func1" << endl; }virtual void func2() { cout << "base_func2" << endl; }virtual void func3() { cout << "base_func3" << endl; }};class Derive : public Base{public :int derive_data;Derive() { derive_data = 2; }virtual void func1() { cout << "derive_func1" << endl; }virtual void func2() { cout << "derive_func2" << endl; }};typedef void (*func)();int main(){Base base;cout << "&base: " << &base << endl;cout << "&base.base_data: " << &base.base_data << endl;cout << "----------------------------------------" << endl;Derive derive;cout << "&derive: " << &derive << endl;cout << "&derive.base_data: " << &derive.base_data << endl;cout << "&derive.derive_data: " << &derive.derive_data << endl;cout << "----------------------------------------" << endl;for(int i=0; i<3; i++){// &base : base首地址// (unsigned long*)&base : base的首地址,vptr的地址// (*(unsigned long*)&base) : vptr的内容,即vtable的地址,指向第一个虚函数的slot的地址// (unsigned long*)(*(unsigned long*)&base) : vtable的地址,指向第一个虚函数的slot的地址// vtbl : 指向虚函数slot的地址// *vtbl : 虚函数的地址unsigned long* vtbl = (unsigned long*)(*(unsigned long*)&base) + i;cout << "slot address: " << vtbl << endl;cout << "func address: " << *vtbl << endl;func pfunc = (func)*(vtbl);pfunc();}cout << "----------------------------------------" << endl;for(i=0; i<3; i++){unsigned long* vtbl = (unsigned long*)(*(unsigned long*)&derive) + i;cout << "slot address: " << vtbl << endl;cout << "func address: " << *vtbl << endl;func pfunc = (func)*(vtbl);pfunc();}cout << "----------------------------------------" << endl;return 1;}
阅读全文
0 0
- [C++] 虚指针,虚表,虚函数地址打印
- 打印虚函数地址
- C++虚函数:虚指针、虚表、虚函数入口地址
- c 指针与地址 指针与函数
- 打印虚函数地址的方法
- C经典 指针函数 打印星期几
- C语言打印指针(地址)的值
- C语言之函数指针和函数的首地址
- 打印函数地址
- C地址打印
- C/C++ 函数指针、虚函数、纯虚函数
- C程序设计语言- 指针与数组-4.1----指针与地址、指针与函数参数、指针与数组、地址算术运算
- C/C++ 函数名 指针,地址 全析
- objective-c 函数参数 传地址 传指针
- C/C++ 函数与指针取地址符
- 【C】 指针与地址
- objective-c 函数参数 传地址 传指针 指向指针的指针
- Q13.3 关于虚表指针、虚函数表、虚函数表中虚函数地址
- javaScript基础知识总结
- MIMEType
- JavaWeb学习总结——Web应用中使用JavaMail发送邮件
- 知识收录(记录平时使用查询到的资料)
- Python PIL & base64
- [C++] 虚指针,虚表,虚函数地址打印
- 开源项目地址
- 如何让你的蠢小人动起来——C++中包含优先级复杂条件FSM的实现
- textview 属性大全
- C++Primer &、*符号的多重定义问题
- 此博文记录前端开发中遇到的问题
- 工作3年的程序员应该具备什么技能
- qsort效率探究
- 关于Android原生集成5+webview,监听webview返回时,执行两次onkey方法问题的解决