10.2.3 C++ 4KB以上のスタック割り当てに関する問題のホットフィックス

Posted by on in Blogs

この記事は、DAVID MILLINGTONによる10.2.3 C++ Hotfix for an issue with a 4KB or larger stack allocationの抄訳です。

 

10.2.3では、メソッド内のスタックに4KB以上を割り当てる fastcall呼び出し規約を使用するメソッドに影響を与える issueがあります。スタックの割り当てによって、 'this'ポインタに不正な値が格納される可能性があります。

これは次のように報告されました:

  • RSP-20171
  • RSP-20297 、RSP-20173 (duplicate reports)

CodeCentralからホットフィックスをダウンロードできます

 

技術情報

技術的な詳細に関しましては、“Stack Grows”すると、新しいページに増やす必要があり(4KBはWindows上のページのサイズ)定義すると発生します。コンパイラが4KB以上のスタック割り当てを認識すると、次のページが確実にコミットされるようにメソッドを呼び出します。

 

これを処理するRTLメソッドは、常に1つの_chkstkしか持たないので10.2.3では新しいバージョン_chkstk_noallocを導入しました。この新しい方法は、espレジスタが変更されないように確保します。そうでない場合、ユーザーアプリケーションは大丈夫ですがデバッガはConfusedする可能性があり、再帰メソッドであったと考えられます。しかし、この問題は10.2.3で修正されました。このホットフィックスでは、eaxレジスタが正しく復元されない問題などの関連を解決します。fastcallメソッドの場合、 'this'ポインタとして現れます。

 

古いRTLと新しいRTLを混在させると、この新しいメソッドに対して未解決の外部が発生するため、プロジェクトを再構築して10.2.3 RTLと再リンクするようにしてください。10.2.3にアップグレードし、このホットフィックスは、以前のリリースで問題だったいくつかのデバッグシナリオを解決し、非常に大きな割り当てを持つメソッドのメソッドパラメータやその他の項目のデバッグを有効にします。

 



About
Gold User, No rank,
Delphi / C++Builder blogger

Comments

Check out more tips and tricks in this development video: