返回信息流请教个问题 书上说函数调用的时候先是调用的参数入栈,然后返回地址入栈。然后进入调用函数的代码空间执行。按这种说法返回地址要比调用参数先出栈,那执行的过程中如何获得调用函数传入的参数呢?
这是一条镜像帖。来源:北邮人论坛 / security / #32701同步于 2011/7/20
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Security机器人发帖
请教系统栈工作原理,谢谢
kingstone
2011/7/20镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
是的,EBP之所以被称为基址寄存器,就是因为它通常作为一个基地址的标杆,参数、返回地址、局部变量紧密的团结在以ebp为中心的栈帧结构周围,为建设和谐的函数调用发挥了极大作用。
咳咳,跑题了……
总之参数和局部变量一般都是通过ebp寄存器的偏移量来访问的。
【 在 kingstone 的大作中提到: 】
: 若要访问压入的参数是不是要用EBP
: 【 在 rebirthatsix 的大作中提到: 】
: : dword ptr [esp+xx]
: ...................
嗯,主要看编译参数,常规有保护帧,也就是经典的mov edi,edi /push ebp /mov ebp,esp的,访问参数就用ebp,访问局部用esp
没有保护帧的,esp或ebp都有可能,或者说基本都是esp,我记得最大优化编译就是这样,至于加密或者带点花的代码,就更各种各样了