2011-08-06 17 views
-2

こんにちは、ありがとうございました!ecxレジスタに書き込むと、Windows 7で「アクセス違反」が発生する

私のC++コードには組み込みアセンブラコードがいくつかありますが、[mov ecx、1AF858h]の行には "Access violation"というエラーメッセージがポップアップしています。 Windows XPでは完全に動作しますが、残念ながらWindows 7では動作しません。

問題の原因はわかりません。問題を解決するために必要なことを知りたいと思います。

種類よろしく、デビッド

+0

これはどこで行われたかによって大きく異なります。いくつかのコードを表示してください。また、あなたのコードはどちらの場合でも32ビットのターゲットにコンパイルされますか? –

+3

Visual Studioの場合、インラインアセンブリは32ビットモードでのみ使用できます。あるクラスの中で、ECXレジスタはしばしば 'this'ポインタを保持します。変更すると「面白い」効果が得られる可能性があります。 –

+1

本当に 'mov ecx、[1AF858h]'ではなく '[mov ecx、1AF858h]'ですか?後者の場合、アドレス0x1AF858から読み取っている間は標準的なアクセス違反に過ぎず、ecxとは何の関係もありません。しかし、とにかくエラーのコードやコンテキストを投稿してください。 – user786653

答えて

3

あなたが実行可能ファイルとしてあなたのバイト配列をマークしたり(おそらくPAGE_READWRITEコード、その後PAGE_EXECUTE_READを書くときに)正しいflagsを使用してVirtualAllocでそれを割り当てるためにVirtualProtect/VirtualProtectExを使用する必要があります。おそらく、ページ単位で行う必要があることに注意してください。

+0

ありがとうございます!それは今働く。私が使っているコード:VirtualProtect(ptr、size、PAGE_EXECUTE_READWRITE、&flOldProtect) – user667967

関連する問題