2012-01-16 14 views
3

この問題は、まだサポートされていないmono関数への関数呼び出しから始まります。 MWARRAY.DLL(.netバージョン2.x)と呼ばれるclose matlab DLLから呼び出しが行われます。このDLLは通常VS .NETで使用され、.net 3.5を使用すると動作します。UNITY3DとMATLABのMWARRAY.DLLを使用してサポートされていないMONO関数 "System.Security.Principal.WindowsIdentity.GetCurrent(bool)"

機能は次のとおりです。[mscorlib] System.Security.Principal.WindowsIdentity :: GetCurrent(ブール値)

私はいくつかの可能な解決策を考えることができますが、私はそれを行う方法がわからないです:

  1. デコンパイルのDLLと同様のと作業機能をバイトコードを置き換える:[mscorlib] System.Security.Principal.WindowsIdentity :: GetCurrent()は、関数に渡されたブール
  2. コンパイルモノ及び書き込みがないことを通知 自分自身を機能させる
  3. MWARRAY.DLLの古いバージョンを使用しています(同じコードを使用することはできませんでした)。

私はIDAを使用しました。私はまた、コンパイルされ、逆コンパイル

28 96 00 00 0A 

: iは

loc_38B1:  
ldsfld native  
int [mscorlib]System.IntPtr::Zero 
stloc.s 7  
ldc.i4.0 
stloc.s 8 
ldc.i4.1 
stloc.s 9 
ldc.i4.1 
call class [mscorlib]System.Security.Principal.WindowsIdentity::GetCurrent(bool) 
stloc.s 0xA 
call void [mscorlib]System.Runtime.CompilerServices.RuntimeHelpers::PrepareConstrainedRegions() 
    .try { 
ldc.i4.0 
stloc.s 0xB 
br  loc_3982 

以下最初の関数、CIL + HEXコールとstlocコマンドのHEXへの呼び出しがある場所を発見しました私自身のdll、両方の関数を呼び出すだけで、他のコマンドがどのようにバイトコードで表示されるかを見ることができます:

太字のカスタムコンパイル/逆コンパイルラインの

進:

28 00 00 0A 6F 1B 00 00 0A 13 08 17 

私は誰もが心の中で来るかもしれない提案された解決策パス、または何か他のアイデアを持っているかどうかを知りたいですか?

+0

モノアセンブリ(MSCORLIB)はおそらく署名されているため、改ざんできません(オプション#1の除外)。また、別の環境用にコンパイルされたコードを使用すると、他の問題が発生する可能性があります(実際にコードが実装されていないMonoメソッドを5つ使用するとどうなりますか? –

+0

私はそれらの5つすべてを明らかに修正します。私はそれを最初に試してみてはいけないのかどうかはわかりません。 – ori

+0

mscorelibを変更する必要はありません。mwarray.dllを変更するだけです。 – ori

答えて

2

これが解決されました。

.net reflectorを使用してmwarray.dllを抽出すると、Visual Studio内からコードを変更することができます。

MCR()の行330の周りにgetcurrent()が呼び出されています。 replace = null;

関連する問題