2017.9.19
2024.12.9
汇编
138
1 分钟
寄存器传参和堆栈传参
寄存器传参
MOV ECX,1
MOV EBX,2
CALL XX
MOV EAX,ECX
ADD EAX,EBX
RETN
堆栈传参 –ESP寻址
PUSH 1
PUSH 2
CALL XXX
MOV EAX,DWORD PTR SS:[ESP+8] //当内存中括号中包含ESP或者EBP的话 用SS
ADD EAX,DWORD PTR SS:[ESP+4]
RETN 8
堆栈传参 –EBP寻址
PUSH 1
PUSH 2
CALL XXX
PUSH EBP
MOV EBP,ESP
SUB ESP,10 //提升堆栈
MOV EAX,DWORD PTR SS:[EBP+8] //通过EBP获得参数 参数位置 +4
ADD EAX,DWPRD PTR SS:[EBP+0xC]
MOV ESP,EBP
POP EBP //恢复堆栈
2017.9.19
2024.12.9
汇编
437
1 分钟
什么是函数
函数就是一系列指令的几个
,为了完成某个会重复使用的特定功能
函数调用
用JMP
来执行函数
用CALL
来执行函数
函数的参数和返回值
通常情况下,会将函数的计算结果放到EAX寄存器中
……
2017.9.17
2024.12.9
汇编
281
1 分钟
EIP寄存器
EIP寄存器表示CPU下次执行的位置
JMP指令
JMP指令相当于给EIP寄存器赋值
JMP后面只能是32位的
……
2017.9.17
2024.12.9
汇编
331
1 分钟
什么是堆栈
程序启动的时候操作系统会给每个程序一块虚拟的4G内存当程序需要使用的时候必须要和操作系统申请内存
堆栈是程序的心脏,程序中需要用到的重要数据,都在堆栈中体现
……
2017.9.16
2024.12.9
汇编
1136
3 分钟
寄存器数量和容量有限,为了存储大量数据,所以我们需要内存
每个程序都会有自己的独立的4GB内存空间(
这里的内存其实是虚拟的,并不是真的给了程序4G内存,当程序读或者写这段内存的时候,操作系统才会把使用的内存映射到物理内存上
物理内存和内存条之间还有一层映射
……
2017.9.16
2024.12.9
汇编
877
2 分钟
标志寄存器 EFL
EFL是32位寄存器
其中的每一位,含义都是不同的
0x00000246 16进制
0000 0000 0000 0000 0000 0010 0100 0110 二进制
第十位(从下标开始算 从右往左):DF位
DF位为``的时候: MOVS 执行完毕之后 ESI和EDI的值会增加
DF位位1
的时候: MOVS 执行完毕之后 ESI和EDI的值会减少
……
2017.9.16
2024.12.9
汇编
488
1 分钟
1. MOV指令(赋值)
含义:前者被后者赋值
exp:
MOV EAX,0xFFFFFFFF
此时 EAX = 0xFFFFFFFF
指令格式:
MOV r/m8,r8
MOV r/m16,r16
MOV r/m32,r32
MOV r8,r/m8
MOV r16,r/m16
MOV r32,r/m/32
MOV r8,imm8
MOV r16,imm16
MOV r32,imm32
r – 通用寄存器
m – 内存
imm – 立即数
r8 – 8位通用寄存器
m8 – 8位内存
imm8 – 8位立即数
……
2017.9.16
2024.12.9
汇编
420
1 分钟
寄存器介绍
寄存器是什么
计算机在三个地方可以存数据
cpu
内存
硬盘
所谓寄存器,就是cpu中硬盘存储数据的地方
寄存器的大小
寄存器大小取决于cpu的位数
比如32位 那么cpu所提供的容器有三种 8位 16位 32位
如果64位 那么cpu所提供的容器有四种 8位 16位 32位 64位
……
2017.9.12
2024.12.9
CSharp
303
1 分钟
在Winform程序中有时候调试会通过Console.Write()方式输出一些信息,这些信息是在Visual Studio的输出窗口显示。
……