零基础逆向工程16_C语言10_宏定义_头文件_内存分配_文件读写

#define

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

如:#define TRUE 1
注意事项:
1.之作字符序列的替换工作,不作任何语法的检查
2.如果宏定义不当,错误要到预处理之后的编译阶段才能发现

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

如:#define MAX(A, B) ((A) > (B)?(A):(B))
代码 x = MAX(p, q)将被替换成 y = (p) > (q)? (p):(q)
注意:
1.宏名标识符与左圆括号之间不允许有空白符,应紧接在一起
2.宏与函数的区别:函数分配额外的堆栈空间,而宏只是替换
3.为了避免出错,宏定义中给形参加上括号
4.末尾不需要分号
5.define可以替代多行的代码,记得后面加 \,如:

#define MALLOC(n, type)\
                    ((type*)malloc((n)*sizeof(type)))

头文件

分别写在不同的文件中

重复包含的问题

#ifndef (XXX)
#define XXX

内存分配与释放

int* ptr;  //声明指针

//在堆中申请内存,分配128个int
ptr = (int*)malloc(sizeof(int)*128);

//无论申请的空间大小 一定要进行校验 判断是否申请成功
if (ptr == NULL)
{
	return 0;
}

//初始化分配的内存空间
memset(ptr, 0, sizeof(int)*128);

//使用
*(ptr) = 1;

//使用完毕 是否申请的堆空间
free(ptr);

//将指针设置为NULL
ptr = NULL;

文件读写相关函数

1.fopen函数

2.fseek函数

3.ftell函数

4.fclose函数

自我检测

1.用十六进制文本编辑器,打开一个记事本的.exe文件,再打开在内存中的记事本进程,记录下这两个文件的不同。
2.将记事本的.exe文件读到内存,并返回读取后在内存中的地址
3.将内存中的数据存储到一个文件中,(.exe格式),然后双击打开,看是否能够使用。

posted @ 2017-09-10 14:58  flatcc  阅读(427)  评论(0编辑  收藏  举报