2011-08-11 206 views
3

因为我知道
.c源程序汇编然后它转到目标文件,然后目标文件链接到对方(和库),我们得到的应用程序,我们可以从操作系统。
但是目标文件是什么样的?
它看起来像.ASM或多个例如.exe?
如何对象文件中的指令存储在哪里?作为“MOV添加通话” 伪代码或机器无谓的代码?(是问题)目标文件看起来像什么

+0

机器代码。如果有很少的改动,编译代码的处理器可以“理解”目标文件的内容。 – pmg

+0

有很多不同风格的目标文件,请参阅:http://en.wikipedia.org/wiki/Object_file – miku

回答

1

机器代码。您可以使用gcc -S获取程序集,使用gcc -c获取目标文件。

+0

我看到的选项:1)-S只编译;不要组装或链接,2)-c编译和组装,但不要链接。所以编译意味着.c到asm和asemble意味着asm到obj? – all

+0

另外,-o不适用于“目标文件”,它用于输出文件,它可以是对象或可执行文件。 – all

+0

我的不好,现在修好了 –

2

对象文件有一些符号信息(通常是专有的,编译器/链接器依赖性)和原始编译的机器代码准备好被执行。

在Linux和许多其他系统使用

ELF(可执行和链接格式)是这样的:

enter image description here

1

目标文件是由编译器针对特定处理器的机器代码,与像符号信息一起函数名称,以便运行时链接的代码可以找到可执行代码的内存位置(在对象文件中)。

哦@hexa给了一个更加美好的答案,而我是在登录:)

1

Linux系统上尝试objdump的命令用来显示类似目标文件的信息:

objdump -D <filename.o> | more 
相关问题