1

私が書いたいくつかのコードを改善するために libasan を使用しているときに問題に直面しています。

状況:

-- -fsanitize=address -lasan を使用してコードをコンパイルします。

-- コードを実行します。

以下のサンプル:

#include <iostream>
#include <sys/time.h>
using namespace std;
int main () {
    time_t currentTime ;
    time(&currentTime);
    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)

さて、これは上に投稿したコードが原因ではないことを理解していますが、現在理解していないのは、スタックポインターを台無しにしている場所を見つける方法です..

どんな助けでも感謝します。

4

0 に答える 0