函数调用

一、函数运行前

二、调用函数此时PUSH两个参数,然后调用函数

PUSH往栈中压入2和1,每次压栈栈顶的地址都会减4(先减地址,在压栈) CALL 将下一行指令的地址压入栈中,再跳到0040100A这个地址去(先减地址,在压栈)
PUSH      2
PUSH      1
CALL      0040100A

三、函数调用后

开栈
1、保存原始栈底的位置

2、提升栈底

3、提升栈顶

4、保存现场(保存寄存器的值)

5、清除堆栈中的垃圾数据
其中STOS 的意思是 ,将eax寄存器中的值,给edi寄存器中所存的地址的值,然后edi的地址加4(先压栈,在加4) REP 重复多少次,ecx就是计数器

6、两个参数相加

7、还原现场(还原寄存器的值)

8、还原堆栈

9、返回到调用此函数的下一行地址
eip cup要执行的地址,此处是外平栈

posted @ 2020-11-20 14:48  lnterpreter  阅读(106)  评论(0)    收藏  举报