① linux编程问题,execl("/bin/ls", "ls", "-al", "/etc/passwd", (char *) 0);
execl,l代表list,参数表的意思,
(char *) 0,代表空指针,说明参数表结束。
这个函数的原型是可变参数,空指针给库解析参数的时候防止程序错误。execl是个库函数,真正的系统调用是execve。
② linux内核源码:文件系统——可执行文件的加载和执行
在Linux系统中,可执行文件的加载和执行涉及一系列复杂而精密的底层操作,主要包括以下步骤:
文件加载到内存:
进程结构初始化:
API重定位和内存分配:
参数和环境变量处理:
文件头部解析:
执行新程序:
内存管理和权限检查:
安全性考虑:
重点内容: _strings函数负责在用户空间和内核空间之间复制参数和环境变量。 do_execve函数是执行新程序的核心,涉及文件读取、权限检查、文件头验证和执行路径设置。 深入了解这些核心函数和过程,有助于更深入地理解Linux内核的工作原理和安全性考虑。