PE格式,IAT目录有什么用

2024-02-05

在 PE 格式中,我们有导入表目录(通过IMAGE_DIRECTORY_ENTRY_IMPORT)和 IAT 目录(通过以下方式访问)IMAGE_DIRECTORY_ENTRY_IAT) 两者都是可选标头数据目录的一部分。

使用导入表,加载器动态加载并解析必要的库和函数。 这是通过迭代导入地址表 RVA(Thunk 表)来完成的,该表是导入表的一部分。

那么,如果我们使用导入目录进行导入解析,我们需要 IAT 目录做什么?

我一直在读微软PE规范 http://msdn.microsoft.com/library/windows/hardware/gg463125但找不到答案。另外,SO中有一些问题,但大多数都使用IAT来引用Thunk表而不是IAT目录。

Thanks

EDIT

我认为导入地址表(导入表目录中的一个字段)和导入地址表(称为 IAT 目录)之间存在混淆。 我的问题是关于 IAT 目录的。

再次感谢


您链接的 PE 规范第 5.4.4 章对此进行了很好的描述。它们是相同的表:

导入地址表的结构和内容与导入查找表的结构和内容相同,直到文件被绑定。在绑定期间,导入地址表中的条目将被导入符号的 32 位(对于 PE32)或 64 位(对于 PE32+)地址覆盖。这些地址是符号的实际内存地址,尽管从技术上讲它们仍然被称为“虚拟地址”。加载器通常处理绑定

也许解释一下为什么这样做很重要。 PE 文件通过直接映射到内存来加载到进程中。底层操作系统原语是内存映射文件。这提供了几个重要的优化:

  • 可执行文件使用的内存不必由分页文件支持。如果操作系统需要 RAM 用于另一个进程,则可以简单地丢弃映射到可执行文件的页面。当进程产生页面错误时从PE文件再次重新加载。

  • 进程为其可执行代码使用的 RAM 可以由该进程的任何实例共享。换句话说,当您多次启动 Notepad.exe 时,只有oneRAM 中代码的副本。每个进程共享相同的页面。这对于 DLL 来说最为重要,尤其是每个进程中使用的操作系统 DLL,如 ntdll.dll、kernel32.dll 和 user32.dll(等等)。

