如何解决如何获取加载到不同 AppDomain 中的 c# 程序集的内存基地址
ProcessModuleCollection pc = Process.GetCurrentProcess().Modules;
foreach(ProcessModule pm in pc)
{
Console.WriteLine("The moduleName is " + pm.ModuleName);
Console.WriteLine("The " + pm.ModuleName + "'s base address is: " + pm.BaseAddress);
}
不幸的是,这不适用于我的场景。我正在做的是创建一个新的和分离的 AppDomain(称为 Temporal)并使用它从磁盘加载程序集。然后,我只是执行加载的程序集中包含的一些函数。这将是包含所有这些逻辑的类的代码:
public class Loader : MarshalByRefObject
{
object CallInternal(string dll,string method,string[] parameters)
{
byte[] buffer = File.ReadAllBytes(dll);
Assembly a = Assembly.Load(buffer);
Type[] types = a.GetTypes();
MethodInfo m = null;
Type myType = null;
foreach (var type in types)
{
m = type.getmethod(method);
if (m != null)
{
myType = type;
break;
}
}
if (m != null && myType != null)
{
var myInstance = Activator.CreateInstance(myType);
return m.Invoke(myInstance,new object[] { parameters });
}
else
{
return null;
}
}
public static object Call(string dll,params string[] parameters)
{
AppDomain dom = AppDomain.CreateDomain("Temporal");
Loader ld = (Loader)dom.CreateInstanceAndUnwrap(Assembly.GetExecutingAssembly().FullName,typeof(Loader).FullName);
object result = ld.CallInternal(dll,typename,method,parameters);
return result;
}
问题是,有没有办法在不执行某种内存扫描的情况下获取加载程序集的内存基址?您从 ProcessModuleCollection
获得的 Process.GetCurrentProcess().Modules
未显示 AppDomain Temporal
中加载的程序集。允许使用不安全和非托管代码。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。