[发明专利]动态加载应用的方法及装置在审
申请号: | 201210058445.6 | 申请日: | 2012-03-07 |
公开(公告)号: | CN103309684A | 公开(公告)日: | 2013-09-18 |
发明(设计)人: | 唐琨 | 申请(专利权)人: | 腾讯科技(深圳)有限公司 |
主分类号: | G06F9/445 | 分类号: | G06F9/445;G06F9/45 |
代理公司: | 北京三高永信知识产权代理有限责任公司 11138 | 代理人: | 罗振安 |
地址: | 518000 广东省深*** | 国省代码: | 广东;44 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 动态 加载 应用 方法 装置 | ||
1.一种动态加载应用的方法,其特征在于,所述方法包括:
将待加载应用编译成系统可执行的二进制映像文件,所述二进制映像文件中的函数地址为与位置无关的相对地址;
根据预先为所述待加载应用预留的入口,从所述二进制映像文件中选择位于所述二进制映像文件起始位置的指定函数,所述指定函数的地址为相对于所述入口的绝对地址;
根据所述指定函数的地址将所述二进制映像文件加载至内存空间。
2.根据权利要求1所述的方法,其特征在于,所述根据所述指定函数的地址将所述二进制映像文件加载至内存空间,具体包括:
根据所述指定函数的地址将所述二进制映像文件中的除所述指定函数之外的其他函数的相对地址转化成绝对地址;
根据转化后的各函数的绝对地址将所述二进制映像文件加载至内存空间。
3.根据权利要求1所述的方法,其特征在于,所述将待加载应用编译成系统可执行的二进制映像文件之后,还包括:
所述二进制映像文件包括:所述待加载应用的主程序对应的二进制映像文件和所述待加载应用的子程序对应的二进制映像文件;
所述根据所述指定函数的地址将所述二进制映像文件加载至内存空间,具体包括:
根据所述指定函数的地址将所述待加载应用的主程序对应的二进制映像文件加载至内存空间,并在所述主程序的控制下,将所述待加载应用的子程序对应的二进制映像文件加载至内存空间。
4.根据权利要求3所述的方法,其特征在于,所述在所述主程序的控制下,将所述待加载应用的子程序对应的二进制映像文件加载至内存空间之后,还包括:
在所述主程序的控制下,从内存空间中卸载所述待加载应用的子程序对应的二进制映像文件。
5.根据权利要求1所述的方法,其特征在于,所述根据所述指定函数的地址将所述二进制映像文件加载至内存空间之后,还包括:
将指针指向所述二进制映像文件所在的内存空间,并跳转至所述指定函数,从所述位于起始位置的指定函数运行所述待加载应用。
6.根据权利要求1所述的方法,其特征在于,所述根据所述指定函数的地址将所述二进制映像文件加载至内存空间之后,还包括:
将外部函数的地址填充进二维数组,并将所述二维数组的首地址传递给所述待加载应用,由所述待加载应用从所述二维数组中选择指针,并根据选择的指针调用对应的外部函数。
7.一种动态加载应用的装置,其特征在于,所述装置包括:
编译模块,用于将待加载应用编译成系统可执行的二进制映像文件,所述二进制映像文件中的函数地址为与位置无关的相对地址;
选择模块,用于根据预先为所述待加载应用预留的入口,从所述编译模块得到的二进制映像文件中选择位于所述二进制映像文件起始位置的指定函数,所述指定函数的地址为相对于所述入口的绝对地址;
加载模块,用于根据所述选择模块选择的指定函数的地址将所述二进制映像文件加载至内存空间。
8.根据权利要求7所述的装置,其特征在于,所述加载模块,具体包括:
转化单元,用于根据所述选择模块选择的指定函数的地址将所述二进制映像文件中的除所述指定函数之外的其他函数的相对地址转化成绝对地址;
加载单元,用于根据所述转化单元转化后的绝对地址将所述二进制映像文件加载至内存空间。
9.根据权利要求7所述的装置,其特征在于,所述装置还包括:
划分模块,用于将所述编译模块得到的二进制映像文件分成所述待加载应用的主程序对应的二进制映像文件和所述待加载应用的子程序对应的二进制映像文件;
所述加载模块,具体用于根据所述指定函数的地址将所述待加载应用的主程序对应的二进制映像文件加载至内存空间,并在所述主程序的控制下,将所述待加载应用的子程序对应的二进制映像文件加载至内存空间。
10.根据权利要求9所述的装置,其特征在于,所述加载模块,还用于在所述主程序的控制下,从内存空间中卸载所述待加载应用的子程序对应的二进制映像文件。
11.根据权利要求7所述的装置,其特征在于,所述装置还包括:
运行模块,用于将指针指向所述二进制映像文件所在的内存空间,并跳转至所述指定函数,从所述位于起始位置的指定函数运行所述待加载应用。
12.根据权利要求7所述的装置,其特征在于,所述装置还包括:
调用模块,用于将外部函数的地址填充进二维数组,并将所述二维数组的首地址传递给所述待加载应用,由所述待加载应用从所述二维数组中选择指针,并根据选择的指针调用对应的外部函数。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于腾讯科技(深圳)有限公司,未经腾讯科技(深圳)有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201210058445.6/1.html,转载请声明来源钻瓜专利网。