c语言读.bin文件_一步步编写操作系统 46 用c语言编写内核3

本文探讨了C语言编写的内核中_start与main函数的关系,指出main函数并非程序的第一个执行点,而是由_start或运行库代码调用。通过对比不同编译选项生成的文件,揭示了C运行库在程序启动时的角色,以及编译器如何为调用main函数做准备。此外,文章介绍了使用汇编语言的优势,并强调了编写内核的目的是为了演示加载内核和理解ELF文件解析。
摘要由CSDN通过智能技术生成
b475513b0c1335028d2f1ce8df1f7819.png

再把上节代码贴出来,

1 //int main(void) {2 int _start(void) {3 while(1);4 return 0;5 }

有没有同学想过,这里写一个_start函数,让其调用main函数如何?其实这是可以的,main函数并不是第一个函数,它实际上也是被别人调用的,不过这是编译器背后的策略啦,好奇心大的同学自己尝试下吧。

虽然把函数名改成_start可以解决问题,但我们习惯于main函数做为主函数,不习惯函数用_start,于是用了-e来指定起始的函数名为main,所以代码才链接正常。

也许有同学想过,哎?我平时写的程序也没有_start啊,直接用gcc编译后就能运行,没出过问题啊。是啊,确实如您所说,由于我也没深入研究过,但咱们通过比较的方式,让您自己悟出这里面的秘密。还是用上述代码为例,gcc –o /tmp/test.bin kernel/main.c编译链接,由于未加-c参数,生成的test.bin不再是目标文件而是可执行文件。然后再用先编译成目标文件再链接成可执行文件的方式,对比这两个文件的区别。见图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值