【发布时间】:2010-12-31 11:43:28
【问题描述】:
我是一个新手程序员。我只是想在编译、组装和链接的不同阶段查看输出。我也不懂汇编语言。
我写了一个简单的程序
#include <stdio.h>
int humans = 9;
int main()
{
int lions = 2;
int cubs = populate(lions);
return 0;
}
int populate(int crappyVariable)
{
return ++crappyVariable;
}
我使用了gcc - S sample.c 我对汇编语言的输出感到惊讶。我丢失了所有变量名和函数名。
它保留了全局标识符,如human、populate、main,但它在它们前面加上下划线_。因此,我不会将其视为使用标识符。无论如何,关键是它丢失了所有标识符。
我的问题是它如何调用函数或引用变量?
我真的很好奇输出的进一步阶段,它将是二进制的(不可见)。
组装后和链接前的输出如何?我想它也会丢失下划线前缀的全局标识符吗?那么问题又是如何调用函数或引用变量进行操作?
我在互联网上搜索了信息,但找不到任何有用的信息。可能是我不确定要搜索什么。我不想读这方面的大书。但是,如果有任何文章,教程,其中明确的概念。这也会很有帮助。
我是一个新手程序员。因此,如果您能用简单但技术性的术语进行解释,那就太好了。
编辑:作为回应,对评论。我把我的问题分解成多个问题。这是这个问题的第二部分:not clear with the job of the linker
【问题讨论】:
-
如果你把它分成不同的问题,你可能会有更好的运气。在一个答案中涵盖这么多领域可能比大多数人(包括我)在业余时间愿意做的更多。
-
对不起。我没有想到。我很困惑。于是只好继续写。我会尝试分成多个帖子。
标签: compiler-construction assembly linker