参考资料:

  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的更多相关文章

  1. Windows Internals学习笔记(八)IO系统

    参考资料: 1. <Windows Internals> 知识点: ● 当一个进

  2. Windows Internals学习笔记(六)Windows关键系统组件

    参考资料: 1. <Windows Internals> 2. Dependency Walker 3. Ntoskrnl.exe 4. Livekd的使用 5. WinDbg的使用(一) ...

  3. Windows Internals学习笔记(五)Synchronization

    参考资料: 1. <Windows Internals> 2. 自旋锁spinlock剖析与改进 3. Lock指令前缀 4. Lock指令前缀(二) 5. Kernel Dispatch ...

  4. Windows Internals学习笔记(四)Trap Dispatching

    参考资料: 1. <Windows Internals> 知识点: ● 陷阱trap:它是一种处理器机制,用以在某一异常或中断出现时,捕捉该执行线程,并将其控制权转交到操作系统中某一固定位 ...

  5. Windows Internals学习笔记(二)系统架构

    参考资料: 1. <Windows Internals> 2. http://bestcbooks.com 3. Windows Drive Kit 4. Microsoft Window ...

  6. Windows Internals学习笔记(一)概念与工具

    参考资料: 1. <Windows Internals> 2. Windows Drive Kit 3. Microsoft Windows SDK 4. WDK下载地址 知识点: 1. ...

  7. Windows Internals学习笔记(三)Procdump的使用

    参考资料: 1. 下载地址 2. 使用示例

  8. (转)Qt Model/View 学习笔记 (七)——Delegate类

    Qt Model/View 学习笔记 (七) Delegate  类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...

  9. Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

随机推荐

  1. 内省操作javabean的属性

    import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector ...

  2. Python脚本模拟登录网页之ZiMuZu篇

    ZiMuZu.tv这个网站喜欢看电影看美剧的人一定都熟悉. 这个网站原先的升级策略是每天登陆网站, 然后去一个"每日签到"的页面点击一个签到按钮, 以实现帐号等级的升级. 之前网上 ...

  3. 【转】Unity中的协同程序-使用Promise进行封装(三)

    原文:http://gad.qq.com/program/translateview/7170967 译者:崔国军(飞扬971)    审校:王磊(未来的未来) 在这个系列的最后一部分文章,我们要通过 ...

  4. yii2知识点理解(成员属性)

    yii2成员属性 成员变量类似于public $a; 成员属性类似于 public function a(){} 成员变量是就类的结构构成而言的概念,而属性是就类的功能逻辑而言的概念 成员属性应用: ...

  5. dns服务

    http://33024.blog.163.com/blog/static/12307042220119179237568/

  6. angular 路由去除#号

    1.  路由启动          $locationProvider.html5Mode(true);  通过pushstatex修改url app.js define([ 'angular', & ...

  7. [转]倍数提高工作效率的 Android Studio 奇技

    转自:http://android.jobbole.com/81687/ 倍数提高工作效率的 Android Studio 奇技 2015/10/08 · 技术分享 · 4 评论· Android S ...

  8. ios - GCD简单小结

    首先GCD两个名词: 队列 同步异步. 队列: 任务放到队列,队列中的任务执行方式取决于执行队列中任务的方式---同步异步. 串行队列: 任务顺序执行,可以叫阻塞队列.只有前面任务完成才执行后面的. ...

  9. http cache 原理实战演习

    有篇博文介绍的原理已经比较清楚了,见下面链接, 本文给出实验结果. http://www.cnblogs.com/cocowool/archive/2011/08/22/2149929.html La ...

  10. zjuoj 3608 Signal Detection

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3608 Signal Detection Time Limit: 2 Sec ...