我读到可执行文件将代码存储在不同的部分。例如,数据等的单独部分。这是否跨不同平台(如 Win、MacO 或 Linux)通用?
对它的一些见解将非常有帮助。
我读到可执行文件将代码存储在不同的部分。例如,数据等的单独部分。这是否跨不同平台(如 Win、MacO 或 Linux)通用?
对它的一些见解将非常有帮助。
您是正确的,因为可执行文件具有多个部分或段:但是,并非所有部分都是代码。
通常有一段代码——在 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
Windows 使用 Portable Executable 格式。
*nix 通常使用可执行和可链接格式。以前有些使用 SOM、a.out、ECOFF、XCOFF、COFF 和其他一些。
OS X 和 iOS(以及 NeXT,历史爱好者)使用 Mach-O。
PowerPC 系统仍然支持与早期 Mac OS 和某些形式的 BeOS 一起使用的首选可执行格式。
也许从http://en.wikipedia.org/wiki/Comparison_of_executable_file_formats开始