首先,是构建一个全局的appDomain(这儿不是程序域的意思,只是取其名字意思来表示)
基于WWW的方式加载AssetBundle或者DLL/PDB后,接下来是将其封入到MemoryStream中,将dll和pdb的bytes都存入到内存流中后,执行其内部实现的LoadAssembly方法。
关键的是第一行,从Mono中加载模块:
其中ImageReader最终来自BinaryReader:
那么接下来的ReadImage操作:

这四个操作,是最核心的操作,分别读取DLL的PE的各个信息,这样我们就进入下一个步骤。
主要读取PE的相关信息,不做过多解释,可以参看源码阅读理解;
读取分块数据
封装一个Section,然后去执行读取,然后赋值给section的Data,注意回退了Index

4) ReadMetadata

核心是两个操作,一个是ReadMetadataStream,就是根据不同的标识符来新建不同的存储结构;一个是ReadTableHeap:

初始化heap中的Table后,进行一次Compute,获取size:

基于这四步操作,我们可以将IL的汇编码存储到Image中,然后进一步执行后续的CreateModule操作:
其中的ReadModule为:
具体的读取manifest和Module内部数据,可以参看源码。
读取完module后,我们下一篇文章再详细讲解如何执行IL语句,这篇文章先写到这儿吧 :D