我们可以在func处设置断点,因此gdb知道某个函数的入口和出口地址。但它如何获得这些信息?是否使用DWARF或readelf作为可执行文件,如果是,如何? 的由于
答案 0 :(得分:1)
GDB使用多个“信号”:
DWARF
,STABS
或
别的东西取决于
平台和编译器)。通常GDB不会调用“外部”readelf
可执行文件 - 它包含直接读取信息的所有智能。
如果您想知道完全如何完成此操作,请阅读source。
答案 1 :(得分:0)
DWARF中描述了一个带有标签DW_TAG_subroutine
的DIE(调试信息条目)的函数。 DIE具有属性DW_AT_low_pc
和DW_AT_high_pc
,它们给出了函数的边界。