作家
登录

开发一个Linux调试器(九):处理变量

作者: 来源: 2017-10-09 12:13:05 阅读 我要评论

  • < 1><0x00000071>    DW_TAG_array_type 
  •                       DW_AT_type                  <0x00000063> 
  • < 2><0x00000076>      DW_TAG_subrange_type 
  •                         DW_AT_type                  <0x0000007d> 
  •                         DW_AT_count                 0x0000002a 
  • < 1><0x0000007d>    DW_TAG_base_type 
  •                       DW_AT_name                  "sizetype" 
  •                       DW_AT_byte_size             0x00000008 
  •                       DW_AT_encoding              DW_ATE_unsigned 
  • < 1><0x00000084>    DW_TAG_pointer_type 
  •                       DW_AT_type                  <0x0000002a> 
  • 如你所见,我标记本电脑上的 int 是一个 4 字节的有符号整数类型,float是一个 4 字节的浮点数。整数数组类型经由过程指向 int 类型作为其元素类型,sizetype(可以认为是 size_t)作为索引类型,它具有 2a 个元素。 test * 类型是 DW_TAG_pointer_type,它引用 test DIE。

    实现简单的变量攫取器

    如上所述,libelfin 将为我们处理大年夜部分复杂性。然则,它并没有实现用于表示可变地位的所有办法,并且在我们的代码中处理这些将变得异常复杂。是以,我如今选择只支撑 exprloc。请根据须要添加对更多类型表达式的支撑。如不雅你真的有勇气,请提交补丁到 libelfin 中来赞助完成须要的支撑!

    处理变量主如果将不合部分定位在存储器或存放器中,攫取或写入与之前一样。为了简单起见,我只会告诉你若何实现攫取。

    起首我们须要告诉 libelfin 若何大年夜我们的过程中攫取存放器。我们创建一个持续自 expr_context 的类并应用 ptrace 来处理所有内容:

    接着我们确保它是一个 exprloc,并请求 libelfin 来评估我们的表达式:

    最后我们可以将它添加到我们的敕令解析器中:

    1. class ptrace_expr_context : public dwarf::expr_context { 
    2. public
    3.     ptrace_expr_context (pid_t pid) : m_pid{pid} {} 
    4.     dwarf::taddr reg (unsigned regnum) override { 
    5.         return get_register_value_from_dwarf_register(m_pid, regnum); 
    6.     } 
    7.     dwarf::taddr pc() override { 
    8.         struct user_regs_struct regs; 
    9.         ptrace(PTRACE_GETREGS, m_pid, nullptr, &regs); 
    10.         return regs.rip; 
    11.     } 
    12.     dwarf::taddr deref_size (dwarf::taddr address, unsigned 

        推荐阅读

        可能是国内最火的开源项目 —— HTML/CSS 篇

      截止今朝开源中国收录了 44513 款开源项目,囊括了最热点的各类开源项目,而软件的评分在必定程度上代表了软件的质量和热度,而重要用 HTML/CSS 编写的项目中也有很多值得救鉴的处所,是以>>>详细阅读


      本文标题:开发一个Linux调试器(九):处理变量

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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