如何使用 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
的值,并在那里设置一个断点。
我有一个可执行文件和 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
的值,并在那里设置一个断点。