汇编中用到的C语言知识点复习

全局变量和局部变量
全局变量:构建完成后 值不会再变 再次打开依然不变 CE为绿色
局部变量:每次构建值都是不同的 CE中为黑色 是函数内部申请的
函数不执行 局部变量没有空间 只能在函数内部使用
其他函数无法使用局部变量 因为一旦该函数执行完 局部变量就消失了

C语言的结构体 类似于面向对象语言的类

提高程序效率的两个方法:
字节对齐:数据存储的地址必须是数据长度的整数倍 (int 4字节 地址必须是8的整数倍)
如果是结构体 则以其中最宽的成员为起始位置
本机宽度:char类型数据单字节 要存储11个char 则会开辟12个字节来存储数据 4的倍数 运算更快

指针类型:
任何类型加上 “ “ 就是指针类型
指针的宽度 无论什么类型 无论几个
永远都是四个字节
当指针类型进行增、减时 增、减的长度为 砍掉一个星后数据的长度加的数
举例:char** 进行增 砍掉一个星为char
为指针类型 长度为4 所以自增量为4
char* 砍掉一个星为char 长度为1 所以自增量为1
指针类型 可以加减 不能乘除(编译约定 否则会编译报错)
指针可以进行比较 指针是无符号数 所以使用jba指令

全局变量 地址早已分配好 始终不变 直接压栈 当成立即数! 一般汇编使用PUSH
局部变量 地址是不确定的 所以要根据EBP寻址后放入EAX再压栈 汇编中存入缓冲区 EBP-4x

& 取地址符 返回结果加一个*

  • 取值运算符 使用对象必须是指针类型 返回结果是值 去掉一个*

字符串定义格式:char* x = “ABCDE”;
x为指针 指向存储“ABCDE”的常量区

数组指针:
//int* p2 = arr; //int* 指针类型
//int* p3 = (int*)&arr; //int(*)[10] 数组指针类型

int(*px1) [5];		//1维数组指针 宽度5
char(*px2) [3];		//1维数组指针 宽度3
int(*px3) [2][2];	//2维数组指针	
char(*px4) [3][3][3];	//3维数组指针

//本质上 就是指针 3维数组指针可以指向一维数组 反之也可
//进行加减操作时 与普通类型的指针相似 去掉一个星看宽度
px为指针名称

函数指针:

//定义函数指针变量
int (__stdcall *pFun) (int, int, int, int, int);

//函数指针变量赋值
pFun = (int (__stdcall *) (int, int, int, int, int))0x76F6106;

函数指针不能做运算 因为砍掉一个*以后就是一个函数 长度不确定
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EricFang0001

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值