Nik*_*kos 6 assembly executable exe portable-executable
通过使用 7zip 在 Windows 中打开许多可执行 ( .exe., .msi) 文件,我注意到许多不同的常见文件类型。这些包括 .text、.data、.bss、.rdata、.pdata 等。我试图获取有关它们的信息,但我无法找出它们的全部含义。以下是其中一些:
.text :代码部分,包含程序的指令-只读-。 .data: 一般用于一些初始化的非零内容的可写数据。因此,数据部分包含可以在应用程序执行期间更改的信息,并且必须为每个实例复制该部分。.bss : 用于初始化为零的可写静态数据。 .rdata : 任何类型的常量/只读数据都存储在这里。 .edata : 导出目录、描述符和句柄 .idata:句柄和描述符的导入目录。可执行文件(exe、dll 等)使用它来指定导入和导出的函数。.rsrc :包含可执行文件所需的各种其他资源的信息的部分,例如在资源管理器中查看可执行文件时显示的图标 还有很多其他的,这是常见的,我找不到任何信息。主要是:.pdata, .tls, .reloc, 证书, .rsrc_1, .aspack, .adata, .INIT, DATA, CODE, .ctors。
rsrc其中大多数都包含一个文件夹,其中包含 BITMAP、CURSOR、ICON、GROUP_CURSOR、GROUP_ICON、MENU、VERSION 等文件夹。
一些可执行文件还包含更多的可执行文件、.html文件、.txt文件等。我还打开了一个根本不包含任何内容的可执行文件(至少用 7zip 打开它没有显示任何内容)![我用7zip打开了它们。]
问题
rsrc文件夹有什么用?它拥有什么样的资源?我将不胜感激,如果您能发布更多关于为什么使用所有这些(尽可能低级别)的信息/链接,以及通常可执行结构应该是什么样子,它应该包含什么等。
这就是全部。
编辑
我发现了其他常见的部分标题名称。为了完整起见,我将在这里发布它们的含义。
.reloc : 包含重定位表。 .pdata : 包含用于异常处理的函数表条目数组,由图像数据目录中的异常表条目指向 *data : 自定义数据部分名称 .init:此部分包含有助于进程初始化代码的可执行指令。也就是说,当一个程序开始运行时,系统会安排在主程序入口点(在C程序中称为main)之前执行本节中的代码。.fini:此部分包含有助于进程终止代码的可执行指令。即当程序正常退出时,系统会安排执行该段代码。.ctors : 保留构造函数列表的部分 .dtors : 包含析构函数列表的部分 节名称与文件格式无关,工具链(通常是链接器)可以选择任何它喜欢的东西。操作系统不使用名称来查找它关心的部分,它使用文件头中的数据目录。其中包含数字,而不是名称。该名称仅用作帮助识别部分的助记符。或者可能用于帮助语言运行时或调试器找到数据目录未涵盖的部分。
节名称有一些一致性,主要是按照惯例。像 BSS 这样奇怪的部分名称可以追溯到 50 年代,在 Fortran 中使用,是 Block Started by Symbol 的首字母缩写词。猜测它今天的用途并没有太大帮助:) 您可以假设名为 CODE 的部分将包含可执行代码并且等效于 .text,这是更常见的名称选择。.tls 和 .reloc 之类的名称可以毫不费力地映射到相应的数据目录条目。
.rsrc 的相同receipe,映射到数据目录中的第三个条目。对于操作系统而言,像 LoadString 这样的 winapi 函数需要它。
但是,只有详细了解工具链,才能真正了解古怪的工具链。
操作系统加载程序通过使用可执行文件作为后备存储的内存映射文件将一个部分直接放入虚拟内存中。这就是 .text、.data 和 .bss 等部分的使用方式,请注意它们在数据目录中没有相应的条目。链接器负责生成正确的地址,就像 25 多年前那样,不需要操作系统的帮助。除了 .reloc 部分,如果文件无法映射到其首选基地址,那是旧的。
| 归档时间: |
|
| 查看次数: |
2816 次 |
| 最近记录: |