代码在可执行文件中是如何存储的?

5

我了解到,可执行文件会将代码存储在不同的部分。例如,数据等都有单独的部分。这个概念是否适用于不同平台,比如Windows、MacOS或Linux?

对此的一些见解将非常有帮助。

2个回答

4
您的观点是正确的,一个可执行文件有多个部分或段:但并不是所有的都是代码。
通常会有一个用于代码的段 - 在 ELF 和 PE 中,这通常被称为 .text。还有其他一些段用于存储动态链接数据、硬编码字符串、只读数据、全局变量等等。
如果您想亲自了解这些,而不是查看 Wiki 和 Google,请尝试实践:
在 Windows 中:您可以使用名为 DUMPBIN.EXE 的工具,它是 Visual Studio 的一部分。如果您无法使用该工具,可以使用 Dependency Walker(可免费下载)。这将解析 PE 和 PE32+(即 64 位)文件。
在 Linux 中:对于 ELF 文件,请使用 objdump -x 或 readelf(两者基本相同,但选项略有不同)。
在 Mac 中:请使用 otool -l 来查看 Mach-O 文件中的加载命令(这将显示段和部分)。
使用任何一个或所有工具都有望让您更好地了解事物是如何工作的。
希望这能帮到您,
TG

2
Windows使用可移植可执行格式(Portable Executable format)。
*nix通常使用可执行与可链接格式(Executable and Linkable Format)。此前,一些系统使用SOM、a.out、ECOFF、XCOFF、COFF等格式。
OS X和iOS(以及NeXT,历史迷们)使用Mach-O格式。
PowerPC系统仍支持首选可执行格式(Preferred Executable Format),这种格式曾用于早期的Mac OS和某些形式的BeOS。
您可以先参考http://en.wikipedia.org/wiki/Comparison_of_executable_file_formats

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接