http://msdn.microsoft.com/en-US/

搜索

specification

搜索“PE COFF specification”,得到一篇Microsoft官方的PE格式文档:

http://download.microsoft.com/download/9/c/5/9c5b2167-8017-4bae-9fde-d599bac8184a/pecoff_v83.docx

这是我读过的讲解最清晰的关于PE格式的文档。

1. export、import与符号链接

关于dll的好处,这里不再详述,总之,dll机制带来了空间与时间上的效率提升。

dll是一种shared library机制,是一个封装“代码、数据和资源”的模块,现在几乎没有不依赖于dll的应用程序了。

当一个可执行文件(exe)被用来创建一个进程时,该exe文件会被Windows操作系统的组件“加载器”加载到进程的内存地址空间中;如果应用程序引用到了其他dll模块中的符号(函数或者变量),就需要将这些dll也加载到进程的地址空间中,由于ASLR等等客观原因影响,exe中引用外部符号的代码块无法提前预知dll中的某个符号被加载到内存地址空间的什么位置上,因此它需要一种提示机制来指导加载器在加载的过程中解析引用符号的真正地址。

这种机制可以被称为是“符号链接”,或者说是“加载时的符号链接”,它依赖于exe中的import table以及dll中的export table给出的提示信息。

import table提供以下信息:

[dll name] + [symbol ordinal that index into dll's export table entry]

[dll name] + [symbol name]

 

而export table则提供symbol name到symbol ordinal的映射关系,然后以symbol ordinal作为index到export table中找到符号的真正地址(dll被加载到内存地址空间后,符号的内存地址)

import table的布局:

Import Directory Table * 1

Import Lookup Table * N

Hint/Name Table * 1

Microsoft specification的更多相关文章

  1. MCE----Machine-check exception

    http://en.wikipedia.org/wiki/Machine_Check_Exception Machine-check exception From Wikipedia, the fre ...

  2. EF架构~引入规约(Specification)模式,让程序扩展性更强

    回到目录 规约(Specification)模式:第一次看到这东西是在microsoft NLayer项目中,它是微软对DDD的解说,就像petshop告诉了我们MVC如何使用一样,这个规约模式最重要 ...

  3. Microsoft source-code annotation language (SAL) 相关

    More info see: https://msdn.microsoft.com/en-us/library/hh916383.aspx Simply stated, SAL is an inexp ...

  4. 探索Microsoft.NET目录

    所在目录:D:\Windows\Microsoft.NET(d盘为系统盘) 文件目录 |--D:\Windows\Microsoft.NET |------assembly |------GAC_32 ...

  5. REST API设计指导——译自Microsoft REST API Guidelines(四)

    前言 前面我们说了,如果API的设计更规范更合理,在很大程度上能够提高联调的效率,降低沟通成本.那么什么是好的API设计?这里我们不得不提到REST API. 关于REST API的书籍很多,但是完整 ...

  6. REST API设计指导——译自Microsoft REST API Guidelines(二)

    由于文章内容较长,只能拆开发布.翻译的不对之处,请多多指教. 另外:最近团队在做一些技术何架构的研究,视频教程只能争取周末多录制一点,同时预计在下周我们会展开一次直播活动,内容围绕容器技术这块. 所有 ...

  7. C# Language Specification 5.0 (翻译)第一章 引言

    C#(念作 See Sharp)是一种简单.现代.面向对象并且类型安全的编程语言.C# 源于 C 语言家族,因此 C.C++ 和 Java 工程师们能迅速上手.ECMA 国际[1](ECMA Inte ...

  8. Microsoft OS Descriptors

    Microsoft OS Descriptors Updated: April 11, 2014 USB devices store standard descriptors in firmware ...

  9. Microsoft OWIN

    About OWIN defines a standard interface between .NET web servers and web applications. The goal of t ...

随机推荐

  1. php开发面试题---php 对swoole的理解

    php开发面试题---php 对swoole的理解 一.总结 一句话总结: 以战养学,实例驱动 swoole是披着PHP外衣的C程序:其实就是c.java那些语言里面的高阶功能:比如 持久连接.异步通 ...

  2. 12. MySQL简单使用

    关于MySQL的使用,大家可以去网上看相关教程,但是为了保证阅读的连贯性,这里会做简单介绍. 创建数据库 我们双击刚刚新建的数据库,然后双击mysql,点击新建查询,可以在编辑器里面输入一些mysql ...

  3. jQuery表单对象属性过滤器再探究(原创)

    上面例子的总结: 1.”+n+”千万不要把前面或者后面的+漏掉了.否则不会出现正确结果 2.$(“:checkbox”).click(countChecked)注意写法,不是click(functio ...

  4. CSS实现进度条

    进度条经常运用于网页,即使我们意识到不是所有的东西都将瞬间被加载完成,这些进度条用于提醒使用者关于网页上具体的任务进程,譬如上传,下载,加载应用程序等. 以前如果想要创建一个进度条的动画效果,没有使用 ...

  5. spark复习总结03

    1.DataFrame的创建方式 1.1 通过加载外部文件创建 //通过sqlContext读取json文件创建DataFrame DataFrame dataFrame=sqlContext.rea ...

  6. ReentrantReadWriteLock的相关使用

    ReentrantLock具有完全互斥排他的效果,同一时间只有一个线程执行ReentrantLock.lock()方法后面的任务,这样虽然能够保证线程安全性,但是效率是比较低的 ReentrantRe ...

  7. Python第十二节 异常

    Python 第十三节 异常 python的错误一般包含两类: 语法错误 : 语法错误一般就是, 当你写完程序提交的时候, 发现无法提交, 提示存在错误.例如: 英文逗号 错写成了 中文逗号 异常 : ...

  8. Javascript基础一(介绍)

    Javascript的发展历史: JavaScript在设计之初只是为了做表单验证.但是现如今,JavaScript已经成为了一门功能全面的编程语言,已经是WEB中不可缺少的一部分,如今的JavaSc ...

  9. 【转载】github 查找最火项目

    博主感觉这篇文章很有用,很方便所以转载过来学习学习. 原文链接地址https://www.cnblogs.com/poterliu/p/10634568.html 如何在github上查找star最多 ...

  10. shell变量的间接引用