【问题标题】:What's the difference between a Windows executable's Data Directory entry and Section Header entry?Windows 可执行文件的 Data Directory 条目和 Section Header 条目之间有什么区别?
【发布时间】:2019-01-01 09:42:53
【问题描述】:

我有一个 Windows 可执行文件 .exe。我查看了文件,发现Data Directory. 在其中是Thread Local Storage 的目录条目。该条目指定了这一点:

RVA (Relative Virtual Address) of the data: 10000
Size of the data: 24

我在可执行文件中找到了节表,它包含一个名为.tls(线程本地存储)的节头。该标头指定了这一点:

Pointer to the raw data: A400
Size of the raw data: 512

可执行文件的这两部分有什么区别?他们似乎都在谈论线程本地存储,但他们指向不同的地方并指定不同的大小。

这只是一个例子。这是另一个示例:Data Directory 中是 Import DirectorySection Table 中是 Section Header,名为 .idata(导入数据)。它们包含看似矛盾的价值观。

还有其他例子。

Data Directory中的条目和the Section Table中的entries有什么区别?

【问题讨论】:

  • 这完全不同。每个众所周知的数据目录都有严格的格式。部分可以是任意的,具有任意名称。每个 Data Directory 都属于某个部分。全部

标签: windows executable portable-executable


【解决方案1】:

exes 通常在 ram 中加载到地址 0c00400000 及更多

rva adressas 是之后的偏移量(例如 0x00401000,它可能是 ram 中代码的开头是 0x1000 的 rva)

exes 也是从部分构建的,这些部分在加载到 ram 时通常与 4096 对齐(位于不同的 ram 页面中),而在磁盘上的 exe 文件中,它们通常与 512 对齐(以节省空间)

例如 0x00401007 在 ram 中的地址,在 rva 中为 0x1007,在文件中为 0x207...PE 格式的一些信息作为 rvas 和一些作为文件偏移量提供......该部分中包含的数据大小也可能是给定为未对齐(例如 177)和对齐(例如 512),这是相同的大小,但一个是对齐的,一个不是..

pe 中的哪些确切字段存储了需要在 pe 格式详细信息中检查哪种格式的信息(这是一种令人困惑的格式,但在学习后它表明它并不那么可怕)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 2016-02-04
    • 2012-03-17
    • 2015-10-04
    • 2016-10-07
    相关资源
    最近更新 更多