没有合适的资源?快使用搜索试试~ 我知道了~
首页arm与arm64调用栈
资源详情
资源评论
资源推荐

arm 与 arm64 调用栈2015-04-22 19:09:50
分类:LINUX
ARM Procedure Call Standard 定义了各寄存器在函数调用过程中的作用、基础类型的长度、以
及函数调用基本准则,包括栈处理、参数传递等。
本文通过实例描述 arm 与 arm64 在函数调用过程中栈帧的处理方法,理解栈帧的特点对于理解反
汇编代码和定位 bug 有重要意义。
下面是一个样例代码,我们将研究它的调用栈:
1. intfunc2(intx,inty,intz)
2. {
3. intr;
4. r=x+y+z;
5. return r;
6. }
7. intfunc1(inti,intj)
8. {
9. inttmp=3;
10. intk=0;
11. k=func2(i,j,tmp);
12. return k;
13. }
14. intmain()
15. {
16. inti=1;
17. intj=2;
18. intk=0;
19. k=func1(i,j);
20. return 0;
21. }
由于在函数调用过程中,最后一层调用与中间调用对栈的处理略有不同,样例中采用两层调用,
main -> func1 -> func2
将样例代码分别用 arm 和 arm64tool chain 编译并反汇编。
为了便于分析汇编代码,先把 arm 和 arm64 的寄存器用途列出:



















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0