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の世界では、アセンブリがアプリケーションドメインに読み込まれるたびに呼び出されるDLLMainメソッドはありません。ただし、.Netはモジュールイニシャライザーをサポートしています。モジュールイニシャライザーはグローバル関数であり、C#はグローバル関数をサポートしていないため、モジュールイニシャライザーをC#言語を使用して定義および使用することはできません。CLRはモジュールイニシャライザーをサポートし、ILコード(OpCodes)を使用してモジュールイニシャライザーを記述できます。

詳細については、次のリンクを参照してください:モジュール初期化子

于 2012-10-14T14:02:04.577 に答える