数码公司网站建设的意义,桂林市区景点,邢台网站设计哪家好,wordpress自己创建数据库提示#xff1a;以下是本篇文章正文内容#xff0c;下面案例可供参考
一、程序替换的原理 我们可以创建子进程通过程序替换#xff0c;来执行不同的程序。程序替换不会重新创建子进程#xff0c;我们通过程序替换函数#xff0c;内核将磁盘中的可执行程序和数据加载到内存… 提示以下是本篇文章正文内容下面案例可供参考
一、程序替换的原理 我们可以创建子进程通过程序替换来执行不同的程序。程序替换不会重新创建子进程我们通过程序替换函数内核将磁盘中的可执行程序和数据加载到内存这个加载的过程将该进程的代码和数据替换掉。那内核怎么知道替换的程序位置因为有程序计数器。那怎么知道要执行程序的开始位置呢其实可执行程序也是有格式的ELF可以找到可执行程序的入口地址。 子进程程序替换后就不会执行后面的代码了.比如exit0. 二、程序替换函数 1execl 这个函数参数是个可变参数可以接收多个参数最后要以NULL结尾可以简单理解为压栈结束其中涉及到函数栈帧的问题。
第一个参数是程序文件的路径程序也是个文件它存储在磁盘中后面的参数就是执行这个程序需要的参数。 小技巧后面的参数之前怎么在命令行怎么执行命令就怎么传参。
2execlp
p代表path,它会到环境变量中查找程序l是代表list就是列表。 这里我们可能有个疑问两个ls.其实它们的作用不同的第一个查找的程序文件是哪个第二个是作为参数使用。
3execvp 这个函数就没有可变参数了p表示它会根据你的文件名去环境变量path中查找v就是数组的意思。
第一个参数是可执行程序的文件名第二个是字符串数组存储执行程序需要的参数最后一个元素必须为NULL。 (4) execv 这个和 execvp不同的是这个要我们自己写路径它没有p不会到环境变量下找。 5 execle与execvpe 这里的e表示环境变量的意思可以选择要哪个环境变量表如果我们不用系统的环境变量那我们就可以使用这个函数直接覆盖掉原来的环境变量。
验证先自己建一个环境变量的表argv2,然后程序替换后打印所有的环境变量我们可以看到环境变量已经被覆盖了新程序的environ指针也指向了这个新的环境变量表。 三.系统调用接口---execve 这个是系统调用接口以上的都是函数都是对这个系统调用的封装就是说不管你选择哪种以上的程序替换最终都会转化为这个系统调用。其实也挺容易理解的程序替换是涉及到内核的为了保证安全性操作系统提供了系统调用一旦涉及了系统调用用户态立刻变为了内核态控制权就交给了操作系统。
总结
这个替换过程可以是同语言内的替换也可以是跨语言的替换比如下面脚本语言
脚本文件