ソフトの配列を増やしたら 0xC00000FD:Stack over flow が出るようになった件について

セキュリティソフトのアップデートで、暗号強度を高めるために、秘密鍵の大きさをでかくして、
配列のサイズを4倍にしたのだけど、
SendMessage を呼び出すと、 0xC00000FD:Stack over flow
が発生するという、奇妙な現象が発生するようになってしまった

プログラムのアセンブラレベルの話なのだが、
関数を呼び出したときに、呼び出し先にローカル変数があると、変数エリアを、スタックフレームに確保して利用するという仕組みがある。

Windows コールバック内で配列を使用すると
当然、コールバック内で SendMessage が呼ばれて、関数が入れ子状態になることがある
そうすると、スタックが、Windows Callback 関数内で使われてる変数のサイズx呼び出し回数分消費されてしまう。
なのでスタックサイズを増やす必要があるのだ。

stacksize

既定ではスタックコミットサイズが 4096なので、32Kに増やしてみた
ちなみに、スタックサイズを指定しないと、コミットサイズは無視されるようだ。
スタックサイズのデフォルトは1M(1048576)

いきなり、スタックオーバーフローが – プログラミング – Home

おすすめ

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です