据我所知
.c source转到程序集然后转到目标文件,然后目标文件相互链接(和库),我们得到了可以从os运行的应用程序。
但是目标文件是什么样的呢?
它看起来像.asm还是更像.exe?
如何存储目标文件中的指令?正如“mov add call”伪代码或机器无意义的代码?(是问题)
答案 0 :(得分:2)
目标文件有一些符号信息(通常是专有的,编译器/链接器相关的)和准备好执行的原始编译机器代码。
Linux和许多其他系统中使用的ELF(可执行和可链接格式)如下所示:
答案 1 :(得分:1)
机器代码。您可以使用gcc -S
来获取程序集,使用gcc -c
来获取目标文件。
答案 2 :(得分:1)
目标文件是编译器所针对的特定处理器的机器代码,以及库中的函数名称等符号信息,以便运行时链接代码可以找到可执行代码的内存位置(在目标文件中)。
Ooh @hexa在登录时提供了更好的答案:)
答案 3 :(得分:1)
在Linux系统上尝试 objdump 命令,以显示有关目标文件的信息,如:
objdump -D <filename.o> | more