Month: July 2018

《C++反汇编与逆向分析技术揭秘》读书笔记

第一章  准备工作 第二章 基本数据类型的表现形式 小尾方式 小尾方式存放的是以字节为单位,按照数据类型长度,低数据位排放在内存的低端,高数据排放在内存的高端,如0x12345678将会存储为 78 56 34 12,相应的,在其他计算机体系中也有“大尾方式”,其数据和“小尾方式”相反,高数据位存放在内存的高端。   补码 补码的规则是用0减去这个数的绝对值,也可以简单表达为对这个数值取反+1.   浮点数 用于存储实数的类型,又可以分为单精度浮点型(float)和双精度浮点型(double)。在处理浮点类型时,有专门的浮点寄存器,和专用的浮点汇编指令。   指针的概念有两点较为关键: 1.指针本质是存储地址的变量。 2.指针自身的加减法与指针指向的变量类型相关。   引用类型也可以认为是C++通过追加规则,对指针的封装减少不安全操作的可能。   函数 函数一般用来实现某一专门运算目的而特别编写的,具有通用性的代码块。从汇编角度来说,通常完整的函数调用过程可以被解释成: 1.调用阶段:压入参数、函数返回地址、 2.执行阶段:保存现场,用esp指向栈顶,ebp指向栈底。进行一系列操作后,还原现场。ret返回。 3.获取结果:将eax或者保存在其他内存或寄存器中的结果取出。   其中,为了平衡堆栈,以及确认参数的平衡者,参数的传递方式,有了函数的调用约定。   第七章 变量在内存中的位置和访问方式 变量是指一段内存块,有起始地址,占用内存空间的大小,还有计算机以何种形式读写变量中的数据。 全局变量特征 – 所在地址为数据区,生命周期与所在模块一致。 – 使用立即数简介访问。 局部变量特征 – 所在地址为栈区,生命周期与所在的函数作用域一致。 – 使用ebp或esp访问。 全局静态变量和全局变量类似,只是全局静态变量只能在本文件内使用。全局静态变量等价于编译器限制外部源码文件访问的全局变量。 系统为局部静态变量设置一个标志,标志占一个字节。以此判断局部静态变量是否已经被初始化。 在c/c++中,使用malloc与new实现堆空间的申请,返回的数据便是申请的堆空间地址。 第九章 结构体和类 This 指针,是指向类变量的自身的指针。 编译器在成员函数中隐藏了This指针,调用类的成员函数时,会传入类变量的首地址。 thiscall 方式要点分析: lea […]