zoukankan      html  css  js  c++  java
  • 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.
    ", size);
      for (i = 0; i < size; i++)
         printf ("%s
    ", 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.
    ", size);
      for (i = 0; i < size; i++)
         printf ("%s
    ", strings[i]);
    
      free (strings);
    return g(x);
    }
    
    int main (void)
    {
      return f(8)+1;
      return 0;
    }
    

    最终的结果如下

    一些感受

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

  • 相关阅读:
    CSS中的小知识
    网络基础 中的osi七层 协议
    pickle的使用
    max()的key的运用
    read,readline,readlines的区别
    print()控制台输出带颜色的方法
    写项目时bin目录下的start中的细节(路径问题的解决)
    使用hashlib密文存储实例
    固态硬盘使用f2fs作为根分区安装linux
    工厂方法(Factory Method)
  • 原文地址:https://www.cnblogs.com/vizen/p/11564172.html
Copyright © 2011-2022 走看看