作家
登录

开发一个Linux调试器(四):Elves和dwarves

作者: 来源: 2017-07-25 13:43:22 阅读 我要评论

  •                         DW_AT_type                  <0x0000007e> 
  • < 1><0x00000077>    DW_TAG_base_type 
  •                       DW_AT_name                  int 
  •                       DW_AT_encoding              DW_ATE_signed 
  •                       DW_AT_byte_size             0x00000004 
  • < 1><0x0000007e>    DW_TAG_base_type 
  •                       DW_AT_name                  long int 
  •                       DW_AT_encoding              DW_ATE_signed 
  •                       DW_AT_byte_size             0x00000008 
  • 第一个 DIE 表示一个编译单位(CU),实际上是一个包含了所有 #includes 和类似语句的源文件。下面是带含义注释的属性:

    1. DW_AT_producer   clang version 3.9.1 (tags/RELEASE_391/final)    <-- 产生该二进制文件的编译器 
    2. DW_AT_language   DW_LANG_C_plus_plus                             <-- 原编程说话 
    3. DW_AT_name       /super/secret/path/MiniDbg/examples/variable.cpp  <-- 该 CU 表示的文件名称 
    4. DW_AT_stmt_list  0x00000000                                      <-- 跟踪该 CU 的行表偏移 
    5. DW_AT_comp_dir   /super/secret/path/MiniDbg/build                  <-- 编译目次 
    6. DW_AT_low_pc     0x00400670                                      <-- 该 CU 的代码肇端 
    7. DW_AT_high_pc    0x0040069c                                      <-- 该 CU 的代码结尾 

    其它的 DIEs 遵守类似的模式,你也很可能推想出不合属性的含义。

    如今我们可以根据新学到的 DWARF 常识测验测验和解决一些实际问题。

    当前我在哪个函数?

    假设我们有一个法度榜样计数器值然后想找到当前我们在哪一个函数。一个解决该问题的简单算法:

    假设我们想在地址 0x00400686 处设置断点。如不雅你想测验测验的话你可以在已经编写好的调试器上手动实现。


      推荐阅读

      代码处理iOS的横竖屏旋转

    以上具体源码参考:QSRotationScreenDemo在处理iOS反正屏时,经常会和UIDeviceOrientation、UIInterfaceOrientation和UIInterfaceOrientationMask这三个列举类型打交道,它们大年夜不合角>>>详细阅读


    本文标题:开发一个Linux调试器(四):Elves和dwarves

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

    关键词: 探索发现

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

    网友点评
    自媒体专栏

    评论

    热度

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