当加载程序使用导入函数的实际地址填充 IAT 时,操作系统会重新映射 IAT 的页面,并由分页文件支持它们。因此每个进程都可以有自己的一组导入地址。包含代码和导入表的其余页面仍然是共享的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PE格式,IAT目录有什么用 的相关文章

  • 如何解决内存碎片

    我们偶尔会遇到这样的问题 长时间运行的服务器进程 在 Windows Server 2003 上运行 由于内存分配失败而引发异常 我们怀疑这些分配由于内存碎片而失败 因此 我们一直在寻找一些可能对我们有帮助的替代内存分配机制 我希望有人能告
  • 设置 Form.KeyPreview = true 的缺点?

    我想知道 Form KeyPreview 属性实际上有什么用处 它为什么存在以及将其设置为 true 会带来什么 风险 我想它一定有some负面影响 否则它根本不应该存在 或者至少默认情况下是正确的 EDIT 我很清楚what确实如此 我问
  • 本地推送通知到在应用程序内运行 JS 代码的 Win8 Live Tile

    我正在尝试将更新发送到我的应用程序的磁贴 当应用程序运行时 这可以正常工作 例如 当用户单击按钮时 我可以轻松地将磁贴更新通知发送到磁贴 我无法解决的是当应用程序无法运行时如何更新磁贴 我找到的唯一选择是使用以下命令从远程 Web 服务器拉
  • Vim 在 Mingw 上表现异常

    我在 MinGW 4 6 2 上的 Vim 表现得很奇怪 例如 在插入模式下按 Backspace 会删除字符 但我必须用箭头键移动光标才能删除的字符消失 而且它也会使我退出插入模式 另一个例子 按 Del 删除字符有时会生成奇怪的字符 例
  • 自定义波特率,redux

    我遇到的问题详述如下自定义波特率 https stackoverflow com questions 7714060 custom baud rate SetCommState 波特率 921600 失败 但波特率 115200 成功 尽管
  • 如何从Windows阻止社交媒体[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我想根据时间阻止我的电脑上的社交媒体 晚上 9 点后屏蔽 上午 11 点后解锁 如家长控制 我尝试过关注但失败了 创建了
  • 如何在批处理文件中回显换行符?

    如何从批处理文件输出中插入换行符 我想做类似的事情 echo hello nworld 这会输出 hello world Use echo hello echo echo world
  • Windows 窗口对接

    我想知道如何在 Windows 中将窗口停靠 捕捉到屏幕的一侧 最好使用直接的 Win32 API 我正在寻找的效果就像任务栏 一个在屏幕上有保留空间的窗口 因此最大化另一个窗口会使该窗口占据屏幕的其余部分 但使我的窗口保持在适当的位置并可
  • 不在焦点时响应键盘? (C#、Vista)

    我正在尝试编写一个应用程序 只要按下 Shift 键 无论当前哪个应用程序具有焦点 它都会做出响应 我尝试过这个SetWindowsHookEx 与GetKeyboardState 但这两种方法仅在应用程序窗口具有焦点时才有效 我需要它在全
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • Windows 目录永远不会包含临时文件的非 ASCII 字符?

    在 Windows 上使用 MinGW 7 3 0 由于 Windows 限制 Hunspell 无法从包含非 ASCII 字符的位置加载字典文件 我已经尝试了所有方法 1 现在我将文件复制到没有 ASCII 字符的路径 然后再将其交给 H
  • 卸载以前的版本安装新版本的安装项目

    我创建了一个安装项目并安装在Windows系统中 在安装安装项目之前 我将其设置为 DetectNewInstallerVersion true and RemovePreviousVersion True 我也每次都换版本 但是 如果我重
  • Tensorflow 导入错误:没有名为“tensorflow”的模块

    我在 Windows Python 3 5 Anaconda 环境中安装了 TensorFlow 验证成功 有警告 tensorflow C gt python Python 3 5 3 英特尔公司 默认 2017 年 4 月 27 日 1
  • 在 Win7 登录屏幕上运行应用程序[重复]

    这个问题在这里已经有答案了 我想通过服务在 Windows 7 的登录屏幕上运行应用程序 我对此进行了长期研究并尝试了不同的方法 但不幸的是到目前为止还没有完全成功 我设法在当前登录用户的锁定屏幕上运行该应用程序 起初我认为这就是我基本上试
  • 将所有文件与指定目录(和子目录)中的所有文件进行二进制比较

    我需要将目录及其子目录中包含的所有文件与同一目录及其子目录中包含的所有其他文件进行比较 并将匹配文件的路径记录到文本文件或 CSV 我意识到有一些软件工具可以做到这一点 但除非它可以在 Windows 中开箱即用 否则我将不被允许在我的网络
  • 为什么我在 Windows 上使用 async 和 wait 时会收到 NotImplementedError 错误?

    我有这个代码 import os import time import asyncio async def run command args Example from http asyncio readthedocs io en lates
  • 如何迭代所有注册表项?

    我正在尝试迭代所有注册表项以查找 包含 并删除 jre1 5 0 14 值 有办法做到吗 下面的代码只是在特定键下找到jre1 5 0 14 我确实想迭代所有的键 顺便说一句 if 子句获取是否等于 jre1 5 0 14 但如果它包含 j
  • 在 Windows 中使用 PHP 创建受密码保护的 Zip 文件

    我正在 PHP 中创建给定文件的 zip 文件 下面是函数 function create zip file file name zip new ZipArchive zip name file name zip Zip name zip
  • 供所有 Win32 程序员在 Windows Aero Glass(DWM、GDI、GDI+)上绘图的文档和 API 示例

    我正在寻找良好的资源来学习使用 Win32 GDI API 或任何替代它的内容 以便使用 Win32 API 直接在玻璃窗体上进行绘制和绘制 当我使用 Delphi 时 我将其标记为 Delphi 或 Visual C 您能找到的任何代码示
  • 如何处理来自单独线程的窗口消息?

    我希望启动一个单独的线程来处理窗口消息 通过阻塞 GetMessage 循环 但之后仍然在初始线程中创建窗口 在单独的线程中 一旦启动 我就会调用PeekMessage使用 PM NOREMOVE 确保消息队列存在 有必要吗 然后 Atta

随机推荐

  • 如何将拖动视图绑定到ScrollView项目中?

    我创造了ScrollView具有三视图 我想将拖动的视图绑定到ScrollView 其余没有拖放的视图应该保持在外面ScrollView 怎么可能 请参阅 GIF 我想在 ScrollView 中添加draggableView Code i
  • “&”和“ref”有什么区别?

    我明白如何 有效 但是它和有什么区别ref 它们可以互换吗 我发现的唯一信息 因为在谷歌上搜索符号效果不太好 是Rust 示例页面 http rustbyexample com flow control match destructurin
  • ms-access:当我将扩展名更改为 ACCDR 时,表单/表格消失

    我想向某些人分发一个访问前端 并且我想确保他们不会编辑其中的任何内容 但是 当我将扩展名更改为 ACCDR 时 它会使所有表单和表格消失 我必须更改哪些设置才能使他们能够打开表单但不能在设计视图中查看它们或对表单进行任何更改 accdr 扩
  • 如何将 Regexp.last_match 传递给 Ruby 中的块

    有什么办法可以通过最后一场比赛 几乎Regexp last match 到 Ruby 中的块 迭代器 这是一个示例方法 作为一种包装器Srring sub来演示问题 它接受标准参数和块 def newsub str rest bloc st
  • JQuery UI 在 Scripts.Render 之后无法在 MVC 4 中工作?

    不确定这里出了什么问题 我已经阅读了一些其他解决方案并尝试使用它们 但似乎没有任何效果 我想做的就是渲染一个日期选择器 我以前已经做过很多次了 只是不确定我是否有大脑故障 因为过去几周我一直处于 关键 时间 或者什么 我有最新的 JQuer
  • Autoit 3 通用按键

    似乎应该有一个通用的按键监听器 如下所示 hotkeysset listener func listener key msgbox 0 Key You pressed key endfunc while true sleep 100 wen
  • WebAPI 帮助页面 - 返回或参数模型/类属性的文档

    我正在使用 Web API 帮助页面和 Web API 2 5 0 都是最新的 Nuget 包 我希望帮助文档显示作为参数或在 HttpResponseMessage 正文中返回的类的属性的注释 例如 我有一个像这样的控制器方法 publi
  • 让gulp动态地将css写入与处理后的scss文件相同的目录中

    我希望编写 gulpfile js 扫描主题目录中的 style scss 文件 其想法是读取 style scss 文件并在同一目录中写入相应的 style css 和 min 文件 我遇到的问题是 在不确切知道目录是什么的情况下 我找不
  • 如何检查字符串是否仅包含拉丁字符?

    如何检查字符串是否包含 a zA Z 仅限字符 Example var str 123z56 不需要 jQuery if str match a z i alphabet letters found
  • 多维数组填充

    我正在尝试填充多维数组中的一个区域 但不确定该方法 例如我有以下数组 var map 0 0 0 0 0 0 0 0 0 0 2 2 2 2 2 2 0 0 0 2 0 0 0 0 2 0 0 0 2 0 2 0 0 2 0 0 0 2 0
  • Eclipse 2020-06 Javascript - 语法突出显示不起作用

    将我的 Eclipse IDE 更新到实际的 2020 06 版本后 JavaScript 的语法突出显示不再起作用 这是一个已知 常见问题吗 我该如何解决这个问题 在花了大半天的时间研究它 包括安装 Eclipse PDT 的新实例 后
  • 在受限用户帐户 XP 中运行时,C# 应用程序无法读取/写入管理员创建的文件

    我有一个可供所有用户 管理员或受限用户 在 NET 特别是 C 中使用的应用程序 当应用程序首次启动时 它会在 C Documents and Settings All Users Documents 中创建一些后续启动所需的文件 如果 X
  • 是否有用于生成 MOBI 电子书文档的 Java 或 Ruby 库? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 Calibre 项目中有一个用于此目的的 Python 库 但我想找到一个可以从 Clojure 或 Ruby 使用的库 有任何想法吗 查
  • 生成图像并将其与其他内容一起显示在 JSP 中

    我正在使用 JFreeChart 根据用户输入生成动态图表 我有一个带有一些文本框和组合框的 JSP 用户输入并提交它 操作处理它 生成图表图像 我需要在文本框 组合框下方的同一个 JSP 上显示此图像 如果我使用response setC
  • 构建 VITE 应用程序时如何分配自定义 CSS 文件名?

    是否可以在VITE中构建并使用application name css or my site name css VITE 可以选择构建自定义 JS 文件 但不能构建自定义 CSS 或 SCSS 文件 用于导出 https vitejs de
  • 如何在 XCassets 中使用立方体纹理类型

    我正在尝试学习 SceneKit 开发并尝试在后台添加天空盒 为了存储立方体贴图纹理 我发现 XCAssets 有一个类型立方体纹理集 https developer apple com library archive documentat
  • 单向 SSL 是单向加密吗?

    如果使用 SSL 的一种方式 服务器证书身份验证 则从客户端发送的数据将使用服务器证书的公钥进行加密 因此客户端发送的数据可以得到隐私保护 我的问题是 这是否意味着从服务器发送到客户端的一种方式 SSL 数据未加密并以纯文本形式发送 对于服
  • JSF 中的线程?

    我是 JSF 新手 我需要使用 Threads 来处理 google 地图 我正在使用 primefaces 进行谷歌地图 但我需要在后台执行一个线程以从数据库获取纬度和经度 然后在地图中绘制标记 您的问题并非特定于 JSF 而是针对一般的
  • Facebook 页面插件无法正常工作

    我需要一个嵌入式 Facebook 页面插件 但是facebook的代码生成器不起作用 当我给出 facebook 页面的 url 时 生成器不会给出该页面的代码 预览模式下也不会出现该页面 脸书页面是 https www facebook
  • PE格式,IAT目录有什么用

    在 PE 格式中 我们有导入表目录 通过IMAGE DIRECTORY ENTRY IMPORT 和 IAT 目录 通过以下方式访问 IMAGE DIRECTORY ENTRY IAT 两者都是可选标头数据目录的一部分 使用导入表 加载器动