`
javatgo
  • 浏览: 1126542 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

C程序入口点的学习

阅读更多

作点补充:
在每个c程序中crtl.o启动例程(在目标文件中)的伪代码
0x080480c0<_start>
call_libc_init_first
call_init
callatexit
callmain //改变入口点,应该就是改变了这条语句?
call_exit


之所以大多数程序的“入口”是 main,是因为连接器缺省会连接一个叫 crt0.o 或者 crt0.lib 之类的库,这个库才是一个程序真正的入口,这个真正的入口作了一段初始化之后将控制权交给 main。大多数情况下用户程序不 ...

你说的话基本上是正确的,不过概念有些混淆。
看来你还没有搞清楚 entry 和 stub/wrap 的区别。
按照你这个说法,真正的入口也不是 crt0.o 或者 crt0.lib 或者 librt.so,而是 loader,
甚至是 fork() 再或者是 fork_init()。再或者是系统 BIOS,再或者通俗一点说就是电源开关。

跟电源开关有啥关系?
操作系统总要执行一个类似 fork() 的东西。创建一个进程。然后呢,它会从内核空间 “跳转” 到用户空间。用户空间的执行的第一条汇编指令我称为“入口”,不知道这么说没说明白。那 flw 把什么称为入口呢?

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics