2019-2020-1 20199322《Linux内核原理与分析》第二周作业

出现的小插曲

当我复制的时候,把//main.c复制进去的时候,结果是下面这样的

去掉刚刚那个注释,就能正常复制了,我猜测是不是因为//牵扯到了vim编辑器的命令,所以导致了这个错误

正文部分

书中没有说怎么打开main.s,估计按照惯性是vim main.s,我百度了一下,发现more main.s,和less main.s也能出里面的汇编内容,不过肯定没有vim编辑器好用

关于函数堆栈调用

我在网上看到的一个头文件函数execinfo.h正好能打印函数调用堆栈,使用方法

注意事项

如果在windows的一些ide下,会出现无法找到execinfo.h头文件的错误,execinfo.h头文件在linux下,通常由glibc包提供,实验楼的环境正好可以

结合庖丁解牛的代码的最终代码如下

#include <execinfo.h>
#include <stdio.h>
#include <stdlib.h>

int g(int x)
{
  void *array[10];
  size_t size;
  char **strings;
  size_t i;

  size = backtrace (array, 10);
  strings = backtrace_symbols (array, size);

  printf ("Obtained %zd stack frames.\n", size);
  for (i = 0; i < size; i++)
     printf ("%s\n", strings[i]);

  free (strings);
return x+3;
}
int f(int x)
{
void *array[10];
  size_t size;
  char **strings;
  size_t i;

  size = backtrace (array, 10);
  strings = backtrace_symbols (array, size);

  printf ("Obtained %zd stack frames.\n", size);
  for (i = 0; i < size; i++)
     printf ("%s\n", strings[i]);

  free (strings);
return g(x);
}

int main (void)
{
  return f(8)+1;
  return 0;
}

最终的结果如下

一些感受

娄老师的书庖丁解牛的第一章,有很多计算机组成原理的内容在里面,很多寄存器已经叫不出名字了,希望经过后面的学习,能做到目无全牛

posted @ 2019-09-21 19:06  汪振_20199322  阅读(145)  评论(0编辑  收藏  举报