問題は、まだサポートされていない mono 関数への関数呼び出しから始まります。呼び出しは、MWARRAY.DLL (.net バージョン 2.x) と呼ばれる近い matlab DLL から行われます。この dll は通常 VS .NET で使用され、.net 3.5 を使用する場合に機能します。
関数は次のとおりです: [mscorlib]System.Security.Principal.WindowsIdentity::GetCurrent(bool)
いくつかの可能な解決策を考えることができますが、それらを行う方法がわかりません:
- dll を逆コンパイルし、バイト コードを同様の機能する関数に置き換えます。 [mscorlib]System.Security.Principal.WindowsIdentity::GetCurrent() 関数にブール値が渡されないことに注意してください。
- mono をコンパイルして自分で関数を書く
- 古いバージョンの MWARRAY.DLL を使用している (見つからなかったが、同じコードを使用している可能性がある)
逆コンパイルには IDA を使用しました。最初の関数 CIL + HEX への呼び出しがある場所を以下で見つけました
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
call および stloc コマンドの HEX:
28 96 00 00 0A
また、他のコマンドがバイトコードでどのように見えるかを確認するためだけに、両方の関数を呼び出して、独自の dll をコンパイルおよび逆コンパイルしました。
loc_3AE:
call class [mscorlib]System.Security.Principal.WindowsIdentity [mscorlib]System.Security.Principal.WindowsIdentity::GetCurrent()
callvirt class System.String [mscorlib]System.Security.Principal.WindowsIdentity::get_Name()
stloc.s 8
ldc.i4.1
太字のカスタム コンパイル/逆コンパイル行の 16 進数:
28 00 00 0A 6F 1B 00 00 0A 13 08 17
誰かが提案された解決策のパス、または頭に浮かぶ可能性のある何かを知っているかどうか知りたいですか?