проблема начинается с вызова функции для монофонической функции, которая еще не поддерживается. вызов сделан из библиотеки DLL с близким matlab, которая называется MWARRAY.DLL (.net версии 2.x), эта dll обычно используется с VS .NET и работает, если вы используете .net 3.5.
функция: [mscorlib] System.Security.Principal.WindowsIdentity :: GetCurrent (bool)
Я могу придумать несколько возможных решений, но я не уверен, как их сделать:
- декомпилировать dll и заменить байт-код аналогичной и работающей функцией: [mscorlib] System.Security.Principal.WindowsIdentity :: GetCurrent ()
обратите внимание, что в функцию не передано логическое значение
- скомпилируйте моно и напишите функцию самостоятельно
- , используя старую версию 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
HEX команд call и stloc:
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
шестнадцатеричный код скомпилированных / декомпилированных строк, выделенных жирным шрифтом:
28 00 00 0A 6F 1B 00 00 0A 13 08 17
Я хотел бы знать, есть ли у кого-нибудь идея предлагаемых путей решения или что-нибудь еще, что может прийти в голову?