文章目录
#基本数据类型
反汇编一个基本的知识点就是掌握数据类型,包括整形和浮点类型在内存中是如何存放的,这里要知道原码,反码,补码,以及IEEE浮点标准,这部分与处理器架构无关,《C++反汇编与逆向分析技术揭秘》 第二章已经有详细讲解,这里略过。
在此推荐下我曾经写过的一个 进制转换的工具 来学习数据类型 。

Cpp中的引用
C++为了简化指针操作,对其进行了封装,产生了引用类型。实际上引用类型就是指针类型,只不过用于存放地址的内存空间对使用者而言是隐藏的。下面看一段代码:
#include <iostream>
using namespace std;
void Add(int &nVar)
{
nVar ++;
}
int main()
{
int nVar = 0x12345678;
int &nVarType = nVar;
Add(nVar);
cout << &nVarType << endl;
cout << &nVar << endl;
cout << hex << nVar << endl;
nVarType ++;
cout << hex << nVar << endl;
}
编译$ arm-linux-c++ -static 1.c
之后放到上一节的qemu-arm虚拟机中跑下运行结果如下:
用 arm-linux-objdump -D -m arm
看下反汇编结果:
000091fc <_Z3AddRi>:
91fc: e52db004 push {fp} ; (str fp, [sp, #-4]!)
;这里来到子函数add,首先push fp保存栈帧,相当于x86下的EBP寄存器
9200: e28db000 add fp, sp, #0
9204: e24dd00c sub sp, sp, #12 ;开辟一个栈帧
9208: e50b0008 str r0, [fp, #