一种对字节码进行增强的方法和装置制造方法及图纸

技术编号:22166241 阅读:20 留言:0更新日期:2019-09-21 10:17
本发明专利技术公开了一种对字节码进行增强的方法和装置,涉及计算机技术领域。该方法的一具体实施方式包括:从加载的类中识别出系统自身的类;通过扫描所述系统自身的类的字节码,判断所述系统自身的类是否基于软件开发工具包创建;如果是,则对所述系统自身的类的字节码进行修改。本发明专利技术实施例能够在不考虑参数的兼容性的前提下,完成对类的字节码的增强,并且可减少对系统的消耗,以及提升系统的稳定性。

A Byte Code Enhancement Method and Device

【技术实现步骤摘要】
一种对字节码进行增强的方法和装置
本专利技术涉及计算机
,尤其涉及一种对字节码进行增强的方法和装置。
技术介绍
对于一些基础框架,需要带外数据传输工具时,比如分布式跟踪系统,如果要以无侵入的方式实现,就需要在系统启动时,对系统的线程池或线程的字节码进行增强,使其具有将父线程的数据传递到子线程的功能,从而在线程间进行透明的数据传输。现有的技术中,是在系统启动时,直接对软件开发工具包的线程池类的字节码进行增强。现有技术方案在实施过程中存在以下问题:直接对软件开发工具包的线程池类的字节码进行增强,需要使用一些非标准选项的参数,而该非标准选项的参数可能不适用于更新后的软件开发工具包,则会对系统有比较大的影响;而且直接对软件开发工具包的线程池类的字节码进行增强,会使得整个运行环境和所依赖的第三方包都必须使用增强过的线程池类,这样就会增加系统的资源消耗,以及容易导致不可预知的问题,从而给系统带来隐患。
技术实现思路
有鉴于此,本专利技术实施例提供一种对字节码进行增强的方法和装置,能够在不考虑参数的兼容性的前提下,完成对类的字节码的增强,并且可减少对系统的消耗以及提升系统的稳定性。为实现上述目的,根据本专利技术实施例的一个方面,提供了一种对字节码进行增强的方法。本专利技术实施例的对字节码进行增强的方法包括:从加载的类中识别出系统自身的类;通过扫描所述系统自身的类的字节码,判断所述系统自身的类是否基于软件开发工具包创建;如果是,则对所述系统自身的类的字节码进行修改。可选地,从加载的类中识别出系统自身的类的步骤包括:获取加载的类的包名;根据所述包名判断所述加载的类是否为系统自身的类。可选地,通过扫描所述系统自身的类的字节码,判断所述系统自身的类是否基于软件开发工具包创建的步骤包括:扫描所述系统自身的类的字节码,并且判断扫描的字节码对应的方法中是否使用new方法创建的线程池、使用new方法创建的线程或者使用软件开发工具包的工具类创建的线程池;如果是,则对所述系统自身的类的字节码进行修改的步骤包括:对所述扫描的字节码进行修改。可选地,对所述扫描的字节码进行修改的步骤包括:将所述扫描的字节码替换为增强字节码;其中,所述增强字节码根据自定义的线程池、自定义的线程或者自定义的工具类编译得到,所述自定义的线程池、自定义的线程或者自定义的工具类分别对应于使用new方法创建的线程池、使用new方法创建的线程或者使用软件开发工具包的工具类创建的线程池。可选地,所述扫描的字节码对应的方法包括:构造方法、静态变量初始化、静态初始化块或者非构造方法;判断扫描的字节码对应的方法中是否使用new方法创建的线程池、使用new方法创建的线程或者使用软件开发工具包的工具类创建的线程池的步骤包括:判断扫描的字节码对应的方法是否为构造方法,如果是,则判断构造方法中是否使用new方法创建的线程池、使用new方法创建的线程或者使用软件开发工具包的工具类创建的线程池;如果不是,则判断扫描的字节码对应的方法是否为静态变量初始化,如果是,则判断静态变量初始化中是否使用new方法创建的线程池、使用new方法创建的线程或者使用软件开发工具包的工具类创建的线程池;如果不是,则判断扫描的字节码对应的方法是否为静态初始化块,如果是,则判断静态初始化块中是否使用new方法创建的线程池、使用new方法创建的线程或者使用软件开发工具包的工具类创建的线程池;如果不是,则判断扫描的字节码对应的方法是否为非构造方法,如果是,则判断非构造方法中是否使用new方法创建的线程池、使用new方法创建的线程或者使用软件开发工具包的工具类创建的线程池。为实现上述目的,根据本专利技术实施例的另一个方面,提供了一种对字节码进行增强的装置。本专利技术实施例的对字节码进行增强的装置包括:识别模块,用于从加载的类中识别出系统自身的类;判断模块,用于通过扫描所述系统自身的类的字节码,判断所述系统自身的类是否基于软件开发工具包创建;修改模块,用于在判断模块判断出所述系统自身的类是基于软件开发工具包创建后,对所述系统自身的类的字节码进行修改。可选地,所述识别模块还用于,获取加载的类的包名,并且根据所述包名判断所述加载的类是否为系统自身的类。可选地,所述判断模块还用于:扫描所述系统自身的类的字节码,并且判断扫描的字节码对应的方法中是否使用new方法创建的线程池、使用new方法创建的线程或者使用软件开发工具包的工具类创建的线程池;如果是,则所述修改模块对所述扫描的字节码进行修改。可选地,所述修改模块还用于,将所述扫描的字节码替换为增强字节码;其中,所述增强字节码根据自定义的线程池、自定义的线程或者自定义的工具类编译得到,所述自定义的线程池、自定义的线程或者自定义的工具类分别对应于使用new方法创建的线程池、使用new方法创建的线程或者使用软件开发工具包的工具类创建的线程池。可选地,所述扫描的字节码对应的方法包括:构造方法、静态变量初始化、静态初始化块或者非构造方法;所述判断模块还用于,判断扫描的字节码对应的方法是否为构造方法,如果是,则判断构造方法中是否使用new方法创建的线程池、使用new方法创建的线程或者使用软件开发工具包的工具类创建的线程池;如果不是,则判断扫描的字节码对应的方法是否为静态变量初始化,如果是,则判断静态变量初始化中是否使用new方法创建的线程池、使用new方法创建的线程或者使用软件开发工具包的工具类创建的线程池;如果不是,则判断扫描的字节码对应的方法是否为静态初始化块,如果是,则判断静态初始化块中是否使用new方法创建的线程池、使用new方法创建的线程或者使用软件开发工具包的工具类创建的线程池;如果不是,则判断扫描的字节码对应的方法是否为非构造方法,如果是,则判断非构造方法中是否使用new方法创建的线程池、使用new方法创建的线程或者使用软件开发工具包的工具类创建的线程池。为实现上述目的,根据本专利技术实施例的再一个方面,提供了一种对字节码进行增强的电子设备。本专利技术实施例的对字节码进行增强的电子设备包括:一个或多个处理器;存储装置,用于存储一个或多个程序,当所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器实现上述任一项的对字节码进行增强的方法。为实现上述目的,根据本专利技术实施例的再一个方面,提供了一种计算机可读介质,其上存储有计算机程序,其特征在于,所述程序被处理器执行时实现上述任一项的对字节码进行增强的方法。上述专利技术中的一个实施例具有如下优点或有益效果:能够针对系统中的类的字节码进行增强,而不是把软件开发工具包本身的类进行字节码增强。对字节码增强的过程在中,如果构造函数、静态变量初始化、静态初始化块和非构造函数使用了软件开发工具包自带的线程池、线程、创建线程的工具类时,则分别对构造函数、静态变量初始化、静态初始化块和非构造函数进行修改,可使其符合软件开发工具包标准规范,所以在后续升级时,不需要担心启动参数的兼容性问题。并且由于没有改动任何软件开发工具包内部的类,所以对系统资源的消耗较少并且提升了系统的稳定性。上述的非惯用的可选方式所具有的进一步效果将在下文中结合具体实施方式加以说明。附图说明附图用于更好地理解本专利技术,不构成对本专利技术的不当限定。其中:图1是根据本专利技术实施例的对字节码进行增强本文档来自技高网...

