被调用库函数的解析方法技术

技术编号:39575391 阅读:8 留言:0更新日期:2023-12-03 19:27
本发明专利技术涉及应用程序调试技术领域,公开了一种被调用库函数的解析方法

【技术实现步骤摘要】
被调用库函数的解析方法、装置、计算机设备及存储介质


[0001]本专利技术涉及应用程序调试
,具体涉及一种被调用库函数的解析方法

装置

计算机设备及存储介质


技术介绍

[0002]Ltrace
是一个功能非常强大的用户空间程序,利用
ltrace
可以诊断和调试目标程序的目标进程,通过将目标进程绑定为
ltrace
的子进程,
ltrace
就可以跟踪目标进程,控制目标进程的运行停止,解析打印目标进程的被调用库函数的参数和返回值等信息

[0003]然而,
ltrace
只可以解析隐式调用的库函数,而无法解析显示调用的库函数

这是因为,通过隐式调用的库函数属于外部符号,外部符号记录在
ELF(Executable and Linkable Format
,一种可行性的目标文件格式
)
文件的
.rel.plt
段中,通过解析
ELF
文件的
.rel.plt
段可以获取库函数的间接地址,在这个间接地址上就可以打上断点,然后触发该断点并解析打印其参数和返回值等信息

而显示调用的库函数,在运行时直接获取字符串函数地址,在编译期的
ELF
文件中并没有对应的段符号,所有没有办法添加函数断点,导致解析打印其参数和返回值等信息

[0004]因此,现有技术存在只能解析隐式调用的库函数,无法解析显式调用的库函数的问题


技术实现思路

[0005]有鉴于此,本专利技术提供了一种被调用库函数的解析方法

装置

计算机设备及存储介质,以解决现有技术中存在只能解析隐式调用的库函数,无法解析显式调用的库函数的问题

[0006]第一方面,本专利技术提供了一种被调用库函数的解析方法,该方法包括:
[0007]当目标程序调用库函数并触发入口断点时,判断被调用库函数是否为预设类型函数;
[0008]在被调用库函数是预设类型函数的情况下,对被调用库函数进行第一处理,得到被调用库函数的相关参数;
[0009]在被调用库函数不是预设类型函数或已对调用库函数进行第一处理的情况下,设置出口断点,获取被调用库函数的相关信息;
[0010]当被调用库函数执行完毕并触发出口断点时,获取被调用库函数的返回值,基于相关参数设置注入程序,其中,注入程序用于后续调用预设类型函数时,解析预设类型函数

[0011]本实施例提供的被调用库函数的解析方法,当目标程序调用库函数并触发入口断点时,判断被调用库函数是否为显示调用的库函数,如果是,则对库函数进行特殊的处理,得到相关参数

之后,设置出口断点,获取被调用库函数的相关信息;当被调用库函数执行完毕并触发出口断点时,获取被调用库函数的返回值,基于相关参数创建或更新注入程序,
既解析了显示调用的库函数,又设置了注入程序,便于后续子进程再次调用预设类型函数时,基于注入程序解析预设类型函数

以达到可以同时解析出显式调用和隐式调用的动态库函数,给调试程序带来极大的便利性,提高调试的效率的效果

解决了只能解析隐式调用的库函数,无法解析显式调用的库函数的问题

[0012]在一种可选的实施方式中,在当目标程序调用库函数并触发入口断点时,判断被调用库函数是否为预设类型函数之前,方法还包括:
[0013]将目标程序绑定到测试程序,其中,测试程序用于控制目标程序;
[0014]将目标程序的进程作为子进程,将测试程序的进程作为父进程,其中,父进程用于控制子进程;
[0015]利用父进程获取子进程的目标文件,并根据目标文件中的段信息,得到子进程的第一目标参数;
[0016]利用父进程获取子进程的运行地址,并根据运行地址计算第二目标参数;
[0017]将第一目标参数和第二目标参数加入中断列表,并根据中断列表设置入口断点

[0018]在本实施方式中,先用调试程序绑定到目标程序,让目标程序成为调试程序的子进程,方便父子进程信息交互

利用父进程获取子进程对应的第一目标参数和第二目标参数,将第一目标参数和第二目标参数加入中断列表,并根据中断列表设置入口断点,为后续触发入口断点,对被调用库函数进行解析提供基础

[0019]在一种可选的实施方式中,判断被调用库函数是否为预设类型函数,包括:
[0020]利用父进程获取子进程的控制权;
[0021]在父进程获取子进程的控制权之后,获取子进程的堆栈信息;
[0022]解析堆栈信息,得到调用函数参数信息;
[0023]根据调用函数参数信息判断被调用库函数是否为预设类型函数

[0024]在本实施方式中,利用父进程获取子进程的堆栈信息,进而得到调用函数参数信息,根据调用函数参数信息判断被调用库函数是否为预设类型函数,为后续对预设类型函数进行第一处理提供基础

