gpt4 book ai didi

Windows Loader 对 DLL 的操作

转载 作者:行者123 更新时间:2023-12-03 07:53:36 25 4
gpt4 key购买 nike

我正在读 John Levine 的《Linkers and Loaders》一书中的这段话,描述了在 Windows 中加载 dll 的过程:

For each imported DLL, there is an array of import addresses, typically in the program’s text segment, into which the program loader places the resolved addresses.

这在两个方面让我感到惊讶:

  1. 文本段不是只能读取/执行吗? (也许加载程序只有在写入后才会更改其权限?)
  2. 这不会使文本段在进程之间不可共享吗? Linux 竭尽全力保持库的所有实例的文本段相同(“位置无关代码”)。这难道不是 Windows 的目标吗?

最佳答案

导入地址数组由PE文件可选头中的16个数据目录之一标识,即导入地址表(IAT)。它通常位于其自己的部分 .idata 中,但某些链接器可能会将 IAT 与 IMPORT Table.text 部分捆绑在一起。

  1. 是的,.text代码段只能读取和执行,但只有在 Windows 加载程序解析完导入函数的所有地址并将其存储到 IAT 后才能建立访问权限。
  2. Windows 动态库 (DLL) 的每个实例仅加载到内存一次。当运行同一PE程序的多个实例时,所有所需的DLL都被映射到相同的虚拟地址,因此它们的IAT内容在运行时是相同的。然而,大多数DLL都有不同的部分.text.idata,因此导入函数的映射地址可以是随机的( ASLR )。
    Microsoft 似乎不太关心 PIC,每个 DLL 都可以使用其 .reloc 部分加载到任意虚拟地址并在需要时重新定位。

关于Windows Loader 对 DLL 的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76558050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com