堆栈图
堆栈图如下
push 2
push 1 # 将变量压入栈中
# 401171为call指令的下一个指令地址
# 0040100A为将要跳转的地址
call 0040100A # push 401171; mov eip, 0040100A;
push EBP # 保存EBP,栈的base位置
mov EBP,ESP # 将EBP设为ESP
sub ESP,40 # 留出40个字节作缓冲区(相当于10个格)
push EBX
push ESI
push EDI # 将寄存器中压入栈中,保存现场

LEA EDI,DWORD PTR SS:[EBP-40] # 将EDI设为[EBP-40]的地址,即缓冲区的头部
MOV ECX,10
MOV EAX,CCCCCCCC
REP STOS DWORD PTR ES:[EDI] # 将缓冲区全部设为CCCCCCCC
MOV EAX,DWORD PTR SS:[EBP+8]
ADD EAX,DWORD PTR SS:[EBP+C] # 这个方法真正有用处的地方,实现2+3
pop EDI
pop ESI
pop EBX
mov ESP,EBP # 栈中去除缓冲区
pop EBP # 还原原来的EBP(栈底)
RETN # 相当于pop eip
add ESP,8 # 去除栈中的变量1,2

Comments | 0 条评论