この問題は、まだサポートされていない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(ブール値)
私はいくつかの可能な解決策を考えることができますが、私はそれを行う方法がわからないです:
- デコンパイルのDLLと同様のと作業機能をバイトコードを置き換える:[mscorlib] System.Security.Principal.WindowsIdentity :: GetCurrent()は、関数に渡されたブール
- コンパイルモノ及び書き込みがないことを通知 自分自身を機能させる
- 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
私は誰もが心の中で来るかもしれない提案された解決策パス、または何か他のアイデアを持っているかどうかを知りたいですか?
モノアセンブリ(MSCORLIB)はおそらく署名されているため、改ざんできません(オプション#1の除外)。また、別の環境用にコンパイルされたコードを使用すると、他の問題が発生する可能性があります(実際にコードが実装されていないMonoメソッドを5つ使用するとどうなりますか? –
私はそれらの5つすべてを明らかに修正します。私はそれを最初に試してみてはいけないのかどうかはわかりません。 – ori
mscorelibを変更する必要はありません。mwarray.dllを変更するだけです。 – ori