失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > [逆向]汇编movs stos rep指令讲解

[逆向]汇编movs stos rep指令讲解

时间:2018-09-25 18:40:55

相关推荐

[逆向]汇编movs stos rep指令讲解

一movs指令

movs/movsb/movsw/movsd 数据从字符串移到字符串

movs 目标操作数,源操作数,其中目标操作数m8/m16/m32的[edi],源操作数m8/m16/m32的[esi],ESI和EDI地址要不一样

movs m8,m8 -->movsb

movs m16,m16 --->movsw

movs m32,m32--->movsd

movsd就是先给值,再分别加4,分解就相当于以下这三条指令:

movs dword ptr ds:[edi],dword ptr ds:[esi]

add esi,0x4

add edi,0x4

来看例子:

如图所示,movsd运行前,注意观察ESI EDI以及他们地址分别对应内存的内容

上图是 movsd运行之后的截图,把esi地址对应内存数据给了edi地址对应的内存内容,然后esi和edi各自加了4.

同理,如果是movsw那么先给值(两个字节),再各自加2,movsb那么先给值(一个字节),再各自加1.这里就不多赘述,原理过程和movsd差不多.

二rep指令

rep是重复指令,依赖ecx(计数寄存器),重复了多少次

有了这个指令,上面的例子就可以改成下面这样:

注意, 到这一步了一定要按alt+8进入反汇编窗口,按f11单步步入,按一次ecx就自减1,

直到ecx=0结束

三stos指令

STOS/STOSB/STOSW/STOSD - 存储字符串

stos 目标操作数(源操作数是隐式的默认的al/ax/eax),目标操作数为内存[edi]

如图所示,stosd执行之前,注意观察红框部分,

上图是stosd执行之后,执行前后对比可得出,stosd是把eax的值存储到edi所对应地址的内存里面,然后edi再加4,相当于mov dword pti ds:[edi],eax,add edi,0x4,同理可得出STOSW是先给值(两个字节)再加2,STOSB是先给值(一个字节)再加1.同样stos指令也可和rep搭配使用,方法和上面的movs指令类似,这里就不过多赘述了

今天的文章就到这里了,如果有任何不明白的地方欢迎与我交流,我必定知无不言。这篇文章也花了一定的心血,喜欢的小伙伴可以点赞关注哦。感激不尽!

如果觉得《[逆向]汇编movs stos rep指令讲解》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。