繁体   English   中英

编译c文件后会得到什么?

[英]What I get after I compile the c file?

我用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吗? assembly language吗? 如果是为什么会有那么多??? %%%

有几种中间文件格式,具体取决于您使用的编译器系统。 大多数系统使用以下步骤,此处以GCC为例显示:

  1. 预处理的C源代码( gcc -E test.c -o test.i ),但是严格来说,这是在编译之前
  2. 汇编源代码( gcc -S test.c -o test.s
  3. 目标文件包含机器代码,不可执行,因为无法解析对外部函数的调用( gcc -c test.c -o test.o
  4. 包含机器代码的可执行文件( gcc test.c -o test

仅前两个步骤生成了可以由cat或在文本编辑器中读取的文本文件。 这是BTW深入了解的宝贵资源。 但是,您可以使用objdump查看其他格式中包含的大多数信息。 请阅读其文档

每个步骤还执行之前的所有步骤。 因此( gcc test.c -o test )在临时文件中生成程序集源文件和目标文件,这些文件会自动删除。 您可以通过为GCC提供-v选项来观看该过程。

使用gcc --help查看一些切入点,以进行进一步的研究。

关于这个过程,还有很多要说的,但它会写一本书。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM