[发明专利]一种基于链表和逆向遍历的汇编代码中if结构识别方法在审
| 申请号: | 202211670829.3 | 申请日: | 2022-12-23 |
| 公开(公告)号: | CN115857953A | 公开(公告)日: | 2023-03-28 |
| 发明(设计)人: | 李根;吴瑾;郭向英;于婷婷;高栋栋;王博祥;刘璟炜;盛庄 | 申请(专利权)人: | 北京轩宇信息技术有限公司 |
| 主分类号: | G06F8/53 | 分类号: | G06F8/53 |
| 代理公司: | 暂无信息 | 代理人: | 暂无信息 |
| 地址: | 101300 北京市顺义*** | 国省代码: | 北京;11 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 基于 逆向 遍历 汇编 代码 if 结构 识别 方法 | ||
1.一种基于链表和逆向遍历的汇编代码中if结构识别方法,包括以下步骤:步骤一,创建链表和以地址为索引图的图;步骤二,汇编指令汇总与存储;步骤三,反优化操作;步骤四,逆向遍历链表;步骤五,无条件跳转指令的识别与归纳;步骤六,条件跳转指令的识别与归纳;其特征在于:
其中在上述步骤一中,创建一个存放地址单元指针的链表和以地址为索引图的图,用于顺序式存储和索引地址单元使用;
其中在上述步骤二中,汇编指令的汇总:获取原始汇编代码后,遍历汇编指令,将其中的所有跳转指令的起始地址和目标地址进行提取,将所有跳转指令与其起始地址配对、将所有的跳转指令与其跳转目标地址配对,以此得到地址和跳转指令的配对,以相同地址作为条件进行汇总,对地址去重,相同地址只保留一个单例;汇编指令的存储:创建地址单元将起始地址和跳转地址及指令存入对应变量中,将地址单元的指针存入步骤一中所创建的链表和图,如果图中已存在某键值,则不需创建地址单元,而是将指令及其输入放入已有该地址的地址单元中;
其中在上述步骤三中,利用反优化方法,对跳转合并的地址进行还原,变更被优化跳转目标地址的指令的值;
其中在上述步骤四中,依次对链表中指针指向的地址单元实例进行逆向遍历,依据识别策略识别其中的if-then或if-else核心结构,新建if分支单元A并赋值,将条件跳转指令存入一条新建的if布尔表达式判定单元,并将该判定式归属于该if分支单元A;如果被遍历到的地址单元为已被标记为已解析状态,则继续逆向遍历链表;如果遍历到指针指向的地址单元内存在以其地址变量为起始地址的直接跳转的指令,则执行步骤五;如果存在以其地址变量为起始地址的条件跳转的指令,则执行步骤六;如果存在以其地址变量为起始地址的非跳转的指令,标记为已解析后,则继续逆向遍历链表,当遍历至第一条汇编语句的时候,识别完成,整个解析过程停止,并输出if分支单元的对象关系图;
其中在上述步骤五中,对无条件跳转指令,利用识别策略识别是否有对应的条件跳转组成if-else核结构,若有,则加入if分支单元链表;若无,则继续遍历;
其中在上述步骤六中,对条件跳转指令,根据其是否与其他if、if-else核结构或if分支单元链表中元素项的构成“与”或“或”关系,将其归纳为新的if布尔表达式判定单元或一个新的if核结构,并根据是否被其它的分支单元跨越,而确定是否放入if分支单元链表或放入其它if分支单元的if分支内容中。
2.根据权利要求1所述的一种基于链表和逆向遍历的汇编代码中if结构识别方法,其特征在于:所述步骤二中,汇编指令的存储具体为:生成与汇总地址数目相同的地址单元实例集,将每个地址和以该地址为起始地址的跳转指令存储在指令节点中,若有多个跳转指令的目标地址对应该地址,则将它(它们)存储在该地址单元链表中,但链表中的指令要按其起始地址的大小升序排列,即按照指针指向的地址单元的地址变量的升序,对链表中的指针进行排序;链表中的元素依次存入步骤一中所创建的图中,键值为指针指向的地址单元内的地址变量。
3.根据权利要求1所述的一种基于链表和逆向遍历的汇编代码中if结构识别方法,其特征在于:所述步骤三中,反优化操作的原理为:一个条件跳转指令的目标地址大于其起始地址,若其跨度区间内存在一个无被交叉的直接跳转指令,且该直接跳转指令的跳转目标地址与条件跳转指令的目标地址相同,则这个条件跳转指令的目标地址被修正为直接跳转指令的跳转目标地址的值。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京轩宇信息技术有限公司,未经北京轩宇信息技术有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202211670829.3/1.html,转载请声明来源钻瓜专利网。





