搜尋

首頁  >  問答  >  主體

C++,为何改变工程堆栈大小还是不能解决堆栈溢出的问题呢?

我写了个DLL,用工具注入到explorer.exe,运行到某些函数的时候会导致DLL崩溃从而引发explorer.exe崩溃,
用drwtsn32.ex生成了dump文件,用windbg分析了下说是堆栈溢出。
(因为程序需要,所以数组定义的都特别大,MAXSIZE是6W多 Σ( ° △ °|||)︴)
于是我在工程属性里改了一下:

但还是没有解决问题。

但是在测试的EXE里用LoadLibrary加载就一切正常。而且没有在工程设置里改变堆栈大小(默认的空)

请问大神这是什么原因?

难道是注入到explorer.exe后,堆栈保留大小受explorer.exe的设置控制?如果是的话,请问该如何解决?

谢谢。

天蓬老师天蓬老师2807 天前565

全部回覆(2)我來回復

  • 阿神

    阿神2017-04-17 15:36:34

    堆和棧做個區分,只有執行緒才有一個棧,也就是執行緒棧。
    你在這裡設定的不過是你DLL的堆疊大小,這個是木頭有用的。因為你的DLL中的函數,是注入到explorer程式的執行緒中去運行了。
    建議你還是採取動態分配的方式,但是一個模組一個堆,所以你需要在你的DLL主動釋放你申請的記憶體。
    當然,也可能問題的關鍵不在這裡。

    回覆
    0
  • PHP中文网

    PHP中文网2017-04-17 15:36:34

    顯示您的程式碼

    回覆
    0
  • 取消回覆