【发布时间】:2015-08-10 11:55:05
【问题描述】:
我有一个可执行文件和 剥离 lib.so 可执行文件使用的文件。
我已经反编译了lib.so文件并定义了函数fun我要设置断点及其内部地址。
是否可以使用 gdb 在函数 fun 上设置断点?
如何在运行时定义fun的地址?
【问题讨论】:
标签: gdb shared-libraries reverse decompiling disassembly
我有一个可执行文件和 剥离 lib.so 可执行文件使用的文件。
我已经反编译了lib.so文件并定义了函数fun我要设置断点及其内部地址。
是否可以使用 gdb 在函数 fun 上设置断点?
如何在运行时定义fun的地址?
【问题讨论】:
标签: gdb shared-libraries reverse decompiling disassembly
是否可以使用 gdb 在函数
fun上设置断点?
是的:GDB 可以在任意地址设置断点:
(gdb) break *0x12345678
如何在运行时定义fun的地址?
由于 GDB 默认禁用 ASLR,fun 的地址不会随着运行而改变(假设您从一开始就在 GDB 下运行程序)。
因此,你只需要找到fun的地址一次。
假设您的 lib.so 链接到 0(大多数非预链接共享库都是如此)。
进一步假设您使用的是 Linux。
然后info proc map 会告诉你lib.so 的加载位置(你想要属于它的第一个起始地址)。将该起始地址添加到您通过反汇编找到的fun 的值中,并在此处设置断点。
【讨论】: