一种代码注入方法及装置的制造方法

文档序号:9921899阅读:197来源:国知局
一种代码注入方法及装置的制造方法
【技术领域】
[0001 ]本发明涉及数据处理领域,具体涉及一种代码注入方法及装置。
【背景技术】
[0002]代码注入是将实现一定功能的代码段注入至应用程序代码中,以增加原有应用程序能够实现的功能。由于实现代码注入实质上是在应用程序运行的过程中,动态的将代码段插入到预设位置的过程。
[0003]目前,代码注入过程是靠人工完成的,即将待注入代码人工的插入至应用程序代码中,完成代码的注入过程。但是,这对开发人员的专业知识要求较高,且人工完成代码注入效率较低。

【发明内容】

[0004]有鉴于此,本发明提供了一种代码注入方法,能够自动化的完成代码注入。
[0005]本发明提供了一种代码注入方法,所述方法包括:
[0006]预先生成任一应用程序代码的映射表,所述映射表中包括所述应用程序代码中的待修改对象与待注入代码的对应关系,所述待注入代码中标识有代码注入位置;
[0007]在所述应用程序代码运行过程中,实时查询当前运行的对象是否为所述映射表中的待修改对象,如果是,则获取所述映射表中与所述待修改对象对应的待注入代码;
[0008]根据所述待注入代码中标识的代码注入位置,将所述待注入代码注入到所述应用程序代码中的所述代码注入位置,完成代码注入。
[0009]优选地,所述预先生成任一应用程序代码的映射表,所述映射表中包括所述应用程序代码中的待修改对象与待注入代码的对应关系,所述待注入代码中标识有代码注入位置,包括:
[0010]接收预先对应用程序代码中对象的注解,所述注解用于标识待修改对象、待注入代码以及代码注入位置;
[0011]根据所述应用程序代码中的注解,生成所述应用程序代码的映射表,所述映射表中包括所述应用程序代码中的待修改对象与待注入代码的对应关系,所述待注入代码中标识有代码注入位置。
[0012]优选地,所述待修改对象包括java代码中的类、方法。
[0013]优选地,所述根据所述待注入代码中标识的代码注入位置,将所述待注入代码注入到所述应用程序代码中的所述代码注入位置,完成代码注入,包括:
[0014]获取所述应用程序代码中所述待修改对象对应的字节码;
[0015]根据所述待注入代码中标识的代码注入位置,将所述映射表中所述待修改对象对应的待注入代码转化为字节码后,与所述待修改对象对应的字节码合并,完成代码注入。
[0016]优选地,所述方法还包括:
[0017]如果当前运行的对象不是所述映射表中的待修改对象,则继续执行所述应用程序代码的下一个对象。
[0018]本发明还提供了一种代码注入装置,所述装置包括:
[0019]生成模块,用于预先生成任一应用程序代码的映射表,所述映射表中包括所述应用程序代码中的待修改对象与待注入代码的对应关系,所述待注入代码中标识有代码注入位置;
[0020]查询模块,用于在所述应用程序代码运行过程中,实时查询当前运行的对象是否为所述映射表中的待修改对象;
[0021]获取模块,用于在所述查询模块的查询结果为是时,获取所述映射表中与所述待修改对象对应的待注入代码;
[0022]注入模块,用于根据所述待注入代码中标识的代码注入位置,将所述待注入代码注入到所述应用程序代码中的所述代码注入位置,完成代码注入。
[0023]优选地,所述生成模块,包括:
[0024]接收子模块,用于接收预先对应用程序代码中对象的注解,所述注解用于标识待修改对象、待注入代码以及代码注入位置;
[0025]生成子模块,用于根据所述应用程序代码中的注解,生成所述应用程序代码的映射表,所述映射表中包括所述应用程序代码中的待修改对象与待注入代码的对应关系,所述待注入代码中标识有代码注入位置。
[0026]优选地,所述待修改对象包括java代码中的类、方法。
[0027]优选地,所述注入模块,包括:
[0028]获取子模块,用于获取所述应用程序代码中所述待修改对象对应的字节码;
[0029]合并子模块,用于根据所述待注入代码中标识的代码注入位置,将所述映射表中所述待修改对象对应的待注入代码转化为字节码后,与所述待修改对象对应的字节码合并,完成代码注入。
[0030]优选地,所述装置还包括:
[0031]执行模块,用于在所述查询模块的查询结果为否时,继续执行所述应用程序代码的下一个对象。
[0032]本发明提供了一种代码注入方法,其中,预先生成任一应用程序代码的映射表,所述映射表中包括所述应用程序代码中的待修改对象与待注入代码的对应关系,所述待注入代码中标识有代码注入位置。其次,在所述应用程序代码运行过程中,实时查询当前运行的对象是否为所述映射表中的待修改对象,如果是,则获取所述映射表中与所述待修改对象对应的待注入代码。最后,根据所述待注入代码中标识的代码注入位置,将所述待注入代码注入到所述应用程序代码中的所述代码注入位置,完成代码注入。本发明提供的代码注入方法能够自动化的完成代码注入。
【附图说明】
[0033]为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0034]图1为本发明实施例提供的一种代码注入方法流程图;
[0035]图2为本发明实施例提供的一种代码注入装置的结构示意图;
[0036]图3为本发明实施例提供的一种生成模块的结构示意图。
【具体实施方式】
[0037]下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
[0038]本发明实施例提供了一种代码注入方法,参考图1,为本发明实施例提供的一种代码注入方法流程图,所述方法包括:
[0039]SlOl:预先生成任一应用程序代码的映射表,所述映射表中包括所述应用程序代码中的待修改对象与待注入代码的对应关系,所述待注入代码中标识有代码注入位置。
[0040]本发明实施例中,在为任一应用程序进行代码注入之前,首先生成所述应用程序代码的映射表。其中,所述映射表中包括该应用程序代码中待修改对象,以及对应的待注入代码,所述映射表的格式可以以map的形式实现。另外,所述待注入代码中标识有代码注入位置,即为所述待注入代码插入的原代码中的位置。
[0041]实际应用中,本实施例可以预先将用于生成映射表的探针部署到用户应用程序中,一般部署在premain ()函数中。本发明实施例可以基于注解的方式实现,具体的,预先对所述应用程序代码中的对象进行注解,所述注解用于标识待修改对象、待注入代码以及代码注入位置。其次,在执行PremainO函数时,利用所述探针,根据所述应用程序代码中的注解,生成所述应用程序代码的映射表,其中所述映射表中包括所述应用程序代码中的待修改对象与待注入代码的对应关系,所述待注入代码中标识有代码注入位置。
[0042]S102:在所述应用程序代码运行过程中,实时查询当前运行的对象是否为所述映射表中的待修改对象,如果是,则执行S103。
[0043 ] S103:获取所述映射表中与所述待修改对象对应的待注入代码。
[0044]本发明实施例中,所述映射表中的待修改对象可以包括java代码中的类、方法等。在所述应用程序代码运行的过程中,即java虚拟机加载代码中的任一个类或方法时,实时查询预先生成的映射表,以确定当前运行的对象是否为所述映射表中的待修改对象。
[0045]如果系统在所述映射表中查询到当前运行的对象属于待修改对象,则从所述映射表中获取所述待修改对象对应的待注入代码。
[0046]实际应用中,在系统执行main()函数后,实时查询当前运行的对象是否为所述映射表中的待修改对象。
[0047]另外,如果系统在所述映射表中未查询到当前运行的对象,则系统继续执行所述应用程序代码的下一个对象即可。
[0048]SlO: 4:根据所述待注入代码中标识的代码注入位置,将所述待注入代码注入到所述应用程序代码中的所述代码注入位置,完成代码注入。
[0049]本发明实施例中,在所述映射表中获取所述待修改对象对应的待注入代码后,获取所述待注入代码中标识的代码注入位置。根据所述代码注入位置,将所述待注入代码注入至所述应用程序代码中,完成代码注入。本发明实施例注入的代码可以用于监控用户应用程序的性能以及方法调用信息等,实现用户应用程序性能监控。
[0050]实际应用中,所述应用程序中代码是以字节码的形式运行于java虚拟机中的,本发明实施例可以借助于google开发的ASM工具完成应用程序中字节码的修改。
[0051]实际操作中,本发明实施例首先获取所述应用程序代码中所述待修改对象对应的字节码,即所述待修改对象的原代码。其次,将所述映射表中所述待修改对象对应的待注入代码转化为字节码。最后,根据所述待注入代码中标识的代码注入位置,将转化后的字节码与所述应用程序代码中所述待修改对象对应的字节码合并,完成代码注入。
[0052]由于只有字节码格式才能被直接插入到运行于java虚拟机的应用程序代码中,所以,本实施例在将映射表中的待注入代码注入的过程中,将所述待
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1