第一个 DIE 表示一个编译单位(CU),实际上是一个包含了所有 #includes 和类似语句的源文件。下面是带含义注释的属性:
- DW_AT_producer clang version 3.9.1 (tags/RELEASE_391/final) <-- 产生该二进制文件的编译器
- DW_AT_language DW_LANG_C_plus_plus <-- 原编程说话
- DW_AT_name /super/secret/path/MiniDbg/examples/variable.cpp <-- 该 CU 表示的文件名称
- DW_AT_stmt_list 0x00000000 <-- 跟踪该 CU 的行表偏移
- DW_AT_comp_dir /super/secret/path/MiniDbg/build <-- 编译目次
- DW_AT_low_pc 0x00400670 <-- 该 CU 的代码肇端
- DW_AT_high_pc 0x0040069c <-- 该 CU 的代码结尾
其它的 DIEs 遵守类似的模式,你也很可能推想出不合属性的含义。
如今我们可以根据新学到的 DWARF 常识测验测验和解决一些实际问题。
当前我在哪个函数?
假设我们有一个法度榜样计数器值然后想找到当前我们在哪一个函数。一个解决该问题的简单算法:
假设我们想在地址 0x00400686 处设置断点。如不雅你想测验测验的话你可以在已经编写好的调试器上手动实现。
推荐阅读
以上具体源码参考:QSRotationScreenDemo在处理iOS反正屏时,经常会和UIDeviceOrientation、UIInterfaceOrientation和UIInterfaceOrientationMask这三个列举类型打交道,它们大年夜不合角>>>详细阅读
本文标题:开发一个Linux调试器(四):Elves和dwarves
地址:http://www.17bianji.com/lsqh/36389.html
1/2 1

网友点评
精彩导读
科技快报
品牌展示