日期:2014-05-16 浏览次数:20736 次
本文将讲述进程如何加载并执行一个二进制文件。
进程被创建完成后,如果需要执行自己的程序,需要做两件事情:从文件系统中读取二进制文件;识别该二进制文件的格式并加载到进程内存地址空间。
为什么需要识别二进制文件的格式呢?因为linux支持的二进制文件格式不止一种,例如:ELF、BASH等。不同的二进制文件格式,需要调用不同的解析程序识别并加载该二进制文件到内存中。
sys_execve()负责二进制文件的读取、识别和加载;sys_execve()的实现可以在fs/exec.c文件中找到。
定义structlinux_binprm结构体,记录二进制文件的重要信息:二进制头128字节、文件名、进程名、环境变量个数、命令行参数个数等。
sys_execve()->do_execve()->do_execve_common()负责加载二进制文件:
1、调用unshare_files()为进程复制一份文件表;
2、调用