崩溃指令(其中任何一个都会导致访问冲突):
LODS BYTE PTR FS:[ESI]
LODS WORD PTR FS:[ESI]
LODS DWORD PTR FS:[ESI]
我正在尝试为尝试移植 Windows 95 游戏的客户端修复崩溃,但由于没有可用的源代码,我目前正在汇编中进行调试。该应用程序在 Windows 7 上频繁且随机地崩溃,但在 Windows XP 上运行良好。调试它表示访问冲突,并且在尝试访问 FS 寄存器时发生。
我在 XP 和 Windows 7 上都进行了调试和比较,发现访问冲突发生是因为使用 ESI 访问 FS 寄存器时,在 Windows 7 上地址总是超出范围。我还尝试在汇编代码中添加 SEH 异常处理程序但即使在读取 FS:[0] 时也会发生访问冲突(那里的数据显示为未知):
普沙德 推 004DE918 MOV EAX,DWORD PTR FS:[0] 推EAX
应用程序是否会导致寄存器损坏,但仅在 Windows 7 上而不是 XP 上发生这种情况的可能原因是什么?Windows 7上53的不同FS寄存器选择器与此有关吗?有什么建议或解决方案让我尝试吗?
谢谢!