随笔分类 -  逆向工程

摘要:学无止尽,积土成山,积水成渊-《C++反汇编与逆向分析技术揭秘》 读书笔记。马上就要出差了,回来后接着写吧。一、概述 菱形继承是最复杂的对象结构,菱形结构会将单一继承与多重继承进行组合。菱形继承示意如下:class A;class B : virtual public A;class C : virtual public A;class D : public B, public C; 其中菱形继承中使用了虚继承机制。虚继承定义为:在继承定义中包含了virtual关键字的继承关系。虚继承的提出就是为了解决多重继承。如果不采用虚继承,则D类对象会保存基类A的两份副本,从导致D类对象使用基类A成.. 阅读全文
posted @ 2013-12-09 17:24 大兔子_快跑 阅读(615) 评论(0) 推荐(0) 编辑
摘要:学无止尽,积土成山,积水成渊-《C++反汇编与逆向分析技术揭秘》 读书笔记一、单类继承在父类中声明为私有的成员,子类对象无法直接访问,但是在子类对象的内存结构中,父类私有的成员数据依然存在。C++语法规定的访问限制仅限于编译层面,在编译过程中进行语法检查,因此访问控制不会影响对象的内存结构。子类未提供构造函数或析构函数,而父类却需要构造函数与析构函数时,编译器会为子类提供默认的构造函数与析构函数。但是子类有构造函数,而父类不存在构造函数,且没有虚函数,则编译器不会为父类提供默认的构造函数。1. 内存结构:①先安排父类的数据②后安排子类新定义的数据说明:基于上述的内存排列方法,即父类数据成员被安 阅读全文
posted @ 2013-12-06 15:23 大兔子_快跑 阅读(2053) 评论(3) 推荐(2) 编辑
摘要:学无止尽,积土成山,积水成渊-《C++反汇编与逆向分析技术揭秘》 读书笔记在C++中,使用关键字virtual声明为虚函数。虚函数地址表(虚表)定义:当类中定义有虚函数时,编译器会把该类中所有虚函数的首地址保存在一张地址表中,即虚函数地址表。虚表信息在编译后被链接到执行文件中,因此所获得的虚表地址是一个固定的地址。虚表中虚函数的地址排列顺序依据虚函数在类中的声明顺序而定。虚表指针同时编译器还会在类的每个对象添加一个隐藏数据成员,称为虚表指针,保存着虚表的首地址,用于记录和查找虚函数。虚表指针的初始化是通过编译器在构造函数中插入代码实现的。由于必须初始化虚表指针,编译器会提供默认的构造函数。虚函 阅读全文
posted @ 2013-12-04 09:38 大兔子_快跑 阅读(1315) 评论(0) 推荐(0) 编辑
摘要:学无止尽,积土成山,积水成渊-《C++反汇编与逆向分析技术揭秘》 读书笔记对象的内存布局一般计算公式:对象内存大小 = sizeof(数据成员1)+ sizeof(数据成员2) +. .. + sizeof(数据成员n)若类中没有继承和虚函数的定义,还有三种特殊情况考虑:空类、内存对齐、静态成员函数。空类:空类的长度为1字节,如果不占用字节的话,this指针会悬空。考虑到类可以仅有成员函数,没有数据成员。内存对齐:在VC中,类和结构体中的数据成员是根据在类或结构中出现的顺序来依次申请空间的,由于内存对齐原因,可能不会连续的排列,数据成员之间可能有间隙。静态变量:与静态全局变量类似,存在的位置和 阅读全文
posted @ 2013-12-03 11:54 大兔子_快跑 阅读(1600) 评论(0) 推荐(0) 编辑
摘要:最近工作需要逆向工程的技术,醒悟自己以前好高骛远,误以为拿来主义即可,许许多多基础知识并不扎实,弄得焦头烂额。千里之行始于足下,记录一下自己的前行脚步。参考链接:http://www.feiesoft.com/asm/03-4.html汇编指令组成: 操作码:规定所要执行的操作类型操作数:所要处理的数据或数据的位置信息在操作数部分通常不是直接给出操作数的数据本身,而是给出该数据的位置信息,如何获得数据的方式称为寻址方式。例如:指令 MOV AX,1234H指令里有两个操作数,按照指令中所处的位置,将前者称为目的操作数,后者称为源操作数。该指令的作用是把数据1234H传送到AX中。源操作数是“立 阅读全文
posted @ 2013-11-29 10:47 大兔子_快跑 阅读(1241) 评论(0) 推荐(0) 编辑