如何使用 gdb 在剥离共享库的函数上设置断点?

How to set breakpoint with gdb on function from stripped shared library?

我有一个可执行文件和 stripped lib.so 可执行文件使用的文件。 我已经反编译了lib.so文件并定义了函数fun我想设置断点和它的内部地址

是否可以使用 gdb 在函数 fun 上设置断点? 如何在运行时定义fun的地址?

Is it possible to set breakpoint on function fun using gdb?

是:GDB可以在任意地址设置断点:

(gdb) break *0x12345678

How to define the address of fun at runtime?

由于GDB默认禁用ASLR,fun的地址不会从运行变为运行(假设你一开始就运行GDB下的程序) .

因此,您只需要找到fun的地址一次即可。

让我们假设您的 lib.so 链接在 0(大多数非预链接共享库)。

进一步假设您在 Linux.

然后info proc map会告诉你lib.so的加载位置(你要的是第一个属于它的起始地址)。将该起始地址添加到您通过反汇编找到的fun的值,并在那里设置一个断点。