函数调用栈的获取原理分析
上一篇文章《在Linux程序中输出函数调用栈》,讲述了在Linux中如何利用backtrace获取调用栈,本篇文章主要介绍一下获取函数调用栈的原理,并给出相应的实现方式。
要了解调用栈,首先需要了解函数的调用过程,下面用一段代码作为例子:
#include <stdio.h>
int add(int a, int b) {
int result = 0;
result = a + b;
return result;
}
int main(int argc, char *argv[]) {
int result = 0;
result = add(1, 2);
printf("result = %d \r\n", result);
return 0;
}
使用gcc编译,然后gdb反汇编main函数,看看它是如何调用add函数的:
(gdb …