DynCall on Windows 8.1
DynCall 0.8をWindows 8.1で使う場合の注意。というか覚書。
x86 Buildした限り、Compileはうまくいくけど、testのthunkがheapで失敗する。
00939EA8 nop
00939EA9 nop
00939EAA nop
00939EAB mov eax,939EA8h
00939EB0 jmp dword ptr [eax+0Ch]
とか、こんな感じでgenerateした code呼び出しのところで落ちてる。
DCThunk構造体をmallocで確保したメモリーに対して構築して動的関数呼び出しを行っているのだが、
mallocで確保したメモリーではコードの実行が許可されていないためにSegmentation Faultで落ちて
どうやってもこのテストは成功しません。DEPを切れば行ける気もしますが、DEPが無効にできなかったっす。
Windows環境では ページに読み書き+実行属性付のメモリーを確保してやらなければならない。
これは VirtualAllocを使って実現できる。
DynCallで dcAllocWX/dcFreeWXが用意されており、これが内部的にVirtualAllocを使ってくれるので これを使う。
dcAllocWX/dcFreeWXのテストは問題無く実行できているのでこのテストはFailしていても特に気にしないで良い。