任何外部输入都要检查长度,不作判断处理会有缓冲区溢出的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