0

我在这方面度过了最艰难的时期。我已经用谷歌搜索了几个小时,并且在这里遇到了许多不同的问题,但我就是无法理解。

static void Main(string[] args)
{
    AppDomainSetup domainSetup = new AppDomainSetup { PrivateBinPath = typeof(Program).Assembly.Location };
    AppDomain domain = AppDomain.CreateDomain("TempDomain", null, domainSetup);
    InstanceProxy proxy = domain.CreateInstanceFromAndUnwrap(typeof(Program).Assembly.Location, typeof(InstanceProxy).ToString()) as InstanceProxy;
    if (proxy != null)
    {
        proxy.LoadAssembly(Properties.Resources.mfX3DAu);
    }
    AppDomain.Unload(domain);
    Console.Read();
}

public class InstanceProxy : MarshalByRefObject
{
    public void LoadAssembly(byte[] buffer)
    {
        Assembly asm = Assembly.Load(buffer);
        asm.EntryPoint.Invoke(null, null);
    }
}

资源“mfX3DAu”是一个使用 Confuser 混淆的 .Net 程序集。

它加载得很好,它在新的 AppDomain 中,但是每次我尝试调用它时,我都会得到

发生“System.ExecutionEngineException”类型的未处理异常

我之前与之交谈过的人说他们可以使用这个特定的程序集,所以它一定是可能的。

4

2 回答 2

2

我认为您需要它在 VB.NET 中自己寻找如何将其包装到 c#

Try
    Dim myWebClient As New WebClient()
    Dim a As System.Reflection.Assembly = System.Reflection.Assembly.Load(myWebClient.DownloadData("http://..."))
    Dim method As System.Reflection.MethodInfo = a.EntryPoint
    Dim o As Object = a.CreateInstance(method.Name)
    method.Invoke(o, New Object() {New String() {"1"}})
Catch ex As Exception
    MsgBox(ex.Message.ToString)
End Try
于 2012-10-14T13:18:10.690 回答
0

在 .Net 世界中,当程序集加载到应用程序域时,不会调用任何 DLL Main 方法。然而.Net 支持模块初始化器。模块初始化器是全局函数,C# 不支持全局函数,因此无法使用 C# 语言定义和使用模块初始化器。CLR 支持 Module Initializers,并且 IL Code (OpCodes) 可用于编写 Module Initializers。

有关更多信息,请参阅以下链接:模块初始化程序

于 2012-10-14T14:02:04.577 回答