零基础逆向工程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格式),然后双击打开,看是否能够使用。
零基础逆向工程16_C语言10_宏定义_头文件_内存分配_文件读写的更多相关文章
- 【编程基础】C语言常见宏定义
我们在使用C语言编写程序的时候,常常会使用到宏定义以及宏编译指令,有的可能比较常用,有的可能并不是很常用,是不是所有的C语言宏定义以及宏指令你都清楚呢? 指令 用途详细介绍 # 空指令,无任何效果 # ...
- 零基础逆向工程15_C语言09_位运算
1.汇编中的移位指令 算数移位指令 指令格式:SAL/SAR Reg/Mem, CL/Imm SAL(Shift Arithmetic Left):算数左移 SAR(Shift Arithmetic ...
- 零基础逆向工程12_C语言06_switch语句反汇编
12_C语言06_switch语句反汇编 switch语句反汇编 测试环境:VC++6.0 分支少于4的时候没有意义,编译器会生成类似if...else之类的反汇编,不超过三个分支,不会生成索引表. ...
- 零基础逆向工程14_C语言08_指针02_反汇编
1.指针数组 5: char* keyword[] = {"if", "for", "while", "switch"} ...
- 零基础逆向工程13_C语言07_指针01_反汇编
1."带*类型"的特征探测 宽度 在同一个平台下,任何指针变量的尺寸都是一样的(都等于系统字长),如在32位平台中任何类型指针宽度都是32位. 声明 1.带有* 的变量类型的标准写 ...
- 零基础逆向工程11_C语言05_结构体
结构体小结 结构体是按照分配的大小,局部变量会自动数据对齐 1字节对齐,省空间,但cpu查找效率低 4字节对齐,不省空间,但cpu查找效率高 VC6默认的结构对齐大小 项目右键-> settin ...
- 狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(2)
前文链接:狗屁不通的“视频专辑:零基础学习C语言(小甲鱼版)”(1) 小甲鱼在很多情况下是跟着谭浩强鹦鹉学舌,所以谭浩强书中的很多错误他又重复了一次.这样,加上他自己的错误,错谬之处难以胜数. 由于拙 ...
- C语言中宏定义(#define)时do{}while(0)的价值(转)
C语言中宏定义(#define)时do{}while(0)的价值 最近在新公司的代码中发现到处用到do{...}while(0),google了一下,发现Stack Overflow上早有很多讨论,总 ...
- c语言的预处理指令分3种 1> 宏定义 2> 条件编译 3> 文件包含
宏简介 1.C语言在对源程序进行编译之前,会先对一些特殊的预处理指令作解释(比如之前使用的#include文件包含指令),产生一个新的源程序(这个过程称为编译预处理),之后再进行通常的编译 所有的预处 ...
随机推荐
- u-boot.lds 链接脚本分析(hi3515)
目录:/u-boot_hi3515/board/hi3515v100 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm& ...
- BI 底座——数据仓库技术(Data Warehouse)
在开始喷这个主题之前,让我们先看看数据仓库的官方定义: 数据仓库(Data Warehouse)是一个面向主题的(Subject Oriented).集成的(Integrate).相对稳定的(Non- ...
- Linux命令总结_文件操作之cut
1.cut命令 语法格式 cut [-bn] [file] 或 cut [-c] [file] 或 cut [-df] [file],有以下几个选项 -b :以字节为单位进行分割.这些字节位置将 ...
- skb_store_bits() 和 skb_copy_bits()
int skb_copy_bits(const struct sk_buff *skb, int offset, void *to, int len); int skb_store_bits(c ...
- c程序实现unicode字符转utf-8字符
下面是一个unicode字符转换为utf-8的c程序实现: /* * ================================================================= ...
- gin-swagger包Api文档生成, Post请求参数无法接收, 问题修复。
Bug描述 FormData方式下,任意参数类型都只生成file参数类型. 问题重现 问题代码在这一行 github.com\swaggo\swag\operation.go : 131 line c ...
- SQL中的limit
SELECT * FROM employees ORDER BY hire_date DESC LIMIT 2,1; LIMIT m,n : 表示从第m+1条开始,取n条数据: LIMIT n : 表 ...
- 盛大游戏技术总监徐峥:Unity引擎使用的三种方式
在5月13日Unite 2017 案例分享专场上,盛大游戏技术总监徐峥分享了使用Unity引擎的三种方式,以下为详细内容: 大家好,我先简单介绍一下我自己,我是盛大游戏的技术总监徐峥.我今天想分享的主 ...
- SLAM的现在与未来
http://geek.csdn.net/news/detail/202128 作者:高翔,张涛,刘毅,颜沁睿. 编者按:本文节选自图书<视觉SLAM十四讲:从理论到实践>,系统介绍了视觉 ...
- c# new三种用法
前几天去家公司面试,有一道这样的题:写出c#中new关键字的三种用法,思前想后挖空心思也只想出了两种用法,回来查了下msdn,还真是有第三种用法:用于在泛型声明中约束可能用作类型参数的参数的类型,这是 ...