問題タブ [binary-reproducibility]
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.
java - 再現可能なビルドで Android アプリケーションを作成するには?
私の経験では、同じ Android アプリケーションのソース コードを再コンパイルしても、毎回同じバイナリが生成されるわけではありません。再現可能なビルドは開発者にとって非常に便利ですが、再現可能なビルド プロセスの最も重要な利点はセキュリティだと思います。.apk
オープンソースの Android アプリで、生成されたバイナリ ( ) がレビュー済みのソース コードから実際にコンパイルされていることをどのように確認できますか? Android SDK または Java から再現可能なビルドを生成する方法はありますか?
c - コメントだけが変更されたプログラムの 2 つのバイナリが gcc で正確に一致しないのはなぜですか?
2 つの C プログラムを作成しました
プログラム 1
/li>プログラム 2
/li>
私の知る限り、コンパイル時に、コンパイラ(gcc)はコメントと冗長な空白を無視する必要があるため、出力は類似している必要があります。
しかし、出力バイナリの md5sums を確認すると、一致しません。最適化してコンパイルも試みまし-O3
た-Ofast
が、それでも一致しませんでした。
ここで何が起きてるの?
編集:正確なコマンドとそこにあるmd5sumsは(t1.cはプログラム1で、t2.cはプログラム2です)
はい、md5sums は同じフラグを持つ複数のコンパイルで一致します。
ところで、私のシステムgcc (GCC) 5.2.0
はLinux 4.2.0-1-MANJARO #1 SMP PREEMPT x86_64 GNU/Linux
c++ - Visual Studio で再現可能なビルド - オブジェクト ファイルの違い
2 台の異なるマシンが同一のビルドを生成することを確認しようとしています。環境をできる限り似たものにしようとしましたが、生成された .obj ファイルと .exe ファイルにはまだいくつかの違いがあります。埋め込まれたパスの違いとタイムスタンプを除外できました。また、最小限のコード例 (hello world プログラムが実際に同一のバイナリを生成するように) を保証しました。
現在、一部のオブジェクト ファイルは類似しており、他のファイルは類似していません。diff を使用して異なるものをdumpbin /all
見ると、次のような違いがあります。
の多くでSECTION HEADER
。100% 証明したわけではありませんが、それぞれの違いは、他のオブジェクト ファイルからダンプされた出力の別のセクションで発生する行にあるように思えます。そのため、物事は別の順序で行われているようです。(ただし、これは私の現在の仮定にすぎないことに注意してください。間違っている可能性があります。)
ここから先に進む方法とその原因についてのヒントはありますか? ビルド/リンク順?
Microsoft が次のように書いていることも確認しました。
注: 連続するビルドで同じソース ファイルをビルドする場合、Visual C++ が同じバイナリ イメージを生成するという保証はありません。ただし、実行時に EXE (または DLL) がまったく同じように動作し、他のすべての条件が同じであることが保証されています。
しかし、私の特定のケースで何が起こっているのかまだ疑問に思っています。私の場合、同じマシンでの連続したビルドは同一のビルドを提供します。