2018.1.12
更新 2026.7.23 C-lang 221 字· 1 分钟 “*”的几种用途 乘法运算符
int x = 1; int y = 2; int z = x * y;
定义新的类型
char x; char* x;
取值运算符
指针类型的变量 int* a =(int*)1; printf("%x \n",(a +1)); 10: int a =(int*)1; 00401028 mov dword ptr …
2018.1.1
更新 2026.7.23 C-lang 846 字· 2 分钟 数组的定义 数组定义的格式:
数据类型 变量名[常亮]; //为什么不能使变量? //因为在声明的时候 编译器需要知道数组的长度,分配相应大小的内存 数组的初始化 方式1:
int arr[10] = {0,0,0,0,0,0,0,0,0,0};
方式2:
int arr[] = {1,2,3,4,5,6,7,8,9,10};
对应汇编
#include …
2017.9.21
更新 2026.7.23 汇编 932 字· 2 分钟 之前可以修改EIP寄存器的指令
JMP,CALL,RETN
所有JCC指令的动作->根据标志寄存器修改EIP的值
标志寄存器 EFLAGS CF(bit 0)[Carry flag] C位 若算术产生的结果在最高有效位(most-significant bit)发生进位或者借位则将其置1 反之清零
这个标志通常用来指示无符号证书运算的溢出状态
2017.9.19
更新 2026.7.23 汇编 437 字· 1 分钟 什么是函数 函数就是一系列指令的几个,为了完成某个会重复使用的特定功能
函数调用 用JMP来执行函数 用CALL来执行函数 函数的参数和返回值 通常情况下,会将函数的计算结果放到EAX寄存器中
EAX 通常用来放返回值
简单的加法函数
ADD ECX,EDX //传参 MOV EAX,ECX //传结果到EAX中 RETN 堆栈传参 如果参数很多怎么办?10 …
2017.9.17
更新 2026.7.23 汇编 281 字· 1 分钟 EIP寄存器 EIP寄存器表示CPU下次执行的位置
JMP指令 JMP指令相当于给EIP寄存器赋值
JMP后面只能是32位的
指令格式:
MPV EIP,寄存器/立即数/内存
简写:JMP 寄存器/立即数/内存
JMP 0x00FF19 -> MOV EIP,0X00FF19 JMP EAX -> MOV EIP,EAX JMP DWORD PTR …
2017.9.17
更新 2026.7.23 汇编 331 字· 1 分钟 什么是堆栈 程序启动的时候操作系统会给每个程序一块虚拟的4G内存当程序需要使用的时候必须要和操作系统申请内存
堆栈是程序的心脏,程序中需要用到的重要数据,都在堆栈中体现
就是一块特殊的内存,操作系统在程序启动的时候已经分配好的,供程序执行时使用 和数据结构的堆栈无关 查看堆栈 正常内存使用从小地址往大地址使用,堆栈中从大地址往小地址使用
当堆栈用完了就会出现 …
2017.9.16
更新 2026.7.23 汇编 877 字· 2 分钟 标志寄存器 EFL EFL是32位寄存器
其中的每一位,含义都是不同的
0x00000246 16进制 0000 0000 0000 0000 0000 0010 0100 0110 二进制 第十位(从下标开始算 从右往左):DF位
DF位为``的时候: MOVS 执行完毕之后 ESI和EDI的值会增加
DF位位1的时候: MOVS 执行完毕之后 ESI和 …
2017.9.16
更新 2026.7.23 汇编 420 字· 1 分钟 寄存器介绍 寄存器是什么 计算机在三个地方可以存数据
cpu 内存 硬盘 所谓寄存器,就是cpu中硬盘存储数据的地方
寄存器的大小 寄存器大小取决于cpu的位数
比如32位 那么cpu所提供的容器有三种 8位 16位 32位
如果64位 那么cpu所提供的容器有四种 8位 16位 32位 64位
05年后的电脑cpu几乎都是64位的。