我有一个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 ?? ()
答案 0 :(得分:4)
如评论中所述_dopr不是你的问题。你正在看的是堆栈损坏,同样,在注释中,缓冲区溢出是最可能的问题。
假设您使用gcc编译应用程序,请添加选项:
-fstack-protector-all
到您的编译和链接选项。这会在堆栈周围粘贴几个额外的标记位,当你的缓冲区溢出时,在gdb中你会看到一个更有用的“堆栈粉碎检测”消息,以及应用程序的堆栈跟踪,然后它实际上会破坏堆栈