先贴上代码,因为用的VS2013,该图为VS2013 DEBUG 版的反汇编代码
指令解析
stos
串存储指令,英文缩写 store string , 将 eax 中的数据传送到目的地址(目的地址默认为 es:[edi]),以下两条指令相当于一条 stos指令
mov [edi], eax
add edi, 4 ;或者 sub edi, 4
至于到底是加 4 还是减 4 ,是由方向标志 DF 来决定,可以由指令 cld 和 std 指令设置
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 填充了