我正在GDB下调试优化的Linux可执行文件。我们的程序因分段错误而崩溃。然而,错误指令似乎实际上没有访问无效指针;它基本上是mov 0xf00(%ebx), eax
op,其中0xf00(%ebx)是有效内存。至少,它会在我们x
地址时显示。
查看当前捕获的异常的所有详细信息的GDB命令是什么,包括错误操作码尝试访问的确切内存地址?这个信息应该在异常陷阱框架中,但我不知道如何通过GDB获取。
这适用于Ubuntu下的x86。
答案 0 :(得分:1)
然而,错误指令似乎没有实际访问无效指针;它基本上是mov 0xf00(%ebx),eax op其中0xf00(%ebx)是有效内存。至少,它出现在我们x的地址时。
我猜这个地址实际上无效(mmap
与PROT_NONE
编辑。
GDB可以检查它的原因是,在Linux上,ptrace
(GDB用来访问劣质内存)将很乐意从这些地址读取,而应用程序本身则无法读取。
查看当前捕获的异常的所有详细信息的GDB命令是什么
当GDB因信号而停止时,请尝试print $_siginfo
。文档here。