一种软件组件、软件组件运行时自检视方法、装置及系统制造方法及图纸

技术编号:36877091 阅读:18 留言:0更新日期:2023-03-15 20:45
本发明专利技术提出一种软件组件、软件组件运行时自检视方法、装置及系统。该方法在可执行文件的链接过程中注入包含诊断代码的检视代码节,在可执行文件发布之前注入包含运行时约束条件的检视数据节,并将可执行文件的入口点地址修改为检视代码节首地址。软件组件运行时首先进入诊断代码对实际运行环境进行诊断、检视,收集运行环境数据,当符合内嵌的运行时约束条件时则跳转至原入口地址正常执行,否则退出并给出诊断结果。针对二进制软件组件按需注入、维护自定义功能节,可在不改变源代码、不影响开发流程基础上对软件组件批量化新增运维管理能力;将诊断代码和数据内置于二进制软件组件实现了运行时自动诊断,无需另行搭建诊断环境并简化了诊断步骤。境并简化了诊断步骤。境并简化了诊断步骤。

【技术实现步骤摘要】
一种软件组件、软件组件运行时自检视方法、装置及系统


[0001]本专利技术属于软件诊断测试领域,更具体地,涉及一种软件组件、软件组件运行时自检视方法、装置及系统。

技术介绍

[0002]软件制品在运行时需满足一定的约束条件,包括环境变量、配置文件、依赖动态库、软件版本等。
[0003]对于一个大型的分布式系统,包含成百上千个软件组件,每一个软件组件都有自己独立的运行时约束条件,这些条件只有得到正确、完整的满足才能确保软件运行状态的正确。
[0004]逐一手工检查每个软件组件的约束条件是不现实的,工作量大且容易疏漏。如果只针对关键、重要的组件进行抽检,当次要组件配置不正确时会由于组件之间的耦合性和传递性而引发蝴蝶效应。
[0005]即使通过技术手段保证了全系统部署初期各组件的约束得到了满足,但随着系统的持续维护和升级,各组件的约束条件必然会发生变动,如果不能及时揭示该变化就会在系统中埋下隐患,引发各类运行时问题。

技术实现思路

[0006]针对现有技术的缺陷,本专利技术的目的在于提供一种软件组件、软件组件运行时自检视方法、装置及系统,旨在解决现有软件组件运行环境约束检查方法依赖人工方式无法进行快速、全面、准确检查的问题,提前消除运行环境不适配而埋下的隐患。
[0007]为实现上述目的,第一方面,本专利技术提供了一种软件组件运行时自检视方法,包括如下步骤:
[0008]在软件组件的可执行文件中插入检视代码;所述检视代码包括:检视代码节和检视数据节;所述检视数据节包括所述软件组件期望满足的运行环境约束条件信息;所述检视代码节包含诊断代码,用于收集所述软件组件的实际运行环境参数信息,并将所述实际运行环境参数信息和所述运行环境约束条件信息进行对比;
[0009]将所述软件组件的入口点地址修改为所述检视代码节的首地址;
[0010]运行所述软件组件,首先执行所述检视代码节中的诊断代码,对软件组件的实际运行环境进行检视,判断实际运行环境是否满足期望的运行环境约束条件;
[0011]若所述实际运行环境参数信息和所述运行环境约束条件信息一致,则跳转至所述软件组件的原入口点地址,正常执行所述软件组件;
[0012]若所述实际运行环境参数信息和所述运行环境约束条件信息不一致,则退出运行所述软件组件,并输出诊断结果,指示哪些信息不一致。
[0013]在一个可选的示例中,所述可执行文件为ELF格式文件。
[0014]在一个可选的示例中,所述运行环境约束条件信息包括但不限于:运行环境变量、
配置文件、依赖动态库以及软件版本。
[0015]在一个可选的示例中,在软件组件的可执行文件中插入检视代码,具体为:
[0016]对运行环境约束条件信息的数据结构进行声明,该数据结构由多个数据项组成,数据项为固定长度的字符串,指代某一维度的运行环境约束条件信息;数据项之间按照线性关系顺序存储;
[0017]在检视代码的源文件中以全局变量的方式定义运行环境约束条件信息的数据结构,数据项中的字符串值均为空,对该文件进行编译,生成命名为check_env.o的可重定位目标文件,其中.text节为检视代码,.data节为全局变量,即值全为空的检视数据;针对链接器ld使用的内部链接脚本进行自定义,新增两条节转换规则,将check_env.o中的.text节合并入链接生成的可执行文件并重命名为check_code检视代码节,将check_env.o中的.data节合并入链接生成的可执行文件并重命名为check_data检视数据节;
[0018]按照正常的步骤对软件组件的源代码进行编译链接,生成自检视功能未被激活的可执行文件;
[0019]针对每一个软件组件收集其运行环境约束条件信息,按照运行环境约束条件信息的数据结构进行组织,将该信息覆写至可执行文件中的检视数据节,并将可执行文件的入口点地址修改为检视代码节的首地址,生成自检视功能被激活的最终可执行文件。
[0020]第二方面,本专利技术提供了一种软件组件,包括:功能代码、检视代码以及检视数据;
[0021]所述功能代码包括:第一数据节和第一代码节;所述第一数据节包含软件组件既有的业务数据;所述第一代码节包含软件组件既有的业务代码;
[0022]所述检视代码包括:第二数据节和第二代码节;所述第二数据节包含运行环境约束条件信息的数据结构,数据项值均为空,用于在可执行文件中占位;所述第二代码节包含诊断代码,用于收集所述软件组件的实际运行环境参数信息,并将所述实际运行环境参数信息和预设的运行环境约束条件信息进行对比;
[0023]所述第二数据节与第一数据节合并入所述软件组件的可执行文件,映射为具备可读写权限的加载段;所述第二代码节与第一代码节合并入所述可执行文件,映射为具备可执行权限的加载段;
[0024]所述检视数据包括:预设的所述软件组件期望满足的运行环境约束条件信息对应的数据,覆写可执行文件中的第二数据节;
[0025]所述可执行文件的入口点地址被修改为第二代码节的首地址;
[0026]所述软件组件被运行时,首先执行所述第二代码节中的诊断代码,对软件组件的实际运行环境进行检视,判断实际运行环境是否满足期望的运行环境约束条件;若所述实际运行环境参数信息和所述第二数据节中的数据一致,则跳转至所述软件组件的原入口点地址,正常执行所述软件组件;若所述实际运行环境参数信息和所述运行环境约束条件信息不一致,则退出运行所述软件组件,并输出诊断结果,指示哪些信息不一致。
[0027]在一个可选的示例中,所述可执行文件为ELF格式文件。
[0028]第三方面,本专利技术提供了一种软件组件运行时自检视装置,包括:
[0029]检视代码插桩单元,用于在软件组件的链接过程中插桩检视代码;所述检视代码包括:检视数据节和检视代码节;所述检视数据节的内容遵循运行环境约束条件信息的数据结构,数据项值均为空,用于在可执行文件中进行占位;所述检视代码节包含诊断代码,
用于收集所述软件组件的实际运行环境参数信息,并将所述实际运行环境参数信息和所述运行环境约束条件信息进行对比;
[0030]检视数据写入单元,提供人机界面,用于采集所述软件组件期望满足的运行环境约束条件数据,将该数据覆写至可执行文件中的检视数据节;
[0031]入口地址修改单元,用于将所述软件组件的入口点地址修改为所述检视代码节的首地址;
[0032]组件运行自检单元,用于运行所述软件组件,首先执行所述检视代码节中的诊断代码,对软件组件的实际运行环境进行检视,判断实际运行环境是否满足期望的运行环境约束条件;若所述实际运行环境参数信息和所述运行环境约束条件信息一致,则跳转至所述软件组件的原入口点地址,正常执行所述软件组件;以及若所述实际运行环境参数信息和所述检视代码节中的数据不一致,则退出运行所述软件组件,并输出诊断结果,指示哪些信息不一致。
[0033]在一个可选的示例中,所述检视本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种软件组件运行时自检视方法,其特征在于,包括如下步骤:在软件组件的可执行文件中插入检视代码;所述检视代码包括:检视代码节和检视数据节;所述检视数据节包括所述软件组件期望满足的运行环境约束条件信息;所述检视代码节包含诊断代码,用于收集所述软件组件的实际运行环境参数信息,并将所述实际运行环境参数信息和所述运行环境约束条件信息进行对比;将所述软件组件的入口点地址修改为所述检视代码节的首地址;运行所述软件组件,首先执行所述检视代码节中的诊断代码,对软件组件的实际运行环境进行检视,判断实际运行环境是否满足期望的运行环境约束条件;若所述实际运行环境参数信息和所述运行环境约束条件信息一致,则跳转至所述软件组件的原入口点地址,正常执行所述软件组件;若所述实际运行环境参数信息和所述运行环境约束条件信息不一致,则退出运行所述软件组件,并输出诊断结果,指示哪些信息不一致。2.根据权利要求1所述的方法,其特征在于,所述可执行文件为ELF格式文件。3.根据权利要求1所述的方法,其特征在于,所述运行环境约束条件信息包括但不限于:运行环境变量、配置文件、依赖动态库以及软件版本。4.根据权利要求1至3任一项所述的方法,其特征在于,在软件组件的可执行文件中插入检视代码,具体为:对运行环境约束条件信息的数据结构进行声明,该数据结构由多个数据项组成,数据项为固定长度的字符串,指代某一维度的运行环境约束条件信息;数据项之间按照线性关系顺序存储;在检视代码的源文件中以全局变量的方式定义运行环境约束条件信息的数据结构,数据项中的字符串值均为空,对该文件进行编译,生成命名为check_env.o的可重定位目标文件,其中.text节为检视代码,.data节为全局变量,即值全为空的检视数据;针对链接器ld使用的内部链接脚本进行自定义,新增两条节转换规则,将check_env.o中的.text节合并入链接生成的可执行文件并重命名为check_code检视代码节,将check_env.o中的.data节合并入链接生成的可执行文件并重命名为check_data检视数据节;按照正常的步骤对软件组件的源代码进行编译链接,生成自检视功能未被激活的可执行文件;针对每一个软件组件收集其运行环境约束条件信息,按照运行环境约束条件信息的数据结构进行组织,将该信息覆写至可执行文件中的检视数据节,并将可执行文件的入口点地址修改为检视代码节的首地址,生成自检视功能被激活的最终可执行文件。5.一种软件组件,其特征在于,包括:功能代码、检视代码以及检视数据;所述功能代码包括:第一数据节和第一代码节;所述第一数据节包含软件组件既有的业务数据;所述第一代码节包含软件组件既有的业务代码;所述检视代码包括:第二数据节和第二代码节;所述第二数据节包含运行环境约束条件信息的数据结构,数据项值均为空,用于在可执行文件中进行占位;所述第二代码节包含诊断代码,用于收集所述软件组件的实际运行环境参数信息,并将所述实际运行环境参数信息和预设的运行环境约束条件信息进行对比;所述第二数据节与第一数据节合并入所述软件组件的可执行文件,映射为具备可读写
权限的加载段;所述第二代码节与第一代码...

【专利技术属性】
技术研发人员:秦亮万静强张文昌
申请(专利权)人:中国船舶集团有限公司第七〇九研究所
类型:发明
国别省市:

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

1