問題タブ [ubsan]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
324 参照

c++ - 動的にロードされる共有ライブラリで UBSAN を使用する

プロジェクトで UBSAN を使用しようとしたところ、修正が不可能と思われる問題が発生しました。このプロジェクトでは、共有ライブラリを介して実装されたプラグイン システムが使用されています。つまり、各プラグインは、プラグイン固有の派生クラスを持つ抽象クラスのインスタンスを返すファクトリ メソッドを提供します。次に、プロジェクトはフォルダー内のすべての共有ライブラリを反復処理し、それらを で開き、dlopen経由でファクトリ メソッドを取得し、dlsym使用されるプラグイン インスタンスを作成します。

ただし、UBSAN がスローするインターフェイス メソッドを使用すると、member call on address 0x... which does not point to an object of type '...'

MWE:

foo.h

foo.cpp

main.cpp

コンパイル:

  • g++ -shared -fPIC -o libfoo.so foo.cpp
  • g++ -fsanitize=vptr main.cpp -ldl
  • ./a.out

https://whatofhow.wordpress.com/2015/03/17/odr-rtti-dsoは、これは共有ライブラリの RTTI 情報とバイナリが異なるためであると説明しています。

共有ライブラリで関数をエクスポートし、それをインポートしdlsymて呼び出しようとすると、非常によく似た問題が発生します。結果は for clang になりcall to function <...> through pointer to incorrect function type '<...>'ます-fsanitize=function

これを解決する方法はありますか?私はClangを使用していないか、遊んで-fvisibilityいないので、ここで何をすべきかわかりません。

0 投票する
0 に答える
653 参照

c++ - この C++ UBSAN vptr ランタイム エラーを修正する方法 (ランタイム エラー: アドレスのメンバー呼び出し)

プロジェクトで ubsan テスト (-fsanitize=undefined) を有効にしましたが、いくつかの ubsan ランタイム エラーが見つかりました。ここで失敗した理由を見つけるのを手伝ってくれる人はいますか? GCC と Clang でこの問題を修正するにはどうすればよいですか?

これは lib.h と lib.cpp を含む lib.so モジュールです。

lib.h:

lib.cpp:

lib.so モジュールを呼び出す実行可能モジュールは次のとおりです。

main.cpp

モジュール (lib.so および main) をビルドして main を実行すると、実行時エラーが発生します。

build_run_gcc.sh

エラー: