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

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

但还是没有解决问题。

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

请问大神这是什么原因?

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

谢谢。

阅读 4.9k
2 个回答

堆和栈做个区分,只有线程才有一个栈,也就是线程栈。
你在这里设置的不过是你DLL的堆栈大小,这个是木有用的。因为你的DLL中的函数,是注入到explorer程序的线程中去运行了。
建议你还是采取动态分配的方式,但是一个模块一个堆,所以你需要在你的DLL主动释放你申请的内存。
当然,也可能问题的关键不在这里。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题