一种进程内装载程序的方法技术

技术编号:33201984 阅读:17 留言:0更新日期:2022-04-24 00:40
本发明专利技术属于安卓系统应用技术领域,具体涉及一种进程内装载程序的方法,包括如下步骤:S1,创建新的线程,在新的线程中执行装载器的代码并启动装载器功能,其中装载器用于在不调用fork函数和execve函数的条件下执行目标应用程序,编写目标应用程序代码的过程中将目标应用程序搭载装载器;S2,通过装载器装载要执行的目标应用程序;S3,执行目标应用程序。本发明专利技术通过在进程中装载并运行可执行程序,可以在不能创建新进程的情况下之执行可执行程序,解决因幽灵进程的限制导致部分未主动兼容安卓12的程序存在不兼容的技术问题。12的程序存在不兼容的技术问题。

【技术实现步骤摘要】
一种进程内装载程序的方法


[0001]本专利技术属于安卓系统应用
,具体涉及一种进程内装载程序的方法。

技术介绍

[0002]安卓(Android)系统由于其开源的特性,得到了较为广泛的应用,各大手机厂商均投入生产、设计自己的安卓系统,安卓系统已成为最具影响力的手机操作系统。
[0003]安卓系统的更新速度很快,现在已经更新到了安卓12,在安卓12系统上,为了有效管控程序耗电、CPU性能占用,安卓12通过cgroup机制可以标记程序自行fork(创建)的进程,从而进行管理,安卓程序的进程为zygote系统进程创建而来,也可以说所有的安卓进程都是zygote系统进程的子进程;对于程序自行创建的进程,安卓标记为PhantomProcess(幽灵进程,即为安卓程序的子进程,zygote系统进程的孙子和孙子辈分以下的进程。对于幽灵进程有明确的CPU占用限制和进程数上限限制,安卓12系统对于幽灵进程的限制的上限为32个,幽灵进程的限制会导致部分未主动兼容安卓12的程序存在不兼容现象,也可能是程序本身自己运行的幽灵进程被系统杀死,从而导致程序崩溃,无法正常启动运行。
[0004]而安卓系统执行可执行程序的流程是通过调用execve函数执行可执行程序,但是execve函数会销毁当前进程所有句柄以及内存数据,如果要在当前进程内不丢失数据的情况下执行可执行程序,要避免execve函数调用,这样去突破安卓系统对于幽灵进程的进程数限制。

技术实现思路

[0005]本专利技术的目的是提供一种进程内装载程序的方法,在不使用execve函数的条件下去执行目标应用程序,继而突破安卓系统对于幽灵进程的进程数限制。
[0006]上述目的是通过如下技术方案实现:一种进程内装载程序的方法,包括如下步骤:
[0007]S1,创建新的线程,在新的线程中执行装载器的代码并启动装载器功能,其中装载器用于在不调用fork函数和execve函数的条件下执行目标应用程序;
[0008]S2,通过装载器装载要执行的目标应用程序;
[0009]S3,执行目标应用程序。
[0010]一般情况下,安卓系统执行可执行程序的流程是通过fork函数创建一个子进程,在子进程中的调用execve函数执行可执行程序,而装载器的功能是在不调用fork函数和execve函数的条件下执行可执行程序,通过在进程中装载并运行可执行程序,可以在不能创建新进程的情况下之执行可执行程序,解决因幽灵进程的限制导致部分未主动兼容安卓12的程序存在不兼容的技术问题。
[0011]需要说明的是,本领域技术人员应当清楚在编写目标应用程序代码的过程中可根据装载器所要实现的功能与步骤编制这样一个程序搭载在目标应用程序中。
[0012]进一步的技术方案是,所述S2具体步骤如下:
[0013]S21,读取目标应用程序的ELF文件的文件头;
[0014]S22,检查文件头的有效性;
[0015]S23,设置动态链接器路径,并装载动态链接器;
[0016]S24,对ELF文件进行装载;
[0017]S25,准备栈环境;
[0018]S26,将cpu的程序计数器指向动态链接器的入口;
[0019]S27,执行动态链接器,动态链接器链接目标应用程序进而执行目标应用程序。
[0020]进一步的技术方案是,所述步骤S21中,目标应用程序的ELF文件的文件头包括前128个字节。
[0021]进一步的技术方案是,所述步骤S22中,检查文件头的有效性包括检测魔术、ELF类型和段数量。
[0022]进一步的技术方案是,所述步骤S23中,在目标应用程序的ELF文件中寻找PT_INTERP段,若无PT_INTERP段,则直接执行步骤S24,若有PT_INTERP段,则对动态链接器执行步骤S21、S22和S24后再进入步骤S24。
[0023]进一步的技术方案是,所述步骤S24中,根据ELF文件中program header table的描述对ELF文件进行装载,装载内容包括代码段、数据段和只读数据段。
[0024]进一步的技术方案是,所述步骤S25中,在栈上分配argc、argv、envp和auxv所需要的空间,并将argc、argv、envp和auxv通过堆栈指针按顺序向上初始化,设置AUXV的AT_PHDR、AT_PHENT、AT_PHNUM、AT_BASE和AT_ENTRY,其中,AT_PHDR为ELF文件的program header在内存中的位置,AT_PHENT为ELF文件的program header的字节数,AT_PHNUM为ELF文件的program header的个数,AT_BASE为ELF文件的动态链接器在内存中映射的位置,AT_ENTRY为ELF文件的程序入口。
[0025]本专利技术的技术方案,装载器可以在不调用fork函数和execve函数的条件下执行可执行程序,通过在进程中装载并运行可执行程序,可以在不能创建新进程的情况下之执行可执行程序,解决因幽灵进程的限制导致部分未主动兼容安卓12的程序存在不兼容的技术问题。
具体实施方式
[0026]以下结合具体实施例对本专利技术作进一步描述,以助于更好地理解本专利技术,但本专利技术的保护范围并不仅限于这些实施例。
[0027]本专利技术实施例如下,一种进程内装载程序的方法,包括如下步骤:
[0028]S1,创建新的线程,在新的线程中执行装载器的代码并启动装载器功能,其中装载器用于在不调用fork函数和execve函数的条件下执行目标应用程序;
[0029]S2,通过装载器装载要执行的目标应用程序;
[0030]S21,读取目标应用程序的ELF文件的文件头,目标应用程序的ELF文件的文件头包括前128个字节;
[0031]S22,检查文件头的有效性,检查文件头的有效性包括检测魔术、ELF类型和段(section)数量;
[0032]S23,设置动态链接器路径,动态链接器链接目标应用程序:在目标应用程序的ELF文件中寻找PT_INTERP段,若无PT_INTERP段,则直接执行步骤S24,若有PT_INTERP段,则对
动态链接器执行步骤S21、S22和S24后再进入步骤S24;
[0033]S24,对ELF文件进行装载:根据ELF文件中program header table的描述对ELF文件进行装载,装载内容包括代码段、数据段和只读数据段;
[0034]S25,准备栈环境:在栈上分配argc、argv、envp和auxv所需要的空间,并将argc、argv、envp和auxv通过堆栈指针按顺序向上初始化,设置AUXV的AT_PHDR、AT_PHENT、AT_PHNUM、AT_BASE和AT_ENTRY,其中,AT_PHDR为ELF文件的program header在内存中的位置,AT_PHENT为ELF文件的program header的字节数,AT_本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种进程内装载程序的方法,其特征在于,包括如下步骤:S1,创建新的线程,在新的线程中执行装载器的代码并启动装载器功能,其中装载器用于在不调用fork函数和execve函数的条件下执行目标应用程序;S2,通过装载器装载要执行的目标应用程序;S3,执行目标应用程序。2.根据权利要求1所述的进程内装载程序的方法,其特征在于,所述S2具体步骤如下:S21,读取目标应用程序的ELF文件的文件头;S22,检查文件头的有效性;S23,设置动态链接器路径,并装载动态链接器;S24,对ELF文件进行装载;S25,准备栈环境;S26,将cpu的程序计数器指向动态链接器的入口;S27,执行动态链接器,动态链接器链接目标应用程序进而执行目标应用程序。3.根据权利要求2所述的进程内装载程序的方法,其特征在于,所述步骤S21中,目标应用程序的ELF文件的文件头包括前128个字节。4.根据权利要求3所述的进程内装载程序的方法,其特征在于,所述步骤S22中,检查文件头的有效性包括检测魔术、ELF类型和段数量。5.根据权利要求3或4所述的进程内装载程序的方法,其特征在于,所述步骤S23中,在目标应用程序的ELF文件...

【专利技术属性】
技术研发人员:孙大林李国峰莫一臣
申请(专利权)人:湖南小算科技信息有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1