【问题标题】:How to set breakpoint with gdb on function from stripped shared library?如何在剥离共享库的函数上使用 gdb 设置断点?
【发布时间】:2015-08-10 11:55:05
【问题描述】:

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

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

【问题讨论】:

    标签: gdb shared-libraries reverse decompiling disassembly


    【解决方案1】:

    是否可以使用 gdb 在函数 fun 上设置断点?

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

    (gdb) break *0x12345678
    

    如何在运行时定义fun的地址?

    由于 GDB 默认禁用 ASLR,fun 的地址不会随着运行而改变(假设您从一开始就在 GDB 下运行程序)。

    因此,你只需要找到fun的地址一次。

    假设您的 lib.so 链接到 0(大多数非预链接共享库都是如此)。

    进一步假设您使用的是 Linux。

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

    【讨论】:

    • 非常感谢我的朋友!你拯救了我的一天:)
    猜你喜欢
    • 2014-03-29
    • 2016-11-26
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多