所以我发现 C(++) 程序实际上不会编译为普通的“二进制”(我可能在这里犯了一些错误,在这种情况下我很抱歉:D),而是编译为一系列的东西(符号表) ,与操作系统相关的东西,...)但是...
编辑:我知道汇编器不会“编译”,因为它只有你机器的指令集 - 我没有找到一个好词来形容汇编器“汇编”的内容。如果你有的话,请将其留在这里作为评论,我会更改它。
C 通常编译为汇编程序,只是因为这让可怜的编译器编写者的生活变得轻松。
汇编代码总是汇编(不是“编译”)可重定位目标代码。您可以将其视为二进制机器代码和二进制数据,但带有大量装饰和元数据。关键部分是:
例如,如果您编译并汇编(但不链接)该程序
int main () { printf("Hello, world\n"); }
你可能会得到一个可重定位的目标文件
如果您使用的是 Unix 系统,可重定位目标文件通常称为 .o 文件,如下所示hello.o
,您可以使用一个名为的简单工具来探索标签定义和使用nm
,您可以从一个更复杂的工具(称为objdump
.
我教授一门涵盖这些主题的课程,我让学生编写汇编器和链接器,这需要几周的时间,但是当他们完成后,大多数人都可以很好地处理可重定位目标代码。这不是一件容易的事。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)