stosb,stosw,stosd区别和功能解读

来源:互联网 发布:linux 编辑文本命令 编辑:程序博客网 时间:2024/04/30 04:59
 在vs2013下的控制台运行如下代码 
#include "stdafx.h"void fun(int x, int y, int z, int c){int b =x + y + z + c;}int _tmain(int argc, _TCHAR* argv[]){                                                //这个位置下个断点(就是{前点一下)执行 然后按alt+8进入反汇编 按F11单步执行fun(1, 2, 3, 4);                         return 0;}

首先会出现这段代码:
一个简单的主程序中含有的反汇编代码
push        ebp   mov         ebp,esp   sub         esp,0C0h   push        ebx   push        esi   push        edi   lea         edi,[ebp-0C0h]   mov         ecx,30h   mov         eax,0CCCCCCCCh   rep stos    dword ptr es:[edi]           主要解读stos的功能

 ebp到ebp-0C0h之间的位置会不断填充cccccccc   填充48次  十六进制30h变成十进制就是48

解读如下:
 mov         eax,0CCCCCCCCh   mov         ecx,30h   rep stos    dword ptr es:[edi]        //rep相当于重复操作  edi每次执行会自动增加4字节长度    ecx会自动减少1次    stos的操作隐含如下: stos   dword ptr es:[edi] <=>  mov es:[edi],eax  两者等价   rep  (ecx= ecx-1 if(ecx==0) break;


同理可以推论出如下操作:
stosb  <=> stos  byte ptr es:[di]   //隐藏的操作数 al
stosw  <=> stos  word ptr es:[di]   //隐藏的操作数 ax
stosd  <=> stos  dword ptr es:[edi] //隐藏的操作数 eax

感谢常杰同学的耐心指导!

0 0
原创粉丝点击