本文通过c语言例程来观察函数在调用过程中的栈处理,通过反汇编及Gdb调试寄存器来了解处理器的执行过程.
芯片:全志H6 arm 64处理器
OS:Linux 4.9.118+
1 C语言及其反汇编分析
1.1 c语言例程
以下例程是一个c语言程序,实现了两个简单函数func2、fucn1,各有两个入参,有返回值,mani函数中调用func2,func2中又调用fucn1。
#include<stdio.h>
int func1(int a,int b)
{
int r=3;
r=a+b;
return r;
}
int func2(int a,int b)
{
int r=3;
int tmp[1024*1024] ={
0};
char *str0="111111111\r\n";
char *str1="222222222\r\n";
char *str2="333333333\r\n";
char *str3="444444444\r\n";
r=a+b;
printf("%s",str0);
printf("%s",str1);
printf("%s",str2);