科锐课堂笔记:2017/3/8 内存结构与变量作用域

  任何外部输入都要检查长度,不作判断处理会有缓冲区溢出的BUG。


  在程序中添加花指令可使反汇编阅读性变差,花指令可以理解成干扰代码,把一条简单的指令转化成多条运算结果等价的代码,一些基本的逻辑运算公式如下:

	X or 1 = 1;
	X or 0 = X;

	X and 1 = X;
	X and 0 = 0;

	X xor 1 = not X;
	X xor 0 = X;

	X or notX = 1;
	X and notX = 0;


  VC6里函数类型省略默认为int,而C++规范默认类型为void。


  程序内存结构图:
 
  总体上可分为代码、数据、栈、堆四个部分。
  内存基本属性有可读(R)、可写(W)、可执行(E)、共享(S)四种。
  代码段属性是RE。数据段中存放着全局变量、静态变量以及常量,有初始化的和未初始化的,除了常量属性为R(在初始化部分中)其余都为RW。另外栈和堆的内存属性也都是RW。
  微软早期是不检查可执行(E)属性的,代码无论放在哪段都可执行。从XP后增加了数据执行保护(DEP)功能,对保护的程序如果跳转到没有E属性的部分会发生错误异常。


变量作用域:(只针对编译器而言)
  进程作用域,如全局变量(对全局变量要慎用)。
  文件作用域。
  函数作用域,如参数和局部变量。
  块作用域,指花括号内。
  另外作用域不等同于生命周期,作用域小于或等于生命周期。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值