【技术实现步骤摘要】
一种获取Linux内核中数据结构偏移的方法和装置
[0001]本专利技术涉及数据结构偏移获取技术,具体是通过统计多版本Linux源代码中指定结构体的指定域的通用引用函数,然后提取该函数中关于该指定结构体的指定域的特征,从而得到一种在Linux内核二进制文件中获得该域偏移值的一种特征,进而实现针对Linux操作系统内核的二进制文件指定结构体的指定域的偏移的获取。
技术介绍
[0002]内存取证和虚拟机自省技术往往都需要使用内存分析的方法获取内存中一些数据结构的地址和值,这涉及到内核中一些数据结构的关联关系,这些关联关系是以“结构体
‑
域”的形式体现的。图1展示了一个关联关系的示例,如图1(a)所示,其中task_struct结构体属于Linux内核的进程控制块(PCB)的一部分,作为进程描述符包含了进程的控制信息,如域comm[TASK_COMM_LEN]表示进程名,域pid表示进程的PID,域mm表示进程的内存描述符等。类似的,mm_struct是进程的内存描述符,域pgd是进程的页全局目录(Page Gl ...
【技术保护点】
【技术特征摘要】
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_o...
【专利技术属性】
技术研发人员:张禹,邹燕燕,孙俭,钟楠宇,刘宝旭,霍玮,
申请(专利权)人:中国科学院信息工程研究所,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。