编译c文件后我得到了什么?
我使用编译c文件后我得到了什么?,c,compilation,C,Compilation,我使用gcc编译hello.c: dele-MBP:temp ldl$ ls a.out hello.c 现在,当我cat a.out: $ cat a.out ??????? H__PAGEZERO?__TEXT__text__TEXTP1P?__stubs__TEXT??__stub_helper__TEXT???__cstring__TEXT??__unwind_info__TEXT?H??__DATA__nl_symbol_ptr__DATA__la_symbol_ptr__DA
gcc
编译hello.c
:
dele-MBP:temp ldl$ ls
a.out hello.c
现在,当我cat a.out
:
$ cat a.out
??????? H__PAGEZERO?__TEXT__text__TEXTP1P?__stubs__TEXT??__stub_helper__TEXT???__cstring__TEXT??__unwind_info__TEXT?H??__DATA__nl_symbol_ptr__DATA__la_symbol_ptr__DATH__LINKEDIT ?"? 0 0h ? 8
P?
/usr/lib/dyldס??;K????t22
?*(?P
8??/usr/lib/libSystem.B.dylib&`)h UH??H?? ?E??}?H?u?H?=5??1ɉE??H?? ]Ð?%?L?yAS?%i?h?????Hello
P44?4
这里显示了混乱的代码
我想知道什么类型的
a.out
?它是汇编语言吗?如果这就是为什么有这么多的?
或%%
?中间文件格式的原因,这取决于您使用的编译器系统。大多数系统使用以下步骤,此处以GCC为例显示:
gcc-E test.C-o test.i
),但严格来说,这是在编译之前gcc-S test.c-o test.S
)gcc-c test.c-o test.o
)gcc test.c-o test
)cat
或在文本编辑器中读取的文本文件。顺便说一句,这是一个有价值的见解来源。但是,您可以使用objdump
查看其他格式中包含的大多数信息。请看它
每个步骤也执行它之前的所有步骤。因此(gcc test.c-o test
)在临时文件中生成程序集源文件和对象文件,这些文件将自动删除。您可以通过向GCC提供选项-v
来观察该过程
使用gcc--help
查看一些入口点,以便进一步调查
关于这个过程还有很多要说的,但它会填满一本书。根据您使用的编译器系统,有几种中间文件格式。大多数系统使用以下步骤,此处以GCC为例显示:
gcc-E test.C-o test.i
),但严格来说,这是在编译之前gcc-S test.c-o test.S
)gcc-c test.c-o test.o
)gcc test.c-o test
)cat
或在文本编辑器中读取的文本文件。顺便说一句,这是一个有价值的见解来源。但是,您可以使用objdump
查看其他格式中包含的大多数信息。请看它
每个步骤也执行它之前的所有步骤。因此(gcc test.c-o test
)在临时文件中生成程序集源文件和对象文件,这些文件将自动删除。您可以通过向GCC提供选项-v
来观察该过程
使用gcc--help
查看一些入口点,以便进一步调查
关于这个过程还有很多要说的,但它会填满一本书。使用
文件a.out
它会将文件标识为可执行文件。这意味着它包含机器代码和控制信息。它不适合人类阅读。使用文件a.out
,它会将该文件标识为可执行文件。这意味着它包含机器代码和控制信息。它不打算被人类阅读。