我有一个 gdb 崩溃转储在 dopr 崩溃了
这个有什么作用? 我没有定义这个函数,也没有在任何地方使用调用。是libc函数吗?
[Switching to thread 1 (Thread 5339)]#0 0x00000000005f0937 in _dopr ()
(gdb) bt
#0 0x00000000005f0937 in _dopr ()
#1 0x00000000000003ff in ?? ()
#2 0x000000000111c3b0 in ?? ()
#3 0x00007fced1fe1f80 in ?? ()
#4 0x0000000000000000 in ?? ()
正如评论中提到的 _dopr 不是你的问题。您看到的是堆栈损坏,并且在注释中,缓冲区溢出是最有可能的问题。
假设您正在使用 gcc 编译应用程序,请添加选项:
-fstack-protector-all
您的编译和链接选项。这会在堆栈周围添加一些额外的哨兵位,当发生缓冲区溢出时,在 gdb 中,您会看到一条更有用的“检测到堆栈粉碎”消息,以及应用程序实际销毁堆栈之前的堆栈跟踪.