1.pushl和popl
pushl和popl指令来说操作的是栈,栈的基地址由%ebp来指定,栈顶元素由%esp来指定,%esp指向的就是栈顶元素。将一个双字压入栈中,首先要将%esp减4,然后将双字写入%esp指向的栈顶位置;弹出一个双字,首先要将%esp加4,然后将%esp指向的栈顶元素取出
2.call和ret指令
call lable //函数调用,会把call指令下一条指令push到栈
leave //函数调用返回前的准备,也就是movl %ebp, %esp; popl %ebp
ret//从栈中pop出地址,并跳转到这个地址继续执行

从以上可以看出每个函数栈顶保存上一级函数的栈顶值,
从进程栈中解析backtrace,也可以根据ebp解析出局部变量


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/53148.html