3.7 滴水3

1.详解进位与溢出
2.指令介绍
ADC指令:带进位加法

格式:ADC  R/M,R/M/IMM   两边不能同时为内存  宽度要一样													
													
													
ADC AL,CL													
													
ADC BYTE PTR DS:[12FFC4],2													
													
ADC BYTE PTR DS:[12FFC4],AL													

SBB指令:带借位减法

格式:SBB  R/M,R/M   两边不能同时为内存  宽度要一样													
													
													
SBB AL,CL													
													
SBB BYTE PTR DS:[12FFC4],2													
													
SBB BYTE PTR DS:[12FFC4],AL													

XCHG指令:交换数据

格式:XCHG  R/M,R/M/IMM   两边不能同时为内存  宽度要一样													
													
													
XCHG AL,CL													
													
XCHG DWORD PTR DS:[12FFC4],EAX													
													
XCHG BYTE PTR DS:[12FFC4],AL													

MOVS指令:移动数据 内存-内存

BYTE/WORD/DWORD													
													
MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]					简写为:MOVSB								
													
MOVS WORD PTR ES:[EDI],BYTE PTR DS:[ESI]					简写为:MOVSW								
													
MOVS DWORD PTR ES:[EDI],BYTE PTR DS:[ESI]					简写为:MOVSD								
													
例子:													
													
MOV EDI,12FFD8													
MOV ESI,12FFD0													
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]													
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]							观察EDI的值						
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]													
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]													
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]													
													
修改标志寄存器中D位的值,然后在执行下面的指令:													
													
MOV EDI,12FFD8													
MOV ESI,12FFD0													
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]													
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]													
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]							观察EDI的值						
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]													
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]													

STOS指令:讲Al/AX/EAX的值存储到[EDI]指定的内存单元

STOS BYTE PTR ES:[EDI]			简写为STOSB										
													
STOS WORD PTR ES:[EDI]			简写为STOSW										
													
STOS DWORD PTR ES:[EDI]			简写为STOSD										
													
													
													
MOV EAX,12345678													
MOV EDI,12FFC4													
STOS BYTE PTR ES:[EDI]				观察EDI的值									
STOS WORD PTR ES:[EDI]													
STOS DWORD PTR ES:[EDI]													
													
													
修改标志寄存器中D位的值,然后在执行下面的指令:													
													
MOV EAX,12345678													
MOV EDI,12FFC4													
STOS BYTE PTR ES:[EDI]				观察EDI的值									
STOS WORD PTR ES:[EDI]													
STOS DWORD PTR ES:[EDI]													

REP指令:按计数寄存器 (ECX) 中指定的次数重复执行字符串指令

MOV ECX,10													
													
REP MOVSD													
													
REP STOSD

3.一些指令 这些指令用到即查
这些 最好好像是提升堆栈
4.jcc指令
1.JMP 地址
修改eip的值
mov eip,地址
2.call 地址
push b 下一行运行代码的地址
mov eip,地址
3.call~ret
lea esp,esp+4
mov eip,esp-4

2.比较指令
1.cmp指令

该指令是比较两个操作数,实际上,它相当于SUB指令,但是相减的结构并不保存到第一个操作数中。

只是根据相减的结果来改变零标志位的,当两个操作数相等的时候,零标志位置1。
一般用来判断是否想等 然后来跳转

2.test指令

指令格式:TEST R/M,R/M/IMM

该指令在一定程序上和CMP指令时类似的,两个数值进行与操作,结果不保存,但是会改变相应标志位.

与的操作表项如下:

1 and 1 = 1

常见用法:用这个指令,可以确定某寄存器是否等于0。

TEST EAX,EAX 观察Z位

但是如果EAX的二进制某些位为1的话,那么运算的结果就不为零。

![](https://img2023.cnblogs.com/blog/3001071/202303/3001071-20230307221707625-51895874.png)

跳转神图

作业 了解跳转 如何改变标志位

熟悉每一个指令
1.详解进位与溢出
2.堆栈

1.C语言函数介绍
函数:

	计算机的函数,是一个固定的一个程序段,或称其为一个子程序,它在可以实现固定运算功能的同时还带									
有一入口和一个出口,所谓的入口,就是函数所带的各个参数,我们可以通过这个入口,把函数的参数值代入子程序,										
供计算机处理,所谓出口,就是指函数的计算结果,也称为返回值,在计算机求得之后,由此口带回给调用它的程序。


1.先进后出
2.向低地址扩展

堆栈为什么需要平衡销毁
为什么保持堆栈平衡
为什么要保证堆栈平衡(保证数据环境)

程序在读写数据的时候是通过地址查找的,如果函数调用之前的堆栈与函数调用之后的堆栈不一致,就可能导致找不到数据或找到的数据错误,那么久有可能导致程序崩溃.

posted @   逆向狗  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示