共享库的.init节的断点

问题描述 投票:0回答:1

我试图在inkscape-0.92.3中运行gdb。确切地说,我试图在其主共享库(即.init)的/usr/lib/inkscape/libinkscape_base.so节的第一个地址上设置一个断点。根据0x7ffff6ebd9d0返回的信息,地址为info files。但是,当我使用b *0x7ffff6ebd9d0在此地址上设置断点时,收到以下错误:

Cannot insert breakpoint 1.
Cannot access memory at address 0x7ffff6ebd9d0

此地址是该库的_init函数的地址。其他共享库中也存在相同的符号。因此,我可以使用b _init在该符号上放置一个断点,这会导致很多子断点。这次,所有断点都可以正常工作,并且可以c(ontinue),直到到达_init共享库的libinkscape符号为止。有人知道原始地址错误的原因吗?

debugging gdb breakpoints elf inkscape
1个回答
0
投票

有人知道原始地址错误的原因吗?

原因:此地址尚未映射(库尚未加载)。

它适用于break _init情况,因为GDB可以检查是否有任何新加载的共享库定义了该符号。但是检查地址0x7ffff6ebd9d0是否可断点还不够聪明。

您可以使用(gdb) set stop-on-solib-events 1解决此问题。然后,每次加载新的共享库时,GDB都会停止,之前运行其初始化程序。

一旦显示libinkscape_base.so,您将可以根据需要使用地址断点。

© www.soinside.com 2019 - 2024. All rights reserved.