高手必看:程序出了main()入口外还有其它的吗
程序除了main()入口外还有其它的吗,请举例,这对我太重要了!!!!!!愿以死相报,急!![ 本帖最后由 junenggai 于 2006-4-5 11:34 编辑 ] 我不想杀人……
对于 C++ 来说,全局对象的构造就是在 main 之前发生的。
对于标准 C 来说,main 是唯一的入口,不过很多编译器都有参数可以自己指定入口,具体详情参见编译器的手册。
[ 本帖最后由 flw 于 2006-4-5 11:43 编辑 ] 对,有些编译器可以指定其他入口的。 之所以大多数程序的“入口”是 main,是因为连接器缺省会连接一个叫 crt0.o 或者 crt0.lib 之类的库,这个库才是一个程序真正的入口,这个真正的入口作了一段初始化之后将控制权交给 main。大多数情况下用户程序不会自己初始化这些东西,所以缺省连接这个库。
如果你自己完成这部分初始化,完全可以抛弃 main。
main 不是程序的入口,只不过是一个普通的符号而已。 又长见识了 以前有个帖子是关于如何让valgrind支持线程
隐约记得里头用到了一个gcc特有的宏
该宏可以使一个函数在main之前就执行
具体的我也记不得了
回复 4楼 0521 的帖子
作点补充:在每个c程序中crtl.o启动例程(在目标文件中)的伪代码
0x080480c0<_start>
call_libc_init_first
call_init
callatexit
callmain //改变入口点,应该就是改变了这条语句?
call_exit
[ 本帖最后由 wz_uestc 于 2006-4-5 12:37 编辑 ] 原帖由 0521 于 2006-4-5 11:45 发表
之所以大多数程序的“入口”是 main,是因为连接器缺省会连接一个叫 crt0.o 或者 crt0.lib 之类的库,这个库才是一个程序真正的入口,这个真正的入口作了一段初始化之后将控制权交给 main。大多数情况下用户程序不 ...
你说的话基本上是正确的,不过概念有些混淆。
看来你还没有搞清楚 entry 和 stub/wrap 的区别。
按照你这个说法,真正的入口也不是 crt0.o 或者 crt0.lib 或者 librt.so,而是 loader,
甚至是 fork() 再或者是 fork_init()。再或者是系统 BIOS,再或者通俗一点说就是电源开关。
[ 本帖最后由 flw 于 2006-4-5 12:41 编辑 ]
回复 8楼 flw 的帖子
不明白,改变程序的入口点有什么意义呢???? 原帖由 flw 于 2006-4-5 12:40 发表你说的话基本上是正确的,不过概念有些混淆。
看来你还没有搞清楚 entry 和 stub/wrap 的区别。
按照你这个说法,真正的入口也不是 crt0.o 或者 crt0.lib 或者 librt.so,而是 loader,
甚至是 fork() 再或者 ...
跟电源开关有啥关系?
操作系统总要执行一个类似 fork() 的东西。创建一个进程。然后呢,它会从内核空间 “跳转” 到用户空间。用户空间的执行的第一条汇编指令我称为“入口”,不知道这么说没说明白。那 flw 把什么称为入口呢?
赐教