rep stos 指令
转载自 https://blog.csdn.net/liuhw4598/article/details/78089493
最近上课,看VC6的反汇编时,总在函数入口处都见到 rep stos 这条指令,虽然知道这条指令在那块代码里操作的意义,但对于这条指令具体是如何操作的,还是很模糊,在此做个笔记,希望下次碰到就不会觉得陌生了
先贴上代码,因为用的VS2013,该图为VS2013 DEBUG 版的反汇编代码 ^_^
指令解析
stos
串存储指令,英文缩写 store string , 将 eax 中的数据传送到目的地址(目的地址默认为 es:[edi]),以下两条指令相当于一条 stos 指令
    mov [edi], eax
    add edi, 4       ;或者 sub edi, 4 - 1
 - 2
 
  至于到底是加 4 还是减 4 ,是由方向标志 DF 来决定,可以由指令 cld 和 std 指令设置 
 
cld: 从低地址往高地址传送
std: 从高地址往低地址传送
rep
重复前缀指令,英文缩写 repeat,每执行一次, ecx 减 1,直到 ecx 减至0,重复执行结束,以下代码模拟 rep
AGAIN:  stos
        dec ecx
        jnz AGAIN- 1
 - 2
 - 3
 
回到那段代码
    lea edi, [ebp - 0C0h]         ;将(栈顶减去0C0h)地址给edi
    mov ecx, 30h                  ;重复次数
    mov eax, 0CCCCCCCCh           ;传送的数据为 0XCCCCCCCC
    rep stos dword ptr es:[edi]   ;由高地址往低地址,填充
- 1
 - 2
 - 3
 - 4
 - 5
 
于是在内存中可以看到 0xcc 填充了 (第一次用MarkDown,测试下颜色(`>>`))
                    
                
                
            
        
浙公网安备 33010602011771号