0day学习笔记(2)--函数调用
函数调用过程 调用函数操作 函数参数入栈(在当前函数栈帧),从左至右或从右至左视情况而定 一般为从右至左 mov 地址,参数 的一个操作并不直接pop而是定位到地址将参数传递进去 call offerset : 调用函数,call标识符或地址. 同时为要调用的函数开辟新的栈帧 向栈中压入当前指令的地址,即返回地址 跳转到调用函数的入口地址 返回的时候有类似retn的操作 调整栈顶和栈底 push ebp :将上一个函数栈底入栈,在上一个函数的栈顶 mov ebp,esp sub esp ,10h :10h指的是新栈的大小 一系列新的函数的操作… 调用结束: leave : 调整栈帧的指令 mov esp,ebp pop ebp retn : POP EIP jmp offerset 调用main函数时有 and esp, 0FFFFFFF0h : 字节对齐(16位)的一个操作,编译优化需要 返回地址 将要调用函数的参数2 将要调用函数的参数1 当前函数的一系列变量,参数,地址 以上即是调用完一个函数后属于上一个函数的栈空间的内容 来源: CSDN 作者: lonmar. 链接: https://blog.csdn.net/weixin_45551083/article/details/104224787