科锐课堂笔记:201738 内存结构与变量作用域

    xiaoxiao2021-03-25  132

      任何外部输入都要检查长度,不作判断处理会有缓冲区溢出的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属性的部分会发生错误异常。

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

    转载请注明原文地址: https://ju.6miu.com/read-3845.html

    最新回复(0)