[发明专利]一种C++系统的软件定义化关键函数定位与提取方法有效
申请号: | 202010520447.7 | 申请日: | 2020-06-08 |
公开(公告)号: | CN111857681B | 公开(公告)日: | 2021-04-30 |
发明(设计)人: | 黄罡;张颖;史默臻;蔡华谦 | 申请(专利权)人: | 北京大学 |
主分类号: | G06F8/30 | 分类号: | G06F8/30;G06F11/34 |
代理公司: | 北京润泽恒知识产权代理有限公司 11319 | 代理人: | 苟冬梅 |
地址: | 100871*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 c++ 系统 软件 定义 关键 函数 定位 提取 方法 | ||
本发明提供了一种C++系统的软件定义化关键函数定位与提取方法,涉及软件分析领域,本发明在基于C++开发的用户系统的可执行文件中进行插桩,以对汇编语言中的函数的运行信息进行记录,获得函数运行日志,然后将该函数运行日志提供给用户,使用户可以在该函数运行日志中搜索、定位包含了业务数据的生成和展示的关键函数,接着对所述关键函数的调用约定和参数类型进行确定,以生成所述关键函数的调用代码,并将所述调用代码注入所述用户系统,以提取所述关键函数,从而有助于软件分析。
技术领域
本发明涉及软件分析领域,特别是涉及一种C++系统的软件定义化关键函数定位与提取方法。
背景技术
关键函数是指应用软件在某个运行阶段发挥着关键作用的核心功能函数。对软件中的关键函数进行快速定位与提取有助于分析理解该软件。然而,软件系统发展到今天,平台众多,不同的平台上软件的运行环境不同,其编程语言、编程框架也千差万别,导致进行关键函数定位与分析的方法也各有不同。其中,C++开发的Windows客户端软件系统占据了很大的比例,在工控等领域很常见。因此,如何辅助开发人员解决没有源码,缺少维护的C++开发的Windows客户端软件系统的关键函数定位和提取问题是非常重要的。
发明内容
本发明公开了一种C++系统的软件定义化关键函数定位与提取方法,包括:
在基于C++开发的用户系统的可执行文件中进行插桩,以对汇编语言中的函数的运行信息进行记录,获得函数运行日志;
显示所述函数运行日志,当接收到用户查询业务数据的触发操作时,在所述函数运行日志中定位所述业务数据关联的关键函数;
根据所述关键函数的运行信息,确定所述关键函数的调用约定和参数类型;
生成所述关键函数的调用代码,将所述调用代码进行封装并注入所述用户系统,以提取所述关键函数。
可选的,所述运行信息包括函数的调用信息、返回信息以及地址信息;在基于C++开发的用户系统的可执行文件中进行插桩,以对汇编语言中的函数的运行信息进行记录,获得函数运行日志,包括:
利用C语言指针在基于C++开发的用户系统的可执行文件中写入插桩代码;
通过所述插桩代码对汇编语言中的函数的调用信息、返回信息以及地址信息进行记录,获得函数运行日志。
可选的,通过所述插桩代码对汇编语言中的函数的调用信息、返回信息以及地址信息进行记录,获得函数运行日志,包括:
在接收到运行所述插桩代码的触发操作时,通过所述插桩代码对汇编语言中的函数的调用信息、返回信息以及地址信息写入所述用户系统的内存;
当所述内存中的数据量达到预设存储阈值时,将所述内存中的所述函数的调用信息、返回信息以及地址信息写入所述函数运行日志。
可选的,所述方法还包括:
确定所述函数中的非逻辑函数;
判断所述非逻辑函数的调用次数;
当所述非逻辑函数的调用次数大于等于预设记录阈值时,停止将所述非逻辑函数的调用信息、返回信息以及地址信息写入所述函数运行日志。
可选的,所述方法还包括:
删除所述函数运行日志中没有对应调用信息的返回信息;
删除所述函数运行日志中没有对应返回信息的调用信息。
可选的,所述函数运行日志包括多个日志文件,所述日志文件与线程一一对应;显示所述函数运行日志,包括:
针对每个线程,在相应的日志文件中,以函数为显示条目,在所述显示条目内显示所述函数的调用信息、返回信息以及地址信息;其中:
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京大学,未经北京大学许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202010520447.7/2.html,转载请声明来源钻瓜专利网。