gcc程序集输出

时间:2017-10-29 01:59:20

标签: gcc assembly

我试图学习汇编,首先我使用NASM进行编译,但后来我明白我可以在gcc中使用.s文件。这对我很感兴趣,因为我的目标是能够为自定义语言编写编译器,所以这非常有趣,因为它允许我使用c代码进行链接和编译。令人兴奋的是,我开始用gcc编译c到汇编(.s文件),然后将其examen。当我这样做的时候,它的结构是以不同的方式构建,然后是NASM程序集,只有主标签,f.eks,而不是_start,以及其他奇怪的结构,而且我不是在讨论Intel-vs AT& T语法。那么我的问题如下:

它是一个不同的结构,在普通程序集和gcc中的.s文件中,还是仅仅是我没有足够好的汇编知识?如果它是一个不同的结构,它有一个名字吗?

我一直试图谷歌我的方式几个小时,但当我搜索gcc汇编,以及我能想到的其他事情,我只得到c内联汇编...

请帮助,我不要搞清楚这一点。

1 个答案:

答案 0 :(得分:0)

gcc为翻译单元中的所有函数发出定义。 (除非他们重新static inlinestatic并且未使用或者选择在任何地方内联它们......)。

CRT启动文件(默认情况下由gcc链接,每次编译时不从源代码重新构建)提供_start的定义以及您反汇编二进制文件时将看到的其他函数。它们仅在链接阶段链接,而不是将.c编译为.s,因此您无法在gcc -S输出中看到它们。< / p>

相关:How to remove "noise" from GCC/clang assembly output?有关使编译器asm输出为人类可读的提示。