惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
G
Google Developers Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Engineering at Meta
Engineering at Meta
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
F
Full Disclosure
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
J
Java Code Geeks
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
V
V2EX
C
Cisco Blogs
博客园 - 司徒正美
Project Zero
Project Zero
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
Scott Helme
Scott Helme
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
T
Threatpost
Recorded Future
Recorded Future
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
S
Security Archives - TechRepublic
博客园 - Franky
N
News | PayPal Newsroom
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
W
WeLiveSecurity
A
Arctic Wolf
B
Blog

博客园 - WesleyNet

大声的告诉自己:今天,我要开始新的生活 oracle数据同步 Oracle数据性能优化 remoting和webservice 递归 网络编程的几个问题 一个dotnet的人应该知道的 aspnet面试题2 C#.Net常见面试题 asp.net不同页面间数据传递 asp.net跳转页面的三种方法比较 类和结构 羊皮卷之一 aspnet 数据验证 转ANYTAO的学习方法 面向对象(2)--深入继承 - WesleyNet - 博客园 面向对象(1)——对象创建 接口和抽象类 (欢迎探讨)取n到m行 SQL,大家帮忙看看第三条语句对不对?
程序加载和执行
WesleyNet · 2009-03-14 · via 博客园 - WesleyNet

程序集加载器:查找程序集,找到将程序集装载到调用者的AppDomain中,在装载前加载器将使用Policy Manager校验相应的安全权限,确保调用者被允许使用该程序集。
程序集下载者(downloader)是程序集加载器的一部分,用于查找程序集,并将其下载到本地(如果程序集不在本地),以便装载,开发者可以在配置文件中指定附加的
下载位置,配置文件必须和应用程序在同一目录,并遵循如下的命名,在程序集文件名后附加扩展名“.config”,如: xxx.exe.config。源程序的位置在:/clr/src/fusion。
目录的查找顺序:
  GAC目录(如果是StrongName Assembly)
  应用目录
  应用子目录
  配置文件中的附加位置

程序集找到后,下载器将程序集流(文件名)传递给加载器,加载器使用Policy Manager校验相应的安全权限,确保程序集能在该环境下运行以及用户有执行该程序集的许可。
然后,继续fusion,将程序集加载到AppDomain,并调用类加载器(class loader)。

  nExitCode = _CorExeMain2(NULL, 0, pFileName, NULL, pCmdLine);                       //clr\src\tools\clix\clix.cpp:
    result = CoInitializeEE(COINITEE_DEFAULT | COINITEE_MAIN);  //初始化虚拟执行引擎  //clr\src\vm\ceemain.cpp:
    bRetVal = ExecuteEXE(pImageNameIn);
          SystemDomain::ExecuteMainMethod(hMod);    //clr\src\vm\assembly.cpp
          hr = ClassLoader::RunMain(pMeth, 1, &iRetVal, stringArgs); //clr\src\vm\clsload.cpp
          然后弄了一个线程,在线程里运行
             ARG_SLOT stackVar = ObjToArgSlot(StrArgArray); //在这里才装入?
  分析clix感觉不对,Policy Manager以及downloader都没有看到!

=== 类加载器 ===
当类准备执行的时候类加载器就会被调用。这发生在:
  1、程序集的主入口点被加载
  2、正在执行的对象引用了一个从未加载的对象。
类加载器将从程序集中加载该类的全部定义,然后准备相应的对象实例化:
  复制IL以及该类的MetaData
  准备类的数据结构(EEClass)
  创建初始化类的的方法表(MethodTable and Vtable)