【技术保护点】
1.一种对字节码进行增强的方法,其特征在于,包括:从加载的类中识别出系统自身的类;通过扫描所述系统自身的类的字节码,判断所述系统自身的类是否基于软件开发工具包创建;如果是,则对所述系统自身的类的字节码进行修改。

【技术特征摘要】
1.一种对字节码进行增强的方法,其特征在于,包括:从加载的类中识别出系统自身的类;通过扫描所述系统自身的类的字节码,判断所述系统自身的类是否基于软件开发工具包创建;如果是,则对所述系统自身的类的字节码进行修改。2.根据权利要求1所述的方法,其特征在于,从加载的类中识别出系统自身的类的步骤包括:获取加载的类的包名;根据所述包名判断所述加载的类是否为系统自身的类。3.根据权利要求1所述的方法,其特征在于,通过扫描所述系统自身的类的字节码,判断所述系统自身的类是否基于软件开发工具包创建的步骤包括:扫描所述系统自身的类的字节码,并且判断扫描的字节码对应的方法中是否使用new方法创建的线程池、使用new方法创建的线程或者使用软件开发工具包的工具类创建的线程池;如果是,则对所述系统自身的类的字节码进行修改的步骤包括:对所述扫描的字节码进行修改。4.根据权利要求3所述的方法,其特征在于,对所述扫描的字节码进行修改的步骤包括:将所述扫描的字节码替换为增强字节码;其中,所述增强字节码根据自定义的线程池、自定义的线程或者自定义的工具类编译得到,所述自定义的线程池、自定义的线程或者自定义的工具类分别对应于使用new方法创建的线程池、使用new方法创建的线程或者使用软件开发工具包的工具类创建的线程池。5.根据权利要求3所述的方法,其特征在于,所述扫描的字节码对应的方法包括:构造方法、静态变量初始化、静态初始化块或者非构造方法;判断扫描的字节码对应的方法中是否使用new方法创建的线程池、使用new方法创建的线程或者使用软件开发工具包的工具类创建的线程池的步骤包括:判断扫描的字节码对应的方法是否为构造方法,如果是,则判断构造方法中是否使用new方法创建的线程池、使用new方法创建的线程或者使用软件开发工具包的工具类创建的线程池;如果不是,则判断扫描的字节码对应的方法是否为静态变量初始化,如果是,则判断静态变量初始化中是否使用new方法创建的线程池、使用new方法创建的线程或者使用软件开发工具包的工具类创建的线程池;如果不是,则判断扫描的字节码对应的方法是否为静态初始化块,如果是,则判断静态初始化块中是否使用new方法创建的线程池、使用new方法创建的线程或者使用软件开发工具包的工具类创建的线程池;如果不是,则判断扫描的字节码对应的方法是否为非构造方法,如果是,则判断非构造方法中是否使用new方法创建的线程池、使用new方法创建的线程或者使用软件开发工具包的工具类创建的线程池。6.一种对字节码进行增强的装置,其特征在于,包括:识别模块,用于从加载的类中识别出系统...

【专利技术属性】
技术研发人员:李梁胡峰
申请(专利权)人:北京京东尚科信息技术有限公司北京京东世纪贸易有限公司
类型:发明
国别省市:北京,11

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

1