我在使用 libasan 改进我编写的一些代码时遇到了问题。
情况:
-- 使用 -fsanitize=address -lasan 编译代码
-- 运行代码。
下面的示例:
#include <iostream>
#include <sys/time.h>
using namespace std;
int main () {
time_t currentTime ;
time(¤tTime);
std::cout << "current time ---> " << currentTime << endl;
}
问题:此代码在示例程序中运行良好,但在我的应用程序中失败。应用程序因错误堆栈跟踪而崩溃:
==23316==ERROR: AddressSanitizer: stack-buffer-overflow on address ... at pc ... bp ... sp ...
Address ... is located in stack of thread T3==23316==AddressSanitizer CHECK failed: ../../../../../src/libsanitizer/asan/asan_thread.cc:243 "((ptr[0] == kCurrentStackFrameMagic)) != (0)" (0x0, 0x0)
#0 0xf7261fe6 (/usr/lib32/libasan.so.3+0xc7fe6)
#1 0xf72682f9 in __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) (/usr/lib32/libasan.so.3+0xce2f9)
#2 0xf7266015 (/usr/lib32/libasan.so.3+0xcc015)
#3 0xf725d473 (/usr/lib32/libasan.so.3+0xc3473)
#4 0xf725dcc1 (/usr/lib32/libasan.so.3+0xc3cc1)
#5 0xf72612f6 (/usr/lib32/libasan.so.3+0xc72f6)
#6 0xf71d20a0 in __interceptor_time (/usr/lib32/libasan.so.3+0x380a0)
现在,我明白这不是因为我上面发布的代码,而是我目前不明白的是如何找到我弄乱堆栈指针的位置..
任何帮助都将不胜感激。