华为公司网站建设分析评价,网页设计哪里好,wordpress板块大小,wordpress打字烟花上一篇文章#xff0c;大概了解了链接器的工作内容就是#xff1a;符号解析和重定位。点击上一篇文章查看#xff1a;点击查看。
本片文章其实还是围绕链接器来学习。只不过不是很明显#xff0c;当你学到下一篇文章时#xff0c;就明白了。
本篇文章来弄明白一个问题大概了解了链接器的工作内容就是符号解析和重定位。点击上一篇文章查看点击查看。
本片文章其实还是围绕链接器来学习。只不过不是很明显当你学到下一篇文章时就明白了。
本篇文章来弄明白一个问题在C/C程序被加载到内存中准备运行时main函数是第一个被执行的函数么答案肯定不是如果是就没必要去写这个文章了
1、_start()函数
先说结果_start() 是第一个被执行的函数而不是main()函数。
我们的程序中并没有写_start() 它是通过链接器链接到可执行文件中的下一篇文章可以学习到这是如何办到的。
在默认情况下gcc
程序加载后_start()是第一个被执行的函数_start()函数准备好参数后立即调用 __libc_start_main() 函数__libc_start_main() 初始化运行环境后调用main()函数执行
注意_start()函数的入口地址就是代码段.text的起始地址
2、__libc_start_main()函数的作用
__lib_start_main()函数的作用
调用__libc_csu_init()函数(完成必要的初始化操作)启动程序的第一个线程主线程main()函数为主线程入口注册__libc_csu_fini()函数程序运行终止时被调用
3、程序的启动过程
下面给一个简图来说明一个C/C程序的执行过程 4、自定义程序的入口函数
gcc 提供-e选项用于在链接时指定入口函数自定义入口函数时必须使用选项 -nostartfiles 进行链接
比如以下程序
program.c
#include stdio.h
#include stdlib.hint program()
{printf(D.T.Software\n);exit(0);
}
很明显它没有main函数。但是我们通过以下编译命令进行编译
gcc -e program -nostartfiles program.c -o program
生成可执行文件 program
运行该可执行文件 ./program
可以得到运行结果
显而易见我们改变了程序的入口函数。虽然没有写main函数但是依然可以运行该程序
5、总结
本文主要是理解程序的入口函数。最好自己私底下做实验看一下可执行文件的反汇编代码就知道整个程序的执行流程了。
本文参考狄泰软件学院相关课程 想学习的可以加狄泰软件学院群 群聊号码199546072
学习探讨加个人可以免费帮忙下载CSDN资源 qq1126137994 微信liu1126137994