【技术实现步骤摘要】
一种C++系统的软件定义化关键函数定位与提取方法
本专利技术涉及软件分析领域,特别是涉及一种C++系统的软件定义化关键函数定位与提取方法。
技术介绍
关键函数是指应用软件在某个运行阶段发挥着关键作用的核心功能函数。对软件中的关键函数进行快速定位与提取有助于分析理解该软件。然而,软件系统发展到今天,平台众多,不同的平台上软件的运行环境不同,其编程语言、编程框架也千差万别,导致进行关键函数定位与分析的方法也各有不同。其中,C++开发的Windows客户端软件系统占据了很大的比例,在工控等领域很常见。因此,如何辅助开发人员解决没有源码,缺少维护的C++开发的Windows客户端软件系统的关键函数定位和提取问题是非常重要的。
技术实现思路
本专利技术公开了一种C++系统的软件定义化关键函数定位与提取方法,包括:在基于C++开发的用户系统的可执行文件中进行插桩,以对汇编语言中的函数的运行信息进行记录,获得函数运行日志;显示所述函数运行日志,当接收到用户查询业务数据的触发操作时,在所述函数运行日志中定 ...
【技术保护点】
1.一种C++系统的软件定义化关键函数定位与提取方法,其特征在于,包括:/n在基于C++开发的用户系统的可执行文件中进行插桩,以对汇编语言中的函数的运行信息进行记录,获得函数运行日志;/n显示所述函数运行日志,当接收到用户查询业务数据的触发操作时,在所述函数运行日志中定位所述业务数据关联的关键函数;/n根据所述关键函数的运行信息,确定所述关键函数的调用约定和参数类型;/n生成所述关键函数的调用代码,将所述调用代码进行封装并注入所述用户系统,以提取所述关键函数。/n
【技术特征摘要】
1.一种C++系统的软件定义化关键函数定位与提取方法,其特征在于,包括:
在基于C++开发的用户系统的可执行文件中进行插桩,以对汇编语言中的函数的运行信息进行记录,获得函数运行日志;
显示所述函数运行日志,当接收到用户查询业务数据的触发操作时,在所述函数运行日志中定位所述业务数据关联的关键函数;
根据所述关键函数的运行信息,确定所述关键函数的调用约定和参数类型;
生成所述关键函数的调用代码,将所述调用代码进行封装并注入所述用户系统,以提取所述关键函数。
2.根据权利要求1所述的方法,其特征在于,所述运行信息包括函数的调用信息、返回信息以及地址信息;在基于C++开发的用户系统的可执行文件中进行插桩,以对汇编语言中的函数的运行信息进行记录,获得函数运行日志,包括:
利用C语言指针在基于C++开发的用户系统的可执行文件中写入插桩代码;
通过所述插桩代码对汇编语言中的函数的调用信息、返回信息以及地址信息进行记录,获得函数运行日志。
3.根据权利要求2所述的方法,其特征在于,通过所述插桩代码对汇编语言中的函数的调用信息、返回信息以及地址信息进行记录,获得函数运行日志,包括:
在接收到运行所述插桩代码的触发操作时,通过所述插桩代码对汇编语言中的函数的调用信息、返回信息以及地址信息写入所述用户系统的内存;
当所述内存中的数据量达到预设存储阈值时,将所述内存中的所述函数的调用信息、返回信息以及地址信息写入所述函数运行日志。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
确定所述函数中的非逻辑函数;
判断所述非逻辑函数的调用次数;
当所述非逻辑函数的调用次数大于等于预设记录阈值时,停止将所述非逻辑函数的调用信息、返回信息以及地址信息写入所述函数运行日志。
5.根据权利要求1~4任一项所述的方法,其特征在于,所述方法还包括:
删除所述函数运行日志中没有对应调用信息的返回信息;
删除所述函数运行日志中没有对应返回信息的调用信息。
6.根据权利要求2所述的方法,其特征在于,所述函数运行日志包括多个日志文件,所述日志文件与线程一一对应;显示所述函数运行日志,包括:
针对每个线程,在相应的日志文件中,以函数为显示条目,在所述显示条目内显示所述函数的调用信息、返回信息以及地址信息;其中:
针对所述函数的调用信息内部不同层次的调用结构,用缩进表示栈的深度;
所述函数的调用信息、返回信息与所述函数的地址信息具有匹配关系。
7.根据权利要求1或6所述的方法,其特征在于,所述方法还包括:
收集所述业务数据对应的字符串;
当接收...
【专利技术属性】
技术研发人员:黄罡,张颖,史默臻,蔡华谦,
申请(专利权)人:北京大学,
类型:发明
国别省市:北京;11
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。