PE学习前的一些小知识

位移运算

1、与运算 &

2、或运算 |

3、非运算 ~

4、异或运算 ^

5、移位运算 <<  >>

 

内存分配,文件读写

宏定义说明

一、无参数的宏定义的一般形式为:# define 标识符 字符序列

如:# define TRUE 1

    # define PI 3.1415926

注意事项:

1、只作字符序列的替换工作,不作任何语法的检查

2、如果宏定义不当,错误要到预处理之后的编译阶段才能发现

二、带参数宏定义:#define 标识符(参数表)字符序列

# define MAX(A,B) ((A) > (B)?(A):(B))

代码 x= MAX( p, q)将被替换成 y=((p) >(q)?(p):(q)

注意:

1、宏名标识符与左圆括号之间不允许有空白符,应紧接在一起.

2、宏与函数的区别:函数分配额外的堆栈空间,而宏只是替换.

3、为了避免出错,宏定义中给形参加上括号.

4、末尾不需要分号.

 

头文件

#include "stdafx.h"

其实就是包含了其他程序写的代码,自己可以调用

 

在内存分配中,我们可能不知道自己到底需要多大的空间,这时需要用到malloc

而使用malloc,是在堆里面分配的,堆是需要使用结束后自己告诉系统,这块空间我不用了

 

 

 

 

 

PE文件的两种状态

一种是在硬盘里的,没有运行

一种是已经运行起来,内存里已经有了

硬盘对齐,内存对齐

以前技术不足,为了节省硬盘空间,使数据存储在硬盘中的时候,节与节之间的间隙比较小,而当把数据放入内存的时候,间隙又恢复了,所以有些程序:硬盘对齐:200h  内存对齐:1000h

但有些程序是现在开发的,技术比较好,硬盘内存对齐都是1000h

但是为什么要有分节呢,因为考虑到多开的概念

就相当于QQ开多个小号,每一个QQ都有一些相同的部分,只可读不可写,当我们使用小号时,就可以不改变这一部分,而只需要重新在内存里创建自己可以操控的可读可写部分

 

 

联合体

union Student

{

    int x;

    int y;

};

这样Student作为类型名

union

{

    int x;

    int y;

} Student ;

这样Student直接作为变量,类型是匿名的

比如我们要存储学号和身份证号,但我们存一个就可以了,就可以用联合体

posted @ 2021-03-29 20:59  Punished  阅读(81)  评论(0编辑  收藏  举报