【发布时间】:2013-06-24 13:07:07
【问题描述】:
不要误会我的意思,看看问题标题 - 我知道它们是什么(可移植可执行文件的格式)。但我的兴趣范围略有不同
我的困惑
我参与重新托管/重新定位最初来自第三方的应用程序。问题是有时目标代码的格式也是 .elf、.COFF 格式,并且仍然显示“可执行和可链接”。
我主要是 Windows 用户,并且知道在编译和汇编 C/C++ 代码时,会得到类似于 .o 或 .obj 的内容。是不可执行的(好吧,我从来没有尝试过执行它们)。但是当您完成链接静态库和动态库并完成构建时,会出现可执行文件。我的理解是,如果需要,您可以使用某种形式的脚本链接该可执行文件或“bash”对其进行测试。
但是,在 Linux(或类似 UNIX 的系统)中,在您编译和汇编 C/C++ 代码之后会有 .o 文件。一旦链接完成,可执行文件就是 a.out 格式(至少在 Linux 的 Ubuntu 发行版中)。它很可能是其他发行版中的 .elf。在我的快速网络搜索中,没有任何来源提到任何关于 .o 文件作为可执行文件的内容。
问题
因此我的问题变成了以下问题:
可移植可执行文件和目标代码的true定义是什么?
Windows 和 UNIX 平台如何涵盖相同文件格式(.COFF、.elf)下的可执行文件和目标代码。
我是否误解了“可链接”?我对“可链接”的解释是编译的目标代码,然后可以“链接”到其他静态/动态链接库。这是一个愚蠢的想法吗?
基于问题 1。(也许还有问题 2)我是否需要将符号表(例如 .LUM 或 .MAP 文件)与目标代码一起使用?调试符号中的符号以及在不同机器上重新托管可执行文件/目标文件时使用它们。
提前感谢您的正确推动。同时,如有必要,我会继续挖掘和更新问题。
更新
我已经设法从某个地方挖出this :( 对我来说似乎有很多东西要吞下。
【问题讨论】:
标签: linker executable elf coff