Windows可执行文件的数据目录条目和Section Header条目之间有什么区别?

问题描述 投票:0回答:1

我有一个Windows可执行文件.exe文件。我在文件里面偷看,发现它里面的Data Directory.Thread Local Storage的目录条目。该条目指定了:

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

我在可执行文件中找到了Section Table,它包含一个名为.tls(Thread Local Storage)的Section Header。该标头指定了这个:

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

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

这只是一个例子。这是另一个例子:在Data DirectoryImport Directory,在Section TableSection Header,名为.idata(进口数据)。它们包含看似矛盾的价值观。

还有其他例子。

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

windows executable portable-executable
1个回答
0
投票

exes通常以ram加载到0c00400000以及更远

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

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

所以例如在RAM中的0x00401007,在rva中将是0x1007,在文件中是0x207 ...... PE格式一些信息作为rvas给出,一些作为文件集...也包含在该部分中的数据大小也可以作为未对齐给出(比如说177)和对齐(如512),这是相同的大小,但一个是对齐的,一个不是..

pe存储信息中的哪些确切字段需要以pe格式详细信息检查哪种格式(这是令人困惑的格式但在学习之后显示不那么疤痕)

© www.soinside.com 2019 - 2024. All rights reserved.