クラッシュ手順 (これらのいずれかがアクセス違反を引き起こします):
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 レジスタ セレクターは、これと関係がありますか? 試してみるべき提案や解決策はありますか?
ありがとうございました!