13

Windows 8 アプリケーションの認定には、(特に) 次の要件があります。

  • 3.2/SafeSEH安全な例外処理を保証するために、フラグを使用してアプリをコンパイルする必要があります
  • 3.3/NXCOMPATデータの実行を防ぐために、フラグを使用してアプリをコンパイルする必要があります
  • 3.4 アプリは/DYNAMICBASE、アドレス空間レイアウトのランダム化 (ASLR) のフラグを使用してコンパイルする必要があります

C++Builder XE でこれらのいずれかを有効にする方法を見つけることができませんでした。

/NXCOMPATとについては、VS またはCygwin から/DYNAMICBASE使用できます。これらを有効にするネイティブな方法があれば、副作用の可能性についてもっと自信を持っていると思います.editbin.exepeflags.exe

とにかく、私は完全に途方に暮れてい/SafeSEHます。

4

2 に答える 2

5

まず、/ SafeSEHはx86にのみ適用され、x64やARMには適用されません。コンパイラは、セキュリティ上の理由から有効な例外ハンドラと見なされる関数アドレスを示す追加のテーブルを生成する必要があります。自分でこれを実行できる可能性はわずかですがfs:0、コンパイルされたアセンブリコードで例外処理チェーンを確認し、そのチェーンにプッシュされたすべてのアドレスを列挙して、ここに記載されているように説明する必要があります: http:// msdn.microsoft.com/en-us/library/9a89h429(v=VS.80).aspx。コードに実際にはハンドラーがなく、すべてC ++ Builderのランタイムにある(わずかな)可能性があります(ランタイムが別のDLLの場合は簡単になる可能性があります)。

SafeSEHをサポートするようにコンパイラを更新するようにC++Builderを説得する必要があります。XP SP2以降Windowsプラットフォームに存在し、かなり厄介なセキュリティホールを塞いでいます(例外ハンドラーアドレスはx86のスタックに存在し、バッファオーバーフローがランダムアドレスを実行するのを待っているだけです)

于 2012-08-24T23:45:41.313 に答える
1

/NXCOMPATおよびに関連する問題については/DYNAMICBASE、C++ Builder リンカがこれらのフラグをサポートするように、https ://quality.embarcadero.com/browse/RSP-13072 でリクエストを作成しました。

Visual C++ からの使用editbin.exeは理想的なソリューションとは言えず、リンカーはこれらのフラグをネイティブにサポートする必要があります。

更新: Visual C++ から EDITBIN を使用して自分で設定する必要がないように、これらのフラグが既に設定された状態で C++ Builder/Delphi ランタイム ファイル (DLL/BPL) を配布するための追加のリクエストがここで作成されました: https:/ /quality.embarcadero.com/browse/RSP-13231

于 2015-12-02T21:59:50.547 に答える