我正在尝试理解C语言编译
给定以下简单的C代码在main.c文件中:
int main() {
int a;
a = 42;
return 0;
}
我进行了以下操作:
cpp main.c main.i
/usr/lib/gcc/x86_64-linux-gnu/9/cc1 main.i -o main.s
as -o main.o main.s
ld -o main.exe main.o
执行main.exe时,我遇到了分段错误。
在这个例子中,如何获得良好的内存寻址?
main()
函数重命名为start()
,会发生什么? - Jabberwocky_start()
可以消除链接器警告,但程序在从_start()
返回后会出现段错误。 - Bodomain()
返回时,会发生“分段错误”,因为堆栈上没有返回地址。通常,main()
是从C运行时代码中调用的。通过gcc -v -o main.exe main.o
命令可以了解链接步骤中所做的工作。 - Armali