作家
登录

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

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

开辟一个Linux调试器(五):源码和旌旗灯号

在上一部分我们进修了关于 DWARF 的信息,以及它若何被用于攫取变量和将被履行的机械码与我们的高等说话的源码接洽起来。在这一部分,我们将进入实践,实现一些我们调试器后面会应用的 DWARF 原语。我们也会应用这个机会,使我们的调试器可以在射一一个断点时打印出当前的源码高低文。

系列文┞仿索引

跟着后面文┞仿的宣布,这些链接会逐渐生效。

  1. 预备情况
  2. 断点
  3. 存放器和内存
  4. Elves 和 dwarves
  5. 源码和旌旗灯号
  6. 源码级慢慢履行
  7. 源码级断点
  8. 调用栈展开
  9. 攫取变量
  10. 下一步

设置我们的 DWARF 解析器

正如我在这系列文┞仿开端时备注的,我们会应用 libelfin 来处理我们的 DWARF 信息。欲望你已经在第一部分设置好了这些,如不雅没有的话,如今做吧,确保你应用我仓库的 fbreg 分支。

一旦你构建好了 libelfin,就可以把它添加到我们的调试器。第一步是解析我们的 ELF 可履行法度榜样并大年夜中提取 DWARF 信息。应用 libelfin 可以随便马虎实现,只须要对调试器作以下更改:

  1. siginfo_t { 
  2.     int      si_signo;     /* 旌旗灯号编号 */ 
  3.     int      si_errno;     /* errno 值 */ 
  4.     int      si_code;      /* 旌旗灯号代码 */ 
  5.     int      si_trapno;    /* 导致生成硬件旌旗灯号的陷阱编号 
  6.                               (大年夜部分架构中都没有应用) */ 
  7.     pid_t    si_pid;       /* 发送旌旗灯号的过程 ID */ 
  8.     uid_t    si_uid;       /* 发送旌旗灯号过程的用户 ID */ 
  9.     int      si_status;    /* 退出值或旌旗灯号 */ 
  10.     clock_t  si_utime;     /* 消费的用户时光 */ 
  11.     clock_t  si_stime;     /* 消费的体系时光 */ 
  12.     sigval_t si_value;     /* 旌旗灯号值 */ 
  13.     int      si_int;       /* POSIX.1b 旌旗灯号 */ 
  14.     void    *si_ptr;       /* POSIX.1b 旌旗灯号 */ 
  15.     int      si_overrun;   /* 急鹞鲼 overrun 计数; 
  16.                               POSIX.1b 急鹞鲼 */ 
  17.     int      si_timerid;   /* 急鹞鲼 ID; POSIX.1b 急鹞鲼 */ 
  18.     void    *si_addr;      /* 导致缺点的内存地址 */ 
  19.     long     si_band;      /* Band event (在 glibc 2.3.2 和之前版本中是 int
     1/6    1 2 3 4 5 6 下一页 尾页

      推荐阅读

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

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


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

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

关键词: 探索发现

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

网友点评
自媒体专栏

评论

热度

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