gdb:它是如何获取可执行文件的信息的?

时间:2010-10-18 17:25:47

标签: gcc gdb

我们可以在func处设置断点,因此gdb知道某个函数的入口和出口地址。但它如何获得这些信息?是否使用DWARF或readelf作为可执行文件,如果是,如何? 的由于

2 个答案:

答案 0 :(得分:1)

GDB使用多个“信号”:

  • 它读取符号表。
  • 它可以应用启发式跳过过去的函数序言(通常你不想在函数序言中停止,因为调用参数可能尚未设置,并且如果打印将看起来“有趣”。)
  • 如果 可用,它还读取调试信息 (可以是DWARFSTABS或 别的东西取决于 平台和编译器)。

通常GDB不会调用“外部”readelf可执行文件 - 它包含直接读取信息的所有智能。

如果您想知道完全如何完成此操作,请阅读source

答案 1 :(得分:0)

DWARF中描述了一个带有标签DW_TAG_subroutine的DIE(调试信息条目)的函数。 DIE具有属性DW_AT_low_pcDW_AT_high_pc,它们给出了函数的边界。