C++逆向分析(二)

C++逆向分析(二)

数据类型

布尔类型

​ 占用1个字节,实际案例中难以将布尔类型数据还原成源码,用于真假判断。

地址、指针和引用

地址:只有变量才存在地址,常量没有地址(const 定义的伪常量有),一般地址用十六进制表示。在32位操作系统下,一般用32位二进制数表示,即4个字节,8个16进制数。

指针:定义,什么数据类型均可定义指针,如void *,指针保存了变量在内存中的地址,指针的类型用来解释地址,如从地址起始到什么地方结束,如何结束(如string的'\0')。如**char *s=&a;** 说明s就是变量a的地址, * s就是变量a的值。那么**char**ss=&s;**又是如何表现的呢,原来指针本身也会被分配内存,内存中存着&a,ss中存着&s即s被分配空间的首地址char*ss=&s;是错误的)。

引用:使用type*,type定义,如char&s=a;定义时就必须初始化,实际上相当于变量的别名,对它的所有操作,本质上都是在操作它表示的变量。

指针和地址的区别

指针 地址
变量,保存地址 常量,内存标号
可修改,再次保存其他变量 不可修改
可以通过数据类型解释地址 不能仅通过地址进行取地址操作

指针偏移:对于指针char*s;s++表示偏移一个字节,地址加1,而对于int型的指针,则地址加4。

指针相减有意义,但要求相同类型,可以计算两个地址之间元素的个数,结果为有符号整数。指针相加无意义。

常量

​ 定义的两种形式:宏机制#define的真常量和const定义的伪常量。const`有利于增加程序的健壮性。#define由系统判断是否被修改字符串定义在文件只读数据区,数据常量编译为立即数,const定义的常量实际上还是变量,根据作用域决定所在位置和属性,编译器会检查修改报错,修改方法:

	const int nConst=5;
	int *pConst=(int *)&nConst;
	*pConst=6;

​ hah,试了一下,发现修改失败。。

posted @ 2021-04-26 17:55  ddddd1234654732  阅读(146)  评论(0)    收藏  举报
Live2D