ExecutionEngineException

CLR で ExecutionEngineException なんていうレアな例外が発生してしまいましてw

InterlockedExchange() で落ちているんですがね、

嘘泣きしながら WinDbg を起動してダンプファイルを開いたのです。

 

レジスタの内容が出てきちゃってw、懐かしいですなwww

xchg edx,dword ptr [ecx]

で落ちてますな。Access violation (コード 0xC000005) ですわ。

 

「exchange」って「値の交換」じゃないですか。

アセンブリコードも xchg ですし。

ぱっと見で思うにこれ交換じゃマズい気がするんですよね。

mov じゃないとダメなんじゃないかなー?

 

InterlockedExchange() 関数で言うと、

「交換」で第二引数に値をぶっ込んじゃダメだと思うんですよ。

VS のデバッガーでも調べたのですが第一引数のポインタ先の

値って 0x00000000 なんですよねw

 

ソースコードでは InterlockedExchange() の第二引数は関数への

ポインタになってたので、0x00000000 をぶち込んだら

そりゃ怒られそうですよねwwwww

 

そんなとこですかね。

xchg ではダメで、mov じゃないといけないと思う。

Interlocked の mov する関数は何なんだろ・・・

(つづく)