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号