11.IDA-this指针
所有非静态C++成员函数都使用this指针。任何时候调用这样一个函数,this都被初始化,指向用于调用该函数的对象.
最好是把this看成是传递到所有非静态成员函数的第一个隐藏参数.
this存放的地方
1.Visual C++利用thiscall调用约定,并将this传递到ECX寄存器中
2.GNU g++编译器则把this看做是函数的第一个(最左边)参数,并在调用该函数之前将用于调用函数的对象的地址作为最后一项压入栈中
从逆向工程的角度看,在调用函数之前,将一个地址转移到ECX寄存器中可能意味着两件事情
1.该文件使用Visual C++编译
2.该函数是一个成员函数
如果同一个地址被传递给两个或更多函数,我们可以得到结论,这些函数全都属于同一个类层次结构。
如果发现一个函数向其他函数传递this指针,则这些函数可能和传递this的函数属于同一个类
如下示例:
class A
{
public:int fun(){return 1;}int Lk(){return fun();}
};
int _tmain(int argc, _TCHAR* argv[])
{A a;a.Lk();return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
对应IDA反汇编如下:
附:
构造函数并未指定返回类型,但由Visual C++生成的构造函数实际上把this指针存在EAX寄存器中并返回
11.IDA-this指针相关推荐
- C++新特性探究(18.3):C++11 weak_ptr智能指针
C++11 weak_ptr智能指针 1.weak_ptr指针的创建 2.weak_ptr模板类提供的成员方法 例2: 程序执行结果为: 2 1 10
- C++新特性探究(18.2):C++11 unique_ptr智能指针详解
C++11 unique_ptr智能指针 作为智能指针的一种,unique_ptr 指针自然也具备"在适当时机自动释放堆内存空间"的能力.和shared_ptr指针最大的不同之 ...
- C++新特性探究(18.1):C++11 shared_ptr智能指针
在实际的 C++ 开发中,我们经常会遇到诸如程序运行中突然崩溃.程序运行所用内存越来越多最终不得不重启等问题,这些问题往往都是内存资源管理不当造成的.比如: 有些内存资源已经被释放,但指向它的 ...
- c++11中智能指针的原理,使用,实现
文章目录 理解智能指针的原理 智能指针的使用 shared_ptr的使用 unique_ptr的使用 weak_ptr的使用 循环引用 指针指针的设计和实现: 理解智能指针的原理 c++程序设计中使用 ...
- c++ 返回智能指针_C++核心指南(17) I.11 禁止使用指针(T*)或引用(T)来转移所有权...
I.11: 永远不要使用原始指针(T*)或引用(T&)来转移所有权 原因 如果对调用者或被调用者是否拥有对象有任何疑问,就会发生泄漏或过早析构. 示例 考虑: X* compute(args) ...
- c++11之智能指针
目录 一,什么是智能指针 二,共享的智能指针shared_ptr 1. shared_ptr的初始化 3. 指定删除器 三,独占的智能指针unique_ptr 1. 初始化 2. 删除器 四, 弱引用 ...
- [C++11]共享智能指针shared_ptr指定删除器
当智能指针管理的内存对应的引用计数变为 0 的时候,这块内存就会被智能指针析构掉了.另外,我们在初始化智能指针的时候也可以自己指定删除动作,这个删除操作对应的函数被称之为删除器,这个删除器函数本质是一 ...
- 『C++11』智能指针 匠心之作
优缺点: 智能指针由原始指针的封装,优点是可以自动分配内存,不用担心内存泄漏问题. 用于解决独占/共享所有权指针的释放,传输等问题. 但是没有原始指针方便. 目录 一. unique_ptr 独占指针 ...
- C++11 unique_ptr智能指针详解
文章目录 0.应用场景 1.初始化方式 2.常用操作 3.例子 例子1 创建unique_ptr并以引用形式传递给函数 例子2 用vector管理unique_ptr 例子3 unique_ptr作为 ...
- c++新特性11 (9)智能指针一”_Compressed_pair类“
功能类似std::pair类,但是是派生关系, key 类有一个value对象 template <class _Ty1, class _Ty2, bool = is_empty_v<_T ...
最新文章
- 快速滚动_方老师教滚动快速作文
- [Android] Gradle 安装
- ACL 2020 | 基于稠密段落检索的开放域问答系统技术
- 【微信小程序】给绑定事件传参数
- 最新Angular2案例rebirth开源
- php中等3秒再跳转,跳转和重定向
- 搞不定的C语言--extern的作用
- ipmitool介绍_ipmitool命令行使用详解
- python 僵尸进程孤儿进程
- 《信号与线性系统分析》学习心得
- 实验一:marlab安装调试
- Linux性能优化(十三)——CPU性能测试
- 【2019-06-27】现在不杂
- 计算机团队霸气名称大全,霸气吃鸡游戏团队名字大全
- 计算机网络简单理解总结
- InfoPath 2007表单应用
- Opensource Licenses
- 聊一聊:苹果发布新款M2 MacBook Air,macOS 13上线
- AI原创生成器1.3版-9大改动
- 常见的互联网名词 O2O、B2B、C2C等
热门文章
- SpringCloud(Gateway网关跨域)
- 三种实现分布式解决方案原理分析
- 判断ipad还是安卓_?谷歌认输,iPad或成唯一赢家,安卓平板路在何方?
- tableau示例超市数据在哪儿_超市运营分析 -- Tableau 实战
- NIO--Channel
- java 排名相同_Java程序员十年面试经验,助你成为offer收割机
- 技巧:在Silverlight 2应用程序中切换用户控件
- 人工智能,不止于技术的革命--WOT2017全球创新技术峰会开幕
- windows下oracle数据库自动备份脚本
- 使用ToughMySQL为ToughRADIUS系统提供数据存储