首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

vc反汇编有关问题,rep stos dword ptr es:[edi]表示什么意思

2013-10-22 
vc反汇编问题,rep stos dword ptr es:[edi]表示什么意思?初学汇编,指令不是很熟悉。 在vc下,看到这个,查命

vc反汇编问题,rep stos dword ptr es:[edi]表示什么意思?
初学汇编,指令不是很熟悉。

 在vc下,看到这个,查命令说rep stos是重复复制指令吧,那么es:[edi]是什么意思呢?
 ES = 002B
 EDI = 0035F8A4
 那我应该在去哪看内存?
 2B0+35F8A4么?


    virtual int GetNumber(){
008714C0  push        ebp  
008714C1  mov         ebp,esp  
008714C3  sub         esp,0CCh  
008714C9  push        ebx  
008714CA  push        esi  
008714CB  push        edi  
008714CC  push        ecx  
008714CD  lea         edi,[ebp-0CCh]  
008714D3  mov         ecx,33h  
008714D8  mov         eax,0CCCCCCCCh  
008714DD  rep stos    dword ptr es:[edi]  ;就是这里了
008714DF  pop         ecx  
008714E0  mov         dword ptr [ebp-8],ecx  
        return m_nNumber;
008714E3  mov         eax,dword ptr [this]  
008714E6  mov         eax,dword ptr [eax+4]  
    }
008714E9  pop         edi  
008714EA  pop         esi  
008714EB  pop         ebx  
008714EC  mov         esp,ebp  
008714EE  pop         ebp  
008714EF  ret  

[解决办法]
VC里内存查看器直接输入段寄存器就能翻译成段基址,看es:[edi]在内存查看器里输入es + edi就行了。不过你会注意到cs ds ss es其实都是指向0,因为Windows的内存是flat模式的。



引用:
es:[edi]中的es是段超越前缀,在保护模式下,里面装的是selector,edi里面装着偏移,得在selector所指的描述符中找到基址,再加上偏移就是线性地址了。

这些基础知识请自行找一本描述保护模式的书看看。


这里es不是段超越前缀,是stos的默认段寄存器。

热点排行