我试图了解 GDB 命令背后的内部工作。在了解了精灵/共享库/地址空间随机化的初步功课之后,我试图了解 GDB 如何在可执行文件和核心文件之间发挥作用。
solib.c 包含共享库处理的实现。Esp 对 info sharedlibrary 命令很感兴趣。
solib.c 上的评论是这样的..
/* Relocate the section binding addresses as recorded in the shared
object's file by the base address to which the object was actually
mapped. */
ops->relocate_section_addresses (so, p);
我不能从这个评论中理解太多。有人可以用简单的英语向我解释搬迁是如何发生的吗?即每次可执行文件加载共享对象时,它都会加载到某个位置,比如 X,共享库中的所有符号都将位于固定偏移量,比如 X+Y,大小为 Z。我的问题是, gdb如何进行相同范围的地址重定位,以便与corefile中的加载段匹配。它如何从可执行文件中获取该提示。