作家
登录

开发一个Linux调试器(五):源码和信号

作者: 来源: 2017-08-28 16:03:37 阅读 我要评论

 类型) */ 
  •     int      si_fd;        /* 文件描述符 */ 
  •     short    si_addr_lsb;  /* 地址的最不重要位 
  •                               (自 Linux 2.6.32) */ 
  •     void    *si_lower;     /* 出现地址违规的下限 (自 Linux 3.19) */ 
  •     void    *si_upper;     /* 出现地址违规的上限 (自 Linux 3.19) */ 
  •     int      si_pkey;      /* PTE 上导致缺点的保护键 (自 Linux 4.6) */ 
  •     void    *si_call_addr; /* 体系调用指令的地址 
  •                               (自 Linux 3.5) */ 
  •     int      si_syscall;   /* 体系调用测验测验次数 
  •                               (自 Linux 3.5) */ 
  •     unsigned int si_arch;  /* 测验测验体系调用的架构 
  •                               (自 Linux 3.5) */ 
    1. class debugger { 
    2. public
    3.     debugger (std::string prog_name, pid_t pid) 
    4.          : m_prog_name{std::move(prog_name)}, m_pid{pid} { 
    5.         auto fd = open(m_prog_name.c_str(), O_RDONLY); 
    6.         m_elf = elf::elf{elf::create_mmap_loader(fd)}; 
    7.         m_dwarf = dwarf::dwarf{dwarf::elf::create_loader(m_elf)}; 
    8.     } 
    9.     //... 
    10. private: 
    11.     //... 
    12.     dwarf::dwarf m_dwarf; 
    13.     elf::elf m_elf; 
    14. }; 

    我们应用了 open 而不是 std::ifstream,因为 elf 加载器须要传递一个 UNIX 文件描述符给 mmap,大年夜而可以将文件映射到内存而不是每次攫取一部分。

    调试信息原语

    下一步我们可以实现大年夜法度榜样计数器的值中提取行条目(line entry)以及函数 DWARF 信息条目(function DIE)的函数。我们大年夜 get_function_from_pc 开端:

    这里我采取了朴实的办法,迭代遍历编译单位直到找到一个包含法度榜样计数器的,然后迭代遍历它的子节点直到我们找到相干函数(DW_TAG_subprogram)。正如我在上一篇中提到的,如不雅你想要的话你可以处理类似的成员函数或者内联等情况。

    接下来是 get_line_entry_from_pc:

    1. dwarf::line_table::iterator debugger::get_line_entry_from_pc(uint64_t pc) { 
    2.     for (auto &cu : m_dwarf.compilation_units()) { 
    3.         if (die_pc_range(cu.root()).

        推荐阅读

        Python开发者面向文档编程的正确姿势

      概述秦人不暇自哀,而后人哀之;后人哀之而不鉴之,亦使后人而复哀后人也! –论面向文档编程的重要性如不雅想看见识一小我写代码的功力,注释其实是区分老司机和小鲜肉的一个明显的分界线(有没有不雅察碘晾髑公司的>>>详细阅读


      本文标题:开发一个Linux调试器(五):源码和信号

      地址:http://www.17bianji.com/lsqh/36965.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)