汇编指令:rep stos

  最近上课,看VC6的反汇编时,总在函数入口处都见到 rep stos 这条指令,虽然知道这条指令在那块代码里操作的意义,但对于这条指令具体是如何操作的,还是很模糊,在此做个笔记,希望下次碰到就不会觉得陌生了

先贴上代码,因为用的VS2013,该图为VS2013 DEBUG 版的反汇编代码 ^_^

这里写图片描述

指令解析

stos

  串存储指令,英文缩写 store string , 将 eax 中的数据传送到目的地址(目的地址默认为 es:[edi]),以下两条指令相当于一条 stos 指令

    mov [edi], eax
    add edi, 4       ;或者 sub edi, 4 

  至于到底是加 4 还是减 4 ,是由方向标志 DF 来决定,可以由指令 cldstd 指令设置
 

cld: 从低地址往高地址传送
std: 从高地址往低地址传送

rep

  重复前缀指令,英文缩写 repeat,每执行一次, ecx 减 1,直到 ecx 减至0,重复执行结束,以下代码模拟 rep

AGAIN:  stos
        dec ecx
        jnz AGAIN

回到那段代码

这里写图片描述

    lea edi, [ebp - 0C0h]         ;将(栈顶减去0C0h)地址给edi
    mov ecx, 30h                  ;重复次数
    mov eax, 0CCCCCCCCh           ;传送的数据为 0XCCCCCCCC
    rep stos dword ptr es:[edi]   ;由高地址往低地址,填充

于是在内存中可以看到 0xcc 填充了 (第一次用MarkDown,测试下颜色(`>>`))

这里写图片描述

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页