一种基于最小符号冗余的动态库加载优化方法技术

技术编号:38630857 阅读:10 留言:0更新日期:2023-08-31 18:29
本发明专利技术公开了一种基于最小符号冗余的动态库加载优化方法,通过获取操作系统当前可用的所有动态库,并对于程序或动态库中属于上述操作系统动态库中多个动态库的外部符号采用建立的筛选机制从多个动态库中确定与其对应的最优动态库,并完成该动态库的加载,由此避免了由操作系统依据动态库路径设置先后顺序随机确定符号引用方式所导致的符号引用错误,从而保证了动态库加载的可靠性。从而保证了动态库加载的可靠性。

【技术实现步骤摘要】
一种基于最小符号冗余的动态库加载优化方法


[0001]本专利技术属于计算机应用开发
,具体涉及一种基于最小符号冗余的动态库加载优化方法。

技术介绍

[0002]根据Linux系统的设计当Linux系统加载程序或动态库时会依据当前系统确定的相关规则,例如Linux环境变量名LD_LIBRARY_PATH中设定的路径先后顺序,在当前系统可用的动态库中搜索其所依赖的外部符号,若存在与外部符号对应动态库则加载该动态库,并且当同一符号同时出现在多个动态库时一般会按照搜索时的先后顺序确定最终加载的动态库。由此可见,Linux系统的上述动态库加载策略存在较大随机性,由此会增大使用错误动态库中符号的概率,进而导致程序执行时出现不可预期的问题。

技术实现思路

