問題は、標準の C ライブラリを使用してクロス プラットフォームの方法で簡単な自己チェック実行可能ファイルを実現するにはどうすればよいかということです。
ここでは、特定のチェック方法 (CRC やハッシュ コードなど) ではなく、テクニックを探していますが、テクニックには、特定の方法に合わせて調整された要素が含まれている場合があります (たとえば、以下を参照)。
その目的は、バイナリがウイルスの動作または伝送障害のために破損している可能性が高く、想定どおりに実行できない可能性があることを示す手段を提供することです。特に問題の実行可能ファイルを標的とする意図的な改ざんを防ぐことは意図されていません。
それは合理的にクロスプラットフォームであるべきです。理想的には、標準の C ライブラリのみを使用する必要がありますが、無関係な条件付きコンパイルによって達成されない場合は、ほとんどの使用されているシステム (Linux バリアント、Android、Mac OS、Windows) で実行できるメソッドも適用できます。
私の現在のアイデアは、起動された実行可能ファイルの名前であるプログラムに渡された最初のパラメーター (argv) を使用して、標準ファイル I/O を使用して読み取り専用でバイナリを開き、位置に依存しないチェックアルゴリズムを適用することです。いくつかのチェックコードの。(単純なチェックサムは、完全なバイナリ評価の合計をゼロにするための未使用の位置を提供することにより、この要件を満たします。CRC アルゴリズムも利用できますが、バイナリの任意のポイントに適切な値を挿入することはそれほど簡単ではありません)
ただし、この手法でさえ失敗する可能性がありますが、実行可能ファイル自体のバイナリを常に確実に見つけるには argv[0] の情報で十分かもしれません。