程序的入口
加载
linux可执行文件都是通过调用execve
函数来调用加载器的.
加载器将可执行文件的代码和数据从磁盘拷贝到内存中, 然后通过第一条指令来查找程序运行的入口, 从而执行整个程序. 而将数据从磁盘复制到内存的过程就叫做加载.
程序的入口
通过从内核设置的第一条指令找到程序的入口, 一般gcc默认编译程序的入口是_libc_start_main
这一个默认函数, 而默认函数的入口又是存放在段<_start>
里面. _start函数调用系统启动函数, 它初始化环境, 调用用户层的main函数, 处理main函数的返回值, 最后将返回值返回给内核处理.
一个简单的代码
int main()
{
}
执行
gcc main.c
在执行
objdump a.out -d
# 如果适合看intel的汇编, 可加上 -M intel 即可