首页 文章

Windows 7上的FS注册访问冲突

提问于
浏览
0

崩溃说明(其中任何一个都会导致访问冲突):

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](数据显示为未知):

PUSHAD
PUSH 004DE918
MOV EAX,DWORD PTR FS:[0]
PUSH EAX

该应用程序是否会导致寄存器损坏,但可能导致这种情况发生的原因仅在于Windows 7而不是在XP上? Windows 7上53的不同FS注册选择器是否与此有关?我可以尝试任何建议或解决方案吗?

谢谢!

1 回答

  • 0

    Windows使用FS寄存器来快速访问也称为TEB(线程环境块)的TIB(线程信息块) . 存储器中覆盖TIB数据结构的段的FS存储选择器 . 我希望这个段的大小非常小,并且由于对TEB大小之外的任何地址的访问将导致一般故障异常 . 实际上,TEB数据结构布局和在TE中存储TEB的地址是未记录的,并且可以由Microsoft从版本更改为版本 . 也许在Windows 7中TEB大小减少了 .

    无论如何要更有效地讨论这个问题,请在崩溃时刻提供FS和ESI的 Value .

相关问题