[发明专利]重定位方法和装置有效
申请号: | 201410195468.0 | 申请日: | 2014-05-09 |
公开(公告)号: | CN103955354B | 公开(公告)日: | 2017-03-15 |
发明(设计)人: | 彭飞 | 申请(专利权)人: | 龙芯中科技术有限公司 |
主分类号: | G06F9/32 | 分类号: | G06F9/32 |
代理公司: | 北京同立钧成知识产权代理有限公司11205 | 代理人: | 刘芳 |
地址: | 100095 北京市海淀*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 定位 方法 装置 | ||
技术领域
本发明涉及计算机技术,尤其涉及一种重定位方法和装置。
背景技术
动态二进制插桩是指在可执行程序运行时,除了正常执行原始程序外,在该原始程序二进制代码的相关位置插入其他代码,并执行插入后的代码(包括原始程序二进制代码和所插入的其他代码),用于完成程序运行时信息收集、分析、优化等工作。动态二进制插桩的过程需要用到动态二进制插桩软件(SEntre),具体的插桩过程为:计算机通过SEntre软件在应用程序启动的时候对其进行截获,获取该应用程序的执行权限;之后,将应用程序二进制代码从原空间拷贝到代码缓存区域,并在应用程序二进制代码拷贝时进行插桩,并对缓存区中的插桩后的二进制代码进行重定位,以重新确定二进制代码中的相关跳转指令的目标地址;最后,将截获的执行权限交给插桩后的代码,以执行插桩后的程序,并输出用户需要的插桩信息。
现有技术中,对直接寻址的跳转指令进行重定位时,由于对原程序二进制代码进行插桩的原因,导致跳转指令需要跳转的地址跨度扩大,当其跨度值大于跨度阈值时,引发程序跳转错误的问题。
发明内容
本发明实施例提供一种重定位方法和装置,用以解决现有技术中由于对原程序二进制代码进行插桩的原因,导致跳转指令需要跳转的地址跨度扩大,当其跨度值大于跨度阈值时,无法实现对该跳转指令的重定位的技术问题。
第一方面,本发明实施例提供一种重定位方法,包括:
获取代码缓冲区中的第一跳转指令段,所述第一跳转指令段包括用于直接寻址的第一跳转指令以及至少一条空指令;所述代码缓冲区用于存储插桩之后的程序代码,所述第一跳转指令存储在第一地址中,所述第一跳转指令对应的目标指令存储在第二地址中,所述第一地址与所述第二地址之间的地址跨度为第一跨度;
根据所述第一跳转指令生成第二跳转指令段,所述第二跳转指令段包括第一指令和第二跳转指令,所述第一指令用于将所述第二地址存储到目标寄存器,所述第二跳转指令为用于指示跳转到存储在所述目标寄存器中的所述第二地址的寄存器跳转指令;
将所述第一跳转指令段替换为所述第二跳转指令段,以使得执行所述代码缓冲区中的程序代码时根据所述第二跳转指令段跳转到所述第一跳转指令对应的目标指令。
结合第一方面,在第一方面的第一种可能的实施方式中,在所述根据所述第一跳转指令生成第二跳转指令段之前,还包括:
判断所述第一跨度是否超过跨度阈值;
在所述第一跨度未超过跨度阈值时,根据所述第一跨度将所述第一跳转指令中的目标地址修改为所述第二地址;
所述根据所述第一跳转指令生成第二跳转指令段,包括:
在所述第一跨度值超过跨度阈值时,根据所述第一跳转指令生成第二跳转指令段。
结合第一方面,在第一方面的第二种可能的实施方式中,所述获取代码缓冲区中的第一跳转指令段之前,还包括:
当待拷贝的代码为第一跳转指令时,在代码缓冲区插入至少一条空指令;
将所述第一跳转指令拷贝到所述至少一条空指令之后,在所述代码缓冲区中所述至少一条空指令以及所述第一跳转指令构成所述第一跳转指令段。
结合第一方面至第一方面的第二种可能的实施方式中的任一项,在第一方面的第三种可能的实施方式中,所述根据所述第一跳转指令生成第二跳转指令段,包括:
根据所述第一跨度生成第一指令;
根据所述第一指令生成第二跳转指令。
结合第一方面的第三种可能的实施方式,在第一方面的第四种可能的实施方式中,所述根据所述第一跳转指令生成第二跳转指令段还包括:
查找空闲寄存器;
生成第二指令,所述第二指令,用于将所述空闲寄存器设置为目标寄存器,位于所述第一指令之前;
生成第三指令,所述第三指令,用于将所述目标寄存器复位,位于所述第二跳转指令之后。
结合第一方面的第四种可能的实施方式,在第一方面的第五种可能的实施方式中,所述根据所述第一跳转指令生成第二跳转指令段还包括:
生成第四指令,所述第四指令,用于将所述第二跳转指令携带的延迟槽中存储的内容替换为所述第一跳转指令携带的延迟槽中存储的内容,位于所述第二跳转指令与所述第三指令之间。
结合第一方面的第五种可能的实施方式,在第一方面的第六种可能的实施方式中,所述第一跳转指令为j指令或者jal指令;在所述第一跳转指令为j指令时,所述第二跳转指令为jr指令;在所述第一跳转指令为jal指令时,所述第二跳转指令为jalr指令。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于龙芯中科技术有限公司,未经龙芯中科技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201410195468.0/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种快速可展式预应力钢桥
- 下一篇:公路施工材料堆方成型机