[发明专利]一种面向C++二进制文件的控制流图生成方法及电子装置在审
申请号: | 202011321203.2 | 申请日: | 2020-11-23 |
公开(公告)号: | CN114527961A | 公开(公告)日: | 2022-05-24 |
发明(设计)人: | 龚晓锐 | 申请(专利权)人: | 中国科学院信息工程研究所 |
主分类号: | G06F8/30 | 分类号: | G06F8/30;G06F8/41;G06F8/74 |
代理公司: | 北京君尚知识产权代理有限公司 11200 | 代理人: | 余长江 |
地址: | 100093 *** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 面向 c++ 二进制文件 控制 生成 方法 电子 装置 | ||
1.一种面向C++二进制文件的控制流图生成方法,其步骤包括:
1)从C++二进制文件中提取虚函数表与符号表;
2)依据所述符号表获取每一虚函数表中的析构函数,并将虚函数表与相应析构函数进行配对;
3)对每一虚函数表进行交叉引用查询,得到构造函数;
4)通过构造函数、析构函数与直接或间接调用构造函数或析构函数的函数,生成控制流图。
2.如权利要求1所述的方法,其特征在于,通过以下步骤提取虚函数表:
1)运行时类型信息;
2)依据运行时类型信息指针获取的附加信息,得到虚函数表信息。
3.如权利要求1所述的方法,其特征在于,通过以下步骤提取符号表:
1)通过虚函数表,得到虚函数表地址与虚函数表包含的虚函数地址;
2)通过C++二进制文件中提取的虚基类表,得到虚基类表地址与虚基类表字段内容;
3)根据虚函数表地址、虚函数地址、虚基类表地址与虚基类表字段内容,得到符号表。
4.如权利要求1所述的方法,其特征在于,通过以下策略获取每一虚函数表中的析构函数:
1)遍历每一虚函数表中的函数,得到具有虚函数表内存覆写操作的第一函数;
2)依据所述符号表,获取第一函数的第一后面指令或调用第一函数的上层函数的第二后面指令中具有delete操作的第一函数,得到析构函数。
5.如权利要求4所述的方法,其特征在于,覆写操作包括:mov qword[rsi+0x8]或vftptr;delete操作包括:call delete()。
6.如权利要求1所述的方法,其特征在于,通过以下步骤获取所述构造函数:
1)交叉引用查询每一虚函数表,排除掉析构函数,获取第三函数;
2)遍历第三函数,获取具有虚函数表内存覆写操作的第四函数;
3)获取第四函数的第一前序指令和调用第三函数的上层函数的第二前序指令中具有new操作的第四函数,得到构造函数。
7.如权利要求6所述的方法,其特征在于,覆写操作包括:mov qword[rsi+0x8]或vftptr;new操作包括:call new()。
8.如权利要求1所述的方法,其特征在于,通过以下步骤生成控制流图:
1)根据跳转语句,对构造函数地址与析构函数地址组成的集合中每一函数进行基本块划分;
2)将包含直接跳转语句或条件跳转语句的基本块,与跳转目标所在的基本块连接;
3)将包含非系统调用的call指令的基本块与相应call指令指向函数地址所在的基本块连接,其中将不存在集合中的相应call指令指向函数地址所在的基本块,添加进集合;
4)若跳转语句的跳转目标地址在已分析基本块中,且不是已分析基本块的起始地址或结束地址,则将该已分析基本块对于跳转目标地址进行分割;
5)分别对循环结构的走向循环路径分支与无返回的路径结构的走向路径分支进行标记。
9.一种存储介质,所述存储介质中存储有计算机程序,其中,所述计算机程序被设置为运行时执行权利要求1-8中任一所述方法。
10.一种电子装置,包括存储器和处理器,所述存储器中存储有计算机程序,所述处理器被设置为运行所述计算机程序以执行如权利要求1-8中任一所述方法。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院信息工程研究所,未经中国科学院信息工程研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202011321203.2/1.html,转载请声明来源钻瓜专利网。