[0003]有鉴于此,本专利技术提供了一种基于最小符号冗余的动态库加载优化方法,实现了基于筛选机制的最优动态库加载。
[0004]本专利技术提供的一种基于最小符号冗余的动态库加载优化方法,包括以下步骤:步骤1、当操作系统加载程序或动态库时,获取其所依赖的所有外部符号建立外部符号集;获取操作系统的所有动态库建立外部动态库集;步骤2、对程序或动态库中的所有代码段进行逆向处理,遍历其中所有与外部符号相关的调用作为目标调用,获取目标调用的调用地址、位于目标调用之前的压栈操作的参数数量及各参数长度,建立外部符号的名称与调用相关信息之间的映射关系记为符号映射关系,其中,调用相关信息包括调用的参数数量、各参数长度及调用地址;步骤3、解析外部符号集中的所有外部符号,获取属于外部动态库集的外部符号所属的动态库;对于同属多个动态库的第一外部符号,为其建立符号匹配库集保存其所属的所有动态库,根据符号映射关系获取第一外部符号的调用相关信息,若调用相关信息中包含参数数量及各参数长度则执行步骤4,否则执行步骤5;步骤4、遍历符号匹配库集的动态库,以动态库中第一外部符号的入口位置为起始位置执行反编译,得到第一外部符号在当前动态库中的参数数量及各参数长度,并将未存在于调用相关信息中的参数数量及各参数长度对应的动态库从符号匹配库集中删除;若符号匹配库集为空则停止加载动态库退出本流程,若符号匹配库集不为空则执行步骤5;步骤5、若符号匹配库集内动态库的数量大于1,则遍历符号匹配库集内的动态库,为各动态库建立由其所导出的属于外部符号集中的除第一外部符号之外的其他外部符号的集合记为其他符号集,其他符号集中符号的数量为其他符号数量,仅保留符号匹配库集中具有最大其他符号数量的动态库,执行步骤6;若符号匹配库集内动态库的数量不大于1,则执行步骤8;步骤6、若符号匹配库集内动态库的数量大于1,则遍历符号匹配库集内的动态库,
由外部动态库集中除当前动态库之外的所有动态库所导出的外部符号构成当前动态库的特定符号集,计算当前动态库所导出的外部符号属于其特定符号集的符号数量记为特定符号数量,仅保留符号匹配库集中具有最小特定符号数量的动态库,执行步骤7;若符号匹配库集内动态库的数量不大于1,则执行步骤8;步骤7、若符号匹配库集内动态库的数量大于1,则遍历符号匹配库集内的动态库,对于各动态库的其他符号集中每个外部符号,获取该外部符号的所有调用地址,计算所有调用地址与第一外部符号的调用地址之间的距离差之和记作符号距离差,将其他符号集中所有外部符号的符号距离差之和记为动态库距离差,仅保留符号匹配库集中具有最小动态库距离差的动态库;步骤8、将符号匹配库集的地址设置为符号匹配库集内动态库的基地址与符号匹配库集在该动态库内的偏移地址之和,完成动态库的加载。
[0005]进一步地,所述获取操作系统的所有动态库建立外部动态库集的方式为:获取操作系统的动态库加载路径,遍历动态库加载路径获取其中可用的所有动态库建立外部动态库集。
[0006]进一步地,所述获取操作系统的动态库加载路径的方式为:读取操作系统设置的相关全局环境变量和进程局部环境变量获取。
[0007]进一步地,所述步骤6中所述特定符号集为去重处理之后的符号集。
[0008]进一步地,所述步骤2的实现方式为:从程序或动态库中代码段的起始处顺序向后执行各调用指令的反编译,并对调用指令反编译的结果进行检测,若检测到调用指令为外部符号的调用指令,则将该调用指令作为目标调用执行:将位于目标调用所对应的指令之前的调用指令作为目标指令,对目标指令执行反编译,得到目标调用之前压栈操作的参数数量、各参数长度及目标调用的调用地址作为调用相关信息;建立目标调用的外部符号的名称与调用相关信息的符号映射关系。
[0009]进一步地,所述目标指令是指位于当前调用指令到当前调用指令之前的第一个函数入口之间的调用指令。
[0010]有益效果
[0011]本专利技术通过获取操作系统当前可用的所有动态库,并对于程序或动态库中属于上述操作系统动态库中多个动态库的外部符号采用建立的筛选机制从多个动态库中确定与其对应的最优动态库,并完成该动态库的加载,由此避免了由操作系统依据动态库路径设置先后顺序随机确定符号引用方式所导致的符号引用错误,从而保证了动态库加载的可靠性。
具体实施方式
[0012]下面列举实施例,对本专利技术进行详细描述。
[0013]本专利技术提供了一种基于最小符号冗余的动态库加载优化方法,其核心思想是:获取操作系统当前可用的所有动态库,对于程序或动态库中属于上述多个动态库的外部符号采用建立的筛选机制从多个动态库中确定与之对应的最优动态库,并加载该动态库。
[0014]本专利技术提供的一种基于最小符号冗余的动态库加载优化方法,具体包括以下步骤:
步骤1、当操作系统加载程序或动态库时,获取其所依赖的所有外部符号建立外部符号集。
[0015]步骤2、获取操作系统已设置的动态库加载路径,遍历动态库加载路径获取其中可用的所有动态库建立外部动态库集。
[0016]其中,获取操作系统已设置的动态库加载路径的方式可为:读取操作系统设置的相关全局环境变量和进程局部环境变量获取。
[0017]步骤3、对程序或动态库中的所有代码段进行逆向处理,遍历其中所有与外部符号相关的调用作为目标调用,获取目标调用的调用地址、位于目标调用之前的压栈操作的参数数量及各参数长度,建立外部符号的名称与调用相关信息之间的映射关系记为符号映射关系,其中,调用相关信息包括调用的参数数量、各参数长度及调用地址。
[0018]其中,由于同一外部符号可能存在多处调用,即同一外部符号可能会对应多个目标调用的调用地址,因此符号映射关系中外部符号的名称与调用相关信息之间为一对多的对应关系。
[0019]具体来说,从程序或动态库中代码段的起始处顺序向后执行各调用指令的反编译,并对调用指令反编译的结果进行检测,若检测到调用指令为外部符号的调用指令,则将该调用指令作为目标调用执行:将位于目标调用所对应的指令之前的调用指令作为目标指令,对目标指令执行反编译,得到目标调用之前压栈操作的参数数量、各参数长度及目标调用的调用地址作为调用相关信息;建立目标调用的外部符号的名称与调用本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于最小符号冗余的动态库加载优化方法,其特征在于,包括以下步骤:步骤1、当操作系统加载程序或动态库时,获取其所依赖的所有外部符号建立外部符号集;获取操作系统的所有动态库建立外部动态库集;步骤2、对程序或动态库中的所有代码段进行逆向处理,遍历其中所有与外部符号相关的调用作为目标调用,获取目标调用的调用地址、位于目标调用之前的压栈操作的参数数量及各参数长度,建立外部符号的名称与调用相关信息之间的映射关系记为符号映射关系,其中,调用相关信息包括调用的参数数量、各参数长度及调用地址;步骤3、解析外部符号集中的所有外部符号,获取属于外部动态库集的外部符号所属的动态库;对于同属多个动态库的第一外部符号,为其建立符号匹配库集保存其所属的所有动态库,根据符号映射关系获取第一外部符号的调用相关信息,若调用相关信息中包含参数数量及各参数长度则执行步骤4,否则执行步骤5;步骤4、遍历符号匹配库集的动态库,以动态库中第一外部符号的入口位置为起始位置执行反编译,得到第一外部符号在当前动态库中的参数数量及各参数长度,并将未存在于调用相关信息中的参数数量及各参数长度对应的动态库从符号匹配库集中删除;若符号匹配库集为空则停止加载动态库退出本流程,若符号匹配库集不为空则执行步骤5;步骤5、若符号匹配库集内动态库的数量大于1,则遍历符号匹配库集内的动态库,为各动态库建立由其所导出的属于外部符号集中的除第一外部符号之外的其他外部符号的集合记为其他符号集,其他符号集中符号的数量为其他符号数量,仅保留符号匹配库集中具有最大其他符号数量的动态库,执行步骤6;若符号匹配库集内动态库的数量不大于1,则执行步骤8;步骤6、若符号匹配库集内动态库的数量大于1,则遍历符号匹配库集内的动态库,由外部动态库集中除当前动态库之外的所有动态库所导出的外部符号构成当前动态库的特定符号集,计算当前动态库所导出的外部符号属于其特定符号集的符号数量记为特定符号数量,仅保留符号...

【专利技术属性】
技术研发人员:温研杜凯
申请(专利权)人:北京麟卓信息科技有限公司
类型:发明
国别省市:

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

1