我写了个DLL,用工具注入到explorer.exe,运行到某些函数的时候会导致DLL崩溃从而引发explorer.exe崩溃,
用drwtsn32.ex生成了dump文件,用windbg分析了下说是堆栈溢出。
(因为程序需要,所以数组定义的都特别大,MAXSIZE是6W多 Σ( ° △ °|||)︴)
于是我在工程属性里改了一下:
但还是没有解决问题。
但是在测试的EXE里用LoadLibrary加载就一切正常。而且没有在工程设置里改变堆栈大小(默认的空)
请问大神这是什么原因?
难道是注入到explorer.exe后,堆栈保留大小受explorer.exe的设置控制?如果是的话,请问该如何解决?
谢谢。
阿神2017-04-17 15:36:34
ヒープとスタックを区別してください。スレッドのみがスタック (スレッド スタック) を持ちます。
ここで設定するのは DLL のスタック サイズだけです。これは役に立ちません。 DLL 内の関数がエクスプローラー プログラムのスレッドに挿入されて実行されるためです。
引き続き動的割り当てを使用することをお勧めしますが、各モジュールにはヒープがあるため、DLL に適用したメモリを積極的に解放する必要があります。
もちろん、問題の核心はここではない可能性があります。