【问题标题】:Unable to set breakpoints in gdbserver via IDA无法通过 IDA 在 gdbserver 中设置断点
【发布时间】:2017-06-10 18:13:46
【问题描述】:

我正在使用带有二进制漏洞利用练习(学习如何使用缓冲区溢出、编写 shellcode 等)的 Ubuntu 14.04 机器。 到目前为止,我已经能够通过 gdbserver 运行这些程序,这些程序专门用 C 语言编写并用 gcc 编译,并通过 IDA Pro 6.8 远程连接到它。

但是,现在我正在尝试运行一个程序,它没有遇到 IDA 中设置的断点。两者之间有明显的通信,我可以通过 IDA 执行程序,但它不会在我设置的任何断点处停止,包括程序执行流程中肯定会被命中的断点。我在 addresses 上设置了断点,因此无法获得调试信息不​​是原因。 此外,当我使用 gdb 调试它时,它工作得非常好。 我以为是因为我打开了ASLR,但是当我将其关闭时,它仍然无法正常工作。可能是什么原因?

程序是这样编译的(只有一个文件):

gcc -pie -fPIE -fno-stack-protector -o prog prog.c

【问题讨论】:

    标签: c linux gcc reverse-engineering ida


    【解决方案1】:

    为了让断点在行或(未导出的)函数上工作,程序需要有调试符号。您的 gcc 命令行不包括这些。在这种情况下,如果您要在 内存地址 上创建断点,则该断点会起作用;但它不适用于行和未导出的函数,因为调试器(或 gdbserver 存根)的必要信息不可用。

    要解决此问题,请将-g 参数添加到您的gcc 命令行。

    【讨论】:

    • 或 -ggdb 应该专门为 gdb 生成调试信息。
    • 我在内存地址上设置了一个断点,它以前在没有使用 -g 标志编译的程序上工作过。请参阅编辑。
    猜你喜欢
    • 2015-10-05
    • 2014-09-22
    • 2010-10-14
    • 1970-01-01
    • 2018-07-10
    • 2015-02-08
    • 2016-03-06
    • 2014-10-12
    相关资源
    最近更新 更多