主要观点总结
文章描述了在将旧版本dll替换到新软件中遇到的堆栈指针问题。文章的关键点包括:在win7和win10下运行新软件时遇到的问题,逆向分析过程中发现函数入口使用rsp和函数结束使用esp的问题,以及这个问题在win7和win10下表现不同的原因。
关键观点总结
关键观点1: 软件在新旧操作系统中的兼容性问题
文章中描述了在将新软件中的插件替换旧版本时遇到的问题,win7下正常运行,但在win10下闪退。
关键观点2: 逆向分析过程中的堆栈指针问题
文章详细描述了逆向分析过程中发现的堆栈指针问题,入口使用rsp和出口使用esp的冲突问题。
关键观点3: 问题产生的根源和解决方案
通过分析发现了导致问题的原因:直接操作32位寄存器会将高32位清零,最后解释了问题的解决方法以及测试中为何在win7和win10下表现不同。
关键观点4: 编译细节和问题探讨
文章提到了编译过程中入口使用rsp和结尾使用esp的情况,同时提出了一个关于为什么使用这样的编译方式的问题。
文章预览
来自公众号: 轩辕的编程宇宙 今天给大家分享一个有趣的问题,来增长一点知识。 一位小伙伴( 歌虽无形 )遇到的问题,后来研究清楚后,我让他总结分析了一下,我稍微改了一下,分享给大家。 事情是这样的: 公司采购了新软件,想在新软件下沿用旧的一些插件和功能,于是就将旧版本的dll直接替换了新版本。 然而,诡异的现象出现了,win7下能正常运行,但win10却怎么也跑不起来,一运行就会会闪退。 学习逆向,当然要自己来动手解决这个问题,是时候展示真正的技术了。 经过分析,发现了崩溃的地方,有个函数入口的地方反汇编后是长这个样子的: 注意看,入口处,函数开辟栈帧,把栈顶抬高了0x298的大小,使用了 sub rsp, 298h 指令。 然后是函数结束返回的地方,要恢复栈空间,使用了 add, esp, 298h 指令: 聪明的你一定已经发现问题了,
………………………………