ネイティブのIntelx86またはx64実行可能ファイルを逆アセンブルし、テキストアセンブラー命令を吐き出すツールがありますが、ネイティブコードにコンパイルするときに元のソースコードからのテキストはほとんど保持されないため、この逆アセンブラーで生成されたテキストはおそらく機械語で生成されますアルファベットスープ。機械的には正しいが、人間的にはぎこちない。
新しいexeファイルと古いexeファイルの両方をasmテキストに逆アセンブルしてから、テキスト差分ツールを使用してasmテキスト間の違いを比較してみてください。これにより、小さな変更によるdiffツールのノイズが減少し、大きなdiffログが作成されます。これは、小さな変更によって、その後にすべてのグローバルオフセットが変更されるためです。分解されたasmテキストは、グローバルオフセットの依存関係が少なくなるはずです。
難しい真実は、Intel asm命令とDelphiコンパイラコード生成パターンを理解している人がいない場合、この逆アセンブル手順でさえ、2つのexeが異なるサイズである理由を理解するのに役立つ多くの有用な情報を生成しない可能性があります。たとえば、exeサイズが500kの重要なアプリでは、スタックフレームとスタックフレームの削除などのさまざまなコンパイラオプションを使用してコンパイルしたり、デバッグモードと非デバッグモードでコンパイルしたりすると、10kの違いが生じる可能性があります。
新しいexeの参照をWriteln()に追加しても、その10kの大部分を占める可能性があります-RTLのテキストIOルーチンは、何かが使用しない限り、exeからスマートにリンクされ、Writelnに触れるとサポートルーチンのフォレスト全体に触れますRTL内。古いexeがWritelnを使用していなかったが、新しいexeが使用している場合、新しいexeはWritelnサポートルーチンを実行します。