Linux kernel 分析之二:main函数执行启动过程

   内核是从哪里开始执行的呢?

   几乎任何一本Linux内核源代码分析的书都会给出详细的答案。

    不过,我试图从一个不同的角度(一个初学者的角度)来叙述,而不是一上来就给出答案。从熟悉的事物入手,慢慢接近陌生的事物,这是比较常见的思路。既然都是二进制代码,那么不妨从最简单的用户态C程序,hello world开始。说不定能找到共同点。恰好我是一个喜欢寻根究底的人。也许,理解了hello world程序的启动过程,有助于更好地理解内核的启动。
    好,开始寻根究底吧。从普通的C语言用户态程序开始写。先写一个简单的hello world程序。

/*helloworld.c*/

#include <stdio.h>int main()

{
    printf("hello world\n");   

 return 0;

}



然后gcc helloworld.c -o helloworld,一个最简单的hello world程序出现了。它是从哪里开始执行的呢?这还不简单?main函数么。地球人都知道。
为什么一定要从main函数开始呢?于是,我开始琢磨这个hello world程序。file helloworld可知,它是一个elf可执行文件。反汇编试试。

objdump -d helloworld


 

反汇编的结果令人吃惊,因为出现了_start()等一堆函数。一定是gcc编译时默认链接了一些库函数。
其实,只要运行


                
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值