問題タブ [libfuzzer]
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.
go - libfuzzer を使用した Go アプリケーションのファジング: 間違ったカバレッジ
私は論文を書いていますが、現在のセットアップに関する意見をいただければ幸いです。libfuzzer を使用してターゲットの Go アプリケーションをファジングしたいので、次のようにしました。
テストする go 関数を呼び出すメイン パッケージを作成しました。コード:
llvm-go
アプリケーションを実際に共有ライブラリとしてビルドするには、メインパッケージが必要です。ここで二重の抽象化を行う理由は、ビルド パイプラインを go-fuzz と互換性を持たせたいからです。go-fuzz は、"Fuzz" 関数名をファジング エントリ ポイントとして使用します。私のセットアップでは、libfuzzer を利用するために必要なコードをラップするだけです。
次に、アプリケーションをコンパイルしますllvm-go
。
これで、Go 共有ライブラリを計測する方法が 2 つあります。動的にロードするか、バイナリに静的にリンクするかです。静的にリンクされたコードを使用して問題を説明します。そのために、Go 共有ライブラリを計測するファジング スタブを作成しました。
次に、次のようにコンパイルしました。
ここで、コードを実行すると、次の 2 つの問題が発生します。
カバレッジと機能は増加していないようで、メモリ要件は実行ごとに増加します。ファザーの実行に環境変数を追加することで、別の SO 投稿のおかげでメモリの増加を修正できました。ASAN_OPTIONS=quarantine_size_mb=20 ./fuzz-target -timeout=12
ただし、おそらく主な問題は、実際のターゲットが 2 つのレベルの抽象化の下に「埋もれている」ことです: LLVMFuzzerTestOneInput --calls-> main.go を介した共有 Go ライブラリ。 --> ファジング関数 --calls--> ターゲット関数。ただし、これらの各関数は、データを変更せずに直接次のレイヤーに渡すだけであることに注意してください。これが正しく機能していることを確認するには、どのような手順を実行できますか? 私は何か間違ったことをしていますか?
clang - libfuzzers カスタムミューテーター API の使用方法は?
Libfuzzer は、カスタム ミューテーターを開発するための 2 つの API を提供します。
これらの API はどのように使用されますか? ファザーは決定論的である必要があります。カスタムミューテーターでそれを確認するにはどうすればよいですか?
c++ - 外部オブジェクト ファイルで名前が変更されたシンボルを呼び出す方法は?
main()
関数を外部に公開するだけの LLVM libFuzzer を使用して、特定のコードをファジングしようとしています。ターゲット コードのソースにアクセスできますが、変更できません。
オブジェクト ファイルを直接インクルードしようとすると、main
によって提供される定義と競合します-fsanitize=fuzzer
。main
オブジェクト ファイル内のシンボルの名前を変更することで、これを解決できるかもしれないと考えました。
次に、ハーネス コードで次のように宣言します。
そして、リンク行に含めながら、stub_main()
の代わりに呼び出します。ただし、これは機能していないようで、リンカーは への参照を見つけることができません。main()
main.stub
stub_main(int, char**)
main
独自の を提供する別のコードからこの関数を呼び出すにはどうすればよいmain()
ですか?
c - Autotools ライブラリの libfuzzer を作成する
Autotools Mythbusterをビルド システムとして使用する Linux ライブラリがあります。Makefile.am
ライブラリのは次のとおりです。
このライブラリの libfuzzer を作成したいので、次のファイルに fuzzer の単純なエントリ ポイント ポイントを作成しましたsampletest.c
。
そしてMakefile.am
、私のlibfuzzerを構築するために次のように書きました
しかし、先に進んで と入力make
すると、次のエラーが表示されます。
gcc: error: unrecognized argument to '-fsanitize=' option: 'fuzzer'
に「ファザー」部分を含めない場合、次のように表示Makefile.am
されます。
(.text+0x24): undefined reference to
メイン」
私は何をすべきか ?