Windows Internals学习笔记(七)Image Loader
参考资料:
1. 《Windows Internals》
2. Fibers
知识点:
● 当一个进程在系统上启动时,内核将创建一个进程对象来代表它,并执行各种内核相关的初始化任务。然而,这些任务不会真正执行应用,而只是进行上下文和环境的准备工作。应用程序不像驱动(内核模式),它执行在用户模式下。因此,大部分初始化工作实际上都是在内核外完成的,且该工作是由Image Loader(Ldr)执行的。
● Image Loader存在于用户模式下的系统DLL Ntdll.dll中,而不在内核库中。Ntdll.dll总是会被加载,因此,Loader段代码总是存在运行进程中,且作为新应用程序运行在用户模式下的第一部分代码(即Loader运行在实际中应用程序代码之前,且对用户和开发者是不可见的)。
● 另外,尽管Loader的初始化任务是隐藏的,然而,应用程序确实在其运行时会跟它的接口进行交互。具体来说Loader的主要任务如下:
① 初始化应用程序的用户模式状态,比如创建初始堆和建立本地线程存储(TLS)和本地纤程存储(FLS)slots。
② 解析应用程序的Import Address Table(IAT)以查找它所需的所有DLLs,然后再递归地解析每个DLL的IAT。然后,解析DLLs的导出表Export Table以确保每个函数都存在。
③ 在需要时,加载和卸载DLLs,并维护一个所有被加载模块的列表。
④ 顾及hotpatching。
⑤ 处理清单文件。
⑥ 为各shim读取应用程序兼容性数据库,并在需要时加载shim引擎DLL。
⑦ 使能API集和API重定向的支持(MinWin重构的核心部分之一)。
⑧ 使能动态运行时兼容性减少(通过SwitchBranch机制)。
● 在进程被创建后,Loader调用一个特殊的本地API以继续执行(基于一个在栈上的上下文帧)。上下文帧由内核创建,包含了实际的应用程序进入点。因此,由于Loader并未用标准的调用或跳转到运行时应用程序,我们不会把Loader初始化函数看做是进程栈trace上的调用树的一部分。
Windows Internals学习笔记(七)Image Loader的更多相关文章
- Windows Internals学习笔记(八)IO系统
参考资料: 1. <Windows Internals> 知识点: ● 当一个进
- Windows Internals学习笔记(六)Windows关键系统组件
参考资料: 1. <Windows Internals> 2. Dependency Walker 3. Ntoskrnl.exe 4. Livekd的使用 5. WinDbg的使用(一) ...
- Windows Internals学习笔记(五)Synchronization
参考资料: 1. <Windows Internals> 2. 自旋锁spinlock剖析与改进 3. Lock指令前缀 4. Lock指令前缀(二) 5. Kernel Dispatch ...
- Windows Internals学习笔记(四)Trap Dispatching
参考资料: 1. <Windows Internals> 知识点: ● 陷阱trap:它是一种处理器机制,用以在某一异常或中断出现时,捕捉该执行线程,并将其控制权转交到操作系统中某一固定位 ...
- Windows Internals学习笔记(二)系统架构
参考资料: 1. <Windows Internals> 2. http://bestcbooks.com 3. Windows Drive Kit 4. Microsoft Window ...
- Windows Internals学习笔记(一)概念与工具
参考资料: 1. <Windows Internals> 2. Windows Drive Kit 3. Microsoft Windows SDK 4. WDK下载地址 知识点: 1. ...
- Windows Internals学习笔记(三)Procdump的使用
参考资料: 1. 下载地址 2. 使用示例
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...
随机推荐
- php对二维数组进行相关操作(排序、转换、去空白等)
php对二维数组进行相关操作(排序.转换.去空白等) 投稿:lijiao 字体:[增加 减小] 类型:转载 时间:2015-11-04 这篇文章主要介绍了php对二维数组进行相关操作,包括php对 ...
- 《UML大战需求分析》阅读笔记01
在刚学习软件开发的课程时,首先学习了UML设计,但只是学习了基本的语法,虽然在学期通过课堂练习进行了实践,但并没有真正理解其中作用.为了进一步的理解UML的用法,我阅读了<UML大战需求分析&g ...
- eclipse安装JS插件
在eclipse中有三种Javascript插件可供选择: JSDT JSEclipse Spket Spket插件安装: 手动安装:到http://www.spket.com/download.ht ...
- jquery 图片本地预览
uploadPreview.js /* *名称:图片上传本地预览插件 v1.1 *介绍:基于JQUERY扩展,图片上传预览插件 目前兼容浏览器(IE 谷歌 火狐) 不支持safari *参数说明: I ...
- zepto源码--核心方法9(管理包装集)--学习笔记
今天介绍的是与子元素相关的函数,children, find, contents children 从源码来看,主要是调用过滤函数filtered对遍历整个包装集返回的children进行过滤. 仔细 ...
- Java 并发性和多线程
一.介绍 在过去单 CPU 时代,单任务在一个时间点只能执行单一程序.之后发展到多任务阶段,计算机能在同一时间点并行执行多任务或多进程.虽然并不是真正意义上的“同一时间点”,而是多个任务或进程共享一个 ...
- des加密解密的两个方法
<?php //$input - stuff to decrypt //$key - the secret key to use function do_mencrypt($input, $ke ...
- jQuery源代码学习之六——jQuery数据缓存Data
一.jQuery数据缓存基本原理 jQuery数据缓存就两个全局Data对象,data_user以及data_priv; 这两个对象分别用于缓存用户自定义数据和内部数据: 以data_user为例,所 ...
- LaTeX插入图表方法 Lists of tables and figures
Lists of tables and figures A list of the tables and figures keep the information organized and prov ...
- zabbix报警媒介------>微信报警
zabbix报警媒介------>微信报警 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 欢迎加入高级运维工程师之路:598432640 微信在我们的生活中使用的比较频繁,有 ...