[发明专利]面向即时编译的基于动态库的GOT表管理方法有效
申请号: | 201910885728.X | 申请日: | 2019-09-19 |
公开(公告)号: | CN112527303B | 公开(公告)日: | 2022-09-13 |
发明(设计)人: | 周文浩;王飞;沈莉;肖谦;武文浩 | 申请(专利权)人: | 无锡江南计算技术研究所 |
主分类号: | G06F8/41 | 分类号: | G06F8/41;G06F9/455 |
代理公司: | 苏州创元专利商标事务所有限公司 32103 | 代理人: | 王健 |
地址: | 214083 江苏*** | 国省代码: | 江苏;32 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 面向 即时 编译 基于 动态 got 管理 方法 | ||
1.一种面向即时编译的基于动态库的GOT表管理方法,其特征在于:包括以下步骤:
S1、编译器在即时编译引擎的编译阶段创建包含GOT表的动态链接库,此GOT表位于动态链接库的数据段,具体如下:
S11、在即时编译引擎的源文件中定义无符号整数类型的GOT表数组,以数组的形式存储GOT表的数据,并且声明GOT表数组的大小为64K;
S12、使用链接器的创建共享对象选项-shared和产生地址无关代码选项–fPIC编译步骤S11中定义的包含GOT表数组的源文件,构建包含GOT表的动态链接库;
S2、在即时编译引擎对用户程序的程序代码段进行解析重定位前,即时编译引擎使用加载动态库函数dlopen动态载入步骤S1中构建的包含GOT表的动态链接库到计算机的内存空间,并获取GOT表的首地址,具体如下:
S21、即时编译引擎使用加载动态库函数dlopen载入包含GOT表的动态链接库到内存空间;
S22、即时编译引擎使用获取动态库符号地址函数dlsym从步骤S21载入的动态链接库中获取GOT表的首地址;
S3、即时编译引擎通过分析使用GOT表的程序代码段的变量访存指令获取重定位类型,并根据重定位类型对步骤S2载入的动态链接库中的GOT表进行GOT表覆写和重定位回填,具体如下:
S31、如果程序代码段的重定位类型是GPREL,即GOT表首地址偏移寻址方式,则首先通过即时编译引擎获取程序代码段中变量在内存空间的实际地址,然后将变量的实际地址和GOT表的首地址的差值填入变量访存指令的偏移位,完成重定位回填;
S32、如果程序代码段的重定位类型是LITERAL,即GOT表间接寻址方式,则首先通过即时编译引擎获取程序代码段中变量在内存空间的实际地址,然后将变量的实际地址填入步骤S2载入的动态链接库中的GOT表项,完成GOT表覆写,最后将该GOT表项在GOT表中的偏移填入变量访存指令的偏移位,完成重定位回填;
S4、在程序即时编译执行结束后,即时编译引擎动态释放步骤S2载入的包含GOT表的动态链接库,具体如下:
S41、即时编译引擎使用关闭动态链接库函数dlclose动态释放包含GOT表的动态链接库所在的内存空间;
S42、退出即时编译引擎。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于无锡江南计算技术研究所,未经无锡江南计算技术研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910885728.X/1.html,转载请声明来源钻瓜专利网。