[0025]在一种可选的实施方式中,预设类型函数包括第一预设函数和第二预设函数,在被调用库函数是预设类型函数的情况下,对被调用库函数进行第一处理,得到被调用库函数的相关参数,包括:
[0026]在被调用库函数是第一预设函数的情况下,获取用于确定调用第一预设函数需要打开库的第一参数,并解析库,得到库的导出符号的第一数量;
[0027]在被调用库函数是第二预设函数的情况下,获取用于确定调用第二预设函数需要打开库的第一参数和第二参数,并保存第二预设函数对应的第一参数和第二参数,其中,第二参数用于确定函数名称

[0028]在本实施方式中,根据被调用库函数的类型,获取被调用库函数的相关参数,如果是第一预设函数,则获取第一参数和第一数量,如果是第二预设函数,则获取第一参数和第二参数,便于后续设置注入程序

[0029]在一种可选的实施方式中,基于相关参数设置注入程序,包括:
[0030]判断被调用库函数是否为第一预设函数

第二预设函数或第三预设函数;
[0031]在被调用库函数是第一预设函数的情况下,利用父进程创建包含第一数量个第一
表格和第二表格的注入程序,其中,注入程序用于解析被调用库函数,第一表格和第二表格用于确定被调用库函数的函数地址,第一表格中每一个表项指向第二表格中对应的表项;
[0032]将注入程序注入子进程的进程空间,并获取注入程序的第一表格和第二表格的地址位置;
[0033]在被调用库函数是第二预设函数的情况下,根据第一参数确定第二预设函数对应的第一表格和第二表格;
[0034]在第二表格中确定未使用表项,本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.
一种被调用库函数的解析方法,其特征在于,所述方法包括:当目标程序调用库函数并触发入口断点时,判断被调用库函数是否为预设类型函数;在所述被调用库函数是所述预设类型函数的情况下,对所述被调用库函数进行第一处理,得到所述被调用库函数的相关参数;在所述被调用库函数不是所述预设类型函数或已对所述调用库函数进行所述第一处理的情况下,设置出口断点,获取所述被调用库函数的相关信息;当所述被调用库函数执行完毕并触发所述出口断点时,获取所述被调用库函数的返回值,基于所述相关参数设置注入程序,其中,所述注入程序用于后续调用所述预设类型函数时,解析所述预设类型函数
。2.
根据权利要求1所述的方法,其特征在于,在所述当目标程序调用库函数并触发入口断点时,判断被调用库函数是否为预设类型函数之前,所述方法还包括:将所述目标程序绑定到测试程序,其中,所述测试程序用于控制所述目标程序;将所述目标程序的进程作为子进程,将所述测试程序的进程作为父进程,其中,所述父进程用于控制所述子进程;利用所述父进程获取所述子进程的目标文件,并根据所述目标文件中的段信息,得到所述子进程的第一目标参数;利用所述父进程获取所述子进程的运行地址,并根据所述运行地址计算第二目标参数;将所述第一目标参数和所述第二目标参数加入中断列表,并根据所述中断列表设置所述入口断点
。3.
根据权利要求2所述的方法,其特征在于,所述判断被调用库函数是否为预设类型函数,包括:利用所述父进程获取所述子进程的控制权;在所述父进程获取所述子进程的所述控制权之后,获取所述子进程的堆栈信息;解析所述堆栈信息,得到调用函数参数信息;根据所述调用函数参数信息判断所述被调用库函数是否为预设类型函数
。4.
根据权利要求3所述的方法,其特征在于,所述预设类型函数包括第一预设函数和第二预设函数,所述在所述被调用库函数是所述预设类型函数的情况下,对所述被调用库函数进行第一处理,得到所述被调用库函数的相关参数,包括:在所述被调用库函数是所述第一预设函数的情况下,获取用于确定调用所述第一预设函数需要打开库的第一参数,并解析所述库,得到所述库的导出符号的第一数量;在所述被调用库函数是所述第二预设函数的情况下,获取用于确定调用所述第二预设函数需要打开库的第一参数和第二参数,并保存所述第二预设函数对应的第一参数和所述第二参数,其中,所述第二参数用于确定函数名称
。5.
根据权利要求4所述的方法,其特征在于,所述基于所述相关参数设置注入程序,包括:判断所述被调用库函数是否为所述第一预设函数

所述第二预设函数或第三预设函数;在所述被调用库函数是所述第一预设函数的情况下,利用所述父进程创建包含第一数
量个第一表格和第二表格的所述注入程序,其中,所述注入程序用于解析所述被调用库函数,所述第一表格和所述第二表格用于确定所述被调用库函数的函数地址,所述第一表格中每一个表项指向所述第二表格中对应的表项;将所述注入程序注入所述子进程的进程空间,并获...

【专利技术属性】
技术研发人员:乔成
申请(专利权)人:山东云海国创云计算装备产业创新中心有限公司
类型:发明
国别省市:

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

1