预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共12页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

(19)中华人民共和国国家知识产权局(12)发明专利申请(10)申请公布号CN114281338A(43)申请公布日2022.04.05(21)申请号202111413438.9(22)申请日2021.11.25(71)申请人中国科学院信息工程研究所地址100093北京市海淀区闵庄路甲89号(72)发明人张禹邹燕燕孙俭钟楠宇刘宝旭霍玮(74)专利代理机构北京君尚知识产权代理有限公司11200代理人司立彬(51)Int.Cl.G06F8/41(2018.01)G06F9/455(2006.01)G06F12/06(2006.01)权利要求书2页说明书5页附图4页(54)发明名称一种获取Linux内核中数据结构偏移的方法和装置(57)摘要本发明公开了一种获取Linux内核中数据结构偏移的方法和装置。本方法为:对于给定的包含目标Linux内核文件的N个Linux源代码版本,对每一版本的所有函数进行静态源代码分析,获取所有包含指定结构体S的指定域f的引用并且不是显式声明为内联函数的函数,并计算每一所述函数关于所述指定结构体S和所述指定域f的特征,生成一函数列表;然后依据函数声明求取N个函数列表的交集,生成跨版本的通用函数列表;然后将复杂性最低的稳定函数的部分特征作为引用向量;利用所述引用向量对目标内核文件进行分析,获得引用向量对应的函数的汇编代码中对于初始结构体S的所有域引用;依据所述引用向量中的特征获得对应的域引用确定偏移量。CN114281338ACN114281338A权利要求书1/2页1.一种获取Linux内核中数据结构偏移的方法,其步骤包括:1)获取N个Linux源代码版本,其中包含目标Linux内核文件的Linux源代码版本;2)对于每一所述Linux源代码版本的所有函数进行静态源代码分析,获取所有包含指定结构体S的指定域f的引用并且不是显式声明为内联函数inline的函数,并计算每一所述函数关于所述指定结构体S和所述指定域f的特征,生成对应Linux源代码版本的函数列表;所述函数列表中包括若干个所述函数及其对应的特征;3)根据该N个Linux源代码版本所对应的函数列表,依据函数声明求取N个所述函数列表的交集,生成跨版本的通用函数列表;4)根据所述通用函数列表中的每个函数对应的特征,确定所述函数是否为稳定函数;5)计算每个所述稳定函数对于所述指定域f的引用的复杂性;将复杂性最低的稳定函数的部分特征作为引用向量;6)利用所述引用向量对所述目标Linux内核文件进行静态二进制分析,确定所述目标Linux内核中所述引用向量对应的函数,获取该函数的汇编代码;7)根据所述汇编代码建立数据流图;8)根据所述引用向量确定初始结构体所在的寄存器作为源,以此源开始进行前向切片,获取初始结构体影响到的所有语句;9)对前向切片的结果进行分析,获得所述汇编代码中对于指定结构体S的所有域引用;然后依据所述引用向量中的特征获得对应的域引用确定所述目标Linux内核中所述指定结构体S的指定域f在内核中的偏移量。2.根据权利要求1所述的方法,其特征在于,所述特征包括S_order:指定结构体S作为函数的参数的顺序;S_ref:指定结构体S在函数中全部的域引用次数;S_inline:函数中指定结构体S作为参数的内联函数的调用数量;S_macro:函数中指定结构体S作为参数的宏定义数量;f_order:指定域f在指定结构体S的全部域引用的顺序;scale:函数的大小。3.根据权利要求2所述的方法,其特征在于,确定所述函数是否为稳定函数的方法为:通过对比每个版本Linux中同一函数的特征f_order,S_order,S_inline和S_macro的取值是否相同,如果相同则所述函数为稳定函数。4.根据权利要求3所述的方法,其特征在于,根据公式scale*f_order*(S_ref+S_inline+S_macro)计算每个所述稳定函数对于所述指定域f的引用的复杂性。5.根据权利要求3所述的方法,其特征在于,所述稳定函数的部分特征包括函数名、S_order,S_ref和f_order。6.根据权利要求3所述的方法,其特征在于,根据所述引用向量中的S_order成员获得初始结构体:如果S_order不为0,则根据所述引用向量的S_order定位初始结构体所在的寄存器;如果S_order为0,则结合源代码中的代码模式定位到初始结构体所在的寄存器。7.根据权利要求3所述的方法,其特征在于,步骤9)中,对前向切片的结果进行分析,将初始结构体指针存在加一个立即数操作的,视为一次域引用,从而获得所述汇编代码中对于初始结构体的所有域引用;然后根据所述引用向量中的特征f_order提取对应的域引用,2CN114281338A权利要求书2/2页获得所述目标Linux内核中所述