excel-dep问题

原创
2014/11/11 01:04
阅读数 29

今天,小x突然报告,“对excel-03执行强制dep后,excel老是启动就崩溃”。

看了看代码,没发现什么问题,代码已经精简到只剩下底裤了,又要死脑细胞了。

恰好有windbg双机调试环境,启动调试。奇葩了,excel启动不崩溃了。

只有windbg-r3调试,触发崩溃。崩溃的堆栈是mso.dll中触发mov [esp+4], xxx.

此时内存地址是有效的,但是在只读区域,导致写错误,今儿excel崩溃。

想了想,始终不明白为啥强制dep开启后,会对只读内存进行写操作。

多次崩溃,发现只读内存地址是随机的,写入的数据也是随机的,但是崩溃指令都是mov [esp+4],xxx。

首先,想第一个解决办法:在excel入口点进行强制dep,而非execel装载阶段。

很快发现,入口点处还没有加载mso.dll。

然后,想到第二个解决办法,跟踪excel文档的打开。

调试发现,直接打开excel并不会触发崩溃,只有单独运行excel才会崩溃。什么情况,完全梦了。

继续调试,一次偶然的机会,直接打开excel,但是有CreateFileW断点(自动打印文件名),居然没有崩溃。

反复验证,调试打开excel,直接运行崩溃;调试打开excel,createfilew断点(自动继续下一次断点),崩溃了。


总结,目前的状态。

直接启动excel,崩溃。

双机调试,不崩溃。

调试快速运行excel,崩溃。

调试慢速运行excel,不崩溃。

每次崩溃的内存地址不同,都是写只读内存,写的数据不同。


冥冥中感觉这些不同似乎是随机化导致的,dep+随机化+excel。

猛然想起,是不是因为开启了atl的dep模拟,导致了atl库除了问题,所以出现了同一错误的随机体现。

经过验证,取消dep的atl模拟,问题就解决了。


太奇葩了,还是不清楚具体的原因。这需要去跟踪dep的atl模拟代码了。


展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部