4

我正在 GDB 下调试一个优化的 Linux 可执行文件。我们的程序因分段错误而崩溃。然而,错误指令似乎并没有真正访问无效指针;它基本上是一个mov 0xf00(%ebx), eax0xf00(%ebx) 是有效内存的操作。至少,当我们找到x它的地址时,它就会出现。

什么是 GDB 命令来查看当前捕获的异常的所有详细信息,包括错误操作码试图访问的确切内存地址?此信息应该在异常陷阱框架中,但我不知道如何通过 GDB 获取。

这适用于 Ubuntu 下的 x86。

4

1 回答 1

3

然而,错误指令似乎并没有真正访问无效指针;它基本上是一个 mov 0xf00(%ebx), eax op 其中 0xf00(%ebx) 是有效内存。至少,当我们 x 它的地址时它会出现。

我猜该地址实际上是无效的(mmap编辑PROT_NONE)。

GDB 可以检查它的原因是在 Linux 上ptrace(GDB 使用它来访问劣质内存)会很高兴地从这些地址中读取,而应用程序本身则不能。

查看当前捕获的异常的所有详细信息的 GDB 命令是什么

尝试print $_siginfo当 GDB 与信号停止时。文档在这里

于 2012-06-22T01:18:24.490 回答