当前位置: 技术问答>linux和unix
怎样用execve()运行一个在RAM中的可执行文件
来源: 互联网 发布时间:2015-10-23
本文导语: 问题的背景是这样的: 有一个可执行文件,它是被压缩后存储在存储介质(如嵌入式系统中的flash)上的.现在想写一个引导程序把这个可执行文件调入内存进行解压,然后在内存中执行.想法是: 1. 把可执行文件解压到一个...
问题的背景是这样的:
有一个可执行文件,它是被压缩后存储在存储介质(如嵌入式系统中的flash)上的.现在想写一个引导程序把这个可执行文件调入内存进行解压,然后在内存中执行.想法是:
1. 把可执行文件解压到一个内存区域中;
2. 调用fork(),创建一个进程;
3. 调用 execve()执行这个解压后的可执行文件.
但execve()中的可执行文件参数为位于硬盘等文件系统中的可执行文件名,而现在它位于内存中.有没有办法为这个在内存中的可执行文件"创造"一个文件名,以便execve能够执行它?
有一个可执行文件,它是被压缩后存储在存储介质(如嵌入式系统中的flash)上的.现在想写一个引导程序把这个可执行文件调入内存进行解压,然后在内存中执行.想法是:
1. 把可执行文件解压到一个内存区域中;
2. 调用fork(),创建一个进程;
3. 调用 execve()执行这个解压后的可执行文件.
但execve()中的可执行文件参数为位于硬盘等文件系统中的可执行文件名,而现在它位于内存中.有没有办法为这个在内存中的可执行文件"创造"一个文件名,以便execve能够执行它?
|
你把内容写成一个磁盘文件不就可以了. 不过估计你还得按照可执行文件的格式
生成这个文件.
你也可以不用exec, 而是直接修改CPU的程序寄存器, 就像exec内部做的那样.
不妨参考一下exec的源码.
生成这个文件.
你也可以不用exec, 而是直接修改CPU的程序寄存器, 就像exec内部做的那样.
不妨参考一下exec的源码.