HACK9 调试时必须的栈知识
下面是学习本章节的示例代码
#include <stdio.h>
#include <stdlib.h>
#define MAX 1024
typedef unsigned long long u64;
typedef unsigned int u32;
u32 max_addend= MAX;
u64 sum_till_MAX(u32 n)
{
u64 sum;
n++;
sum=n;
if(n<max_addend)
sum+=sum_till_MAX(n);
return sum;
}
int main(int argc,char **argv)
{
u64 sum = 0;
if(argc == 2)
max_addend = atoi(argv[1]);
if(max_addend > MAX ||max_addend == 0){
fprintf(stderr,"Invalid\n");
return 1;
}
sum = sum_till_MAX(0);
printf("sum(0..%lu) =%llu\n",max_addend,sum);
return 0;
}
使用GDB操作栈帧
假设GDB中进程停止在以下状态