滴水逆向笔记(七)

1.ADC指令:带进位加法

我们将要执行adc al,5 ,此时我们把C0变为C1,接着

本该为08,结果却是09,这是由于在做adc加法运算时将C1借走了

二.SBB指令:带借位减法

这里也是改成了C1,接着执行 sbb al,2

 这里也是本该运算为7,结果为6

三、XCHG指令:交换数据

格式:XCHG  R/M,R/M/IMM   两边不能同时为内存  宽度要一样

接着执行XCHG AL,CL

两者确实交换了数据

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

MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]            简写为:MOVSB

MOVS WORD PTR ES:[EDI],WORD PTR DS:[ESI]        简写为:MOVSW

MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]   简写为:MOVSD

例子:

接着执行MOVSD

 这里将内存编号001DD60存储的数据拷贝到001DD5C中

这里ESI和EDI的存储的数据都+4

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

STOS BYTE ES:[EDI]       STOSB

STOS WORD ES:[EDI]     STOSW

STOS DWORD ES:[EDI]  STOSD

例子:

这里刚执行完mov eax,12124545 ,接下来注意edi对应的内存编号存储的数据

 这里EDI原来对应的内存编号存储的数据变为了12124545,然后EDI的内存编号+4变成了001DDF64(如果DF标志位值为1,EDI的对应的内存编号-4)

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

例子:

执行完mov ecx,2后,我们接着执行rep stosd

从图中可以看出,这是连续执行了两次STOSD

猜你喜欢

转载自blog.csdn.net/m0_51295934/article/details/122615480