欢迎光临 Rick 's BLOG
日志首页  | C# .Net编程  | 原创作品  | 生活点滴  | C\C++相关  | 多媒体相关※ERMP  | VB相关  | 其它运维与编程  |  留言簿
Windows 2003 上使用 Windows Live Writer 在 FlexGrid 控件中指定最右侧显示的列
未知  .Net 中枚举AppDomains
[ 发布日期:17年前 (2008-05-22) ]   [ 来自:rick@博客园 ] [分类:C# .Net编程]
.Net 框架提供的基础类库中并没有枚举AppDomains的功能,只提供了获取当前执行代码所在的AppDomain功能。

国外一家提供.Net保护工具的,同时提供了一个AppDomain dump工具。用来证明其保护有效。

名称就不提了,简单介绍一下其保护原理:整体加密保护,支持嵌入程序集生成单一可执行文件。

也就是用native loader 包裹一下,仍然还是整体加密保护模式。

但是和其它工具有一点区别。程序集整体解密后不是放在默认AppDomain中执行的,它另外创建了一个AppDomain。

其提供的dump 工具的原理:

注入到选择的进程,然后获取当前AppDomain,枚举AppDomain中的 程序集,直接整体dump程序集。

这个工具可以对付大多数整体加密保护。却对付不了他们自家的。被其用来证明自己的保护效果。

 

程序集一般在默认AppDomain中执行的,其注入后,获取当前appdomain得到的使默认AppDomain,所以无法枚举被加密保护的程序集。

如果加上AppDomain的枚举功能,这个工具就可以用来对付他们自己的保护产品了。

 

基础类库中并没有枚举AppDomains的功能,那是否可以在C#中实现呢?

答案使肯定的。基础类库没有,但是其宿主接口提供了这个功能。

ICorRuntimeHost 接口中的两个方法

EnumDomains 和 NextDomain 。

具体详情可以参考 msdn。

在C#中怎么使用呢?

首先添加引用

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscoree.tlb

路径根据实际情况来定,版本号也不一定非得要2.0.50727 只要存在 mscoree.tlb就行。

这个接口在 1.0 中就提供了,更高的版本就不用说了。
[复制到剪贴板]

IntPtr enumHandle IntPtr.Zero;

CorRuntimeHostClass host = new mscoree.CorRuntimeHostClass();

host.EnumDomains(out enumHandle);

object domain null;

while (
true)

{

host.NextDomain(enumHandleout domain);

if (
domain == null) break;

AppDomain appDomain = (AppDomain)domain;

//********

}

host.CloseEnum(enumHandle);

Marshal.ReleaseComObject(host);
 


引用通告地址 (0):
复制引用地址https://www.rickw.cn/trackback/229
复制引用地址https://www.rickw.cn/trackback/229/GBK
[ 分类:C# .Net编程  | 查看:3515 ]

暂时没有评论,快来发表一个评论吧。
发表评论
作者:   用户:[访客] 
评论:

表  情
禁止表情 | 禁止UBB | 禁止图片 | 识别链接
对不起,你没有权限上传附件!
验证:
 
PoweredBy R-Blog V1.00 © 2004-2024 WWW.RICKW.CN, Processed in second(s) , 7 queries    京ICP备17058477号-5