zah*_*pov 3 c linux bootloader
有没有关于在Linux中运行某些可执行文件时会发生什么的良好文档.例如:我开始./a.out,所以可能运行一些引导加载程序程序集(带有c运行时?),它在程序中找到起始符号,进行动态重定位,最后调用main.
我知道上面的内容不正确,但是要查找有关此过程如何发生的详细文档.你能解释一下,还是指出那些链接或书籍?
对于动态链接程序,内核检测PT_INTERPELF文件中的头,首先mmaps动态链接器(/lib/ld-linux.so.2或类似),并从e_entry动态链接器的主ELF头开始执行地址.堆栈的初始状态包含动态链接器查找主程序二进制文件(已在内存中)所需的信息.它负责读取并查找必须加载的所有其他库,加载它们,执行重定位以及跳转到e_entry主程序的地址.
对于静态链接程序,内核直接使用e_entry主程序的ELF头中的地址.
在任何一种情况下,主程序都以传统方式调用的程序集编写的例程开始_start(但只要其地址在e_entryELF头的字段中,名称就不重要了).它使用初始堆栈内容来确定argc,argv,environ等,并调用正确的实现的内部函数(通常是用C语言编写)运行全局构造(如果有的话),并执行条目之前所需的任何的libc初始化main.这通常以致电exit(main(argc, argv));或等同结束.
| 归档时间: |
|
| 查看次数: |
680 次 |
| 最近记录: |