首页 > 编程语言 > 详细

C++逆向分析(二)

时间:2021-04-26 23:35:17      阅读:21      评论:0      收藏:0      [点我收藏+]

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,试了一下,发现修改失败。。

C++逆向分析(二)

原文:https://www.cnblogs.com/dddddblog/p/Creverse2.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!