[发明专利]一种函数调用路径获取的方法和相关装置有效
| 申请号: | 201810800298.2 | 申请日: | 2018-07-20 |
| 公开(公告)号: | CN110737465B | 公开(公告)日: | 2023-09-22 |
| 发明(设计)人: | 周志刚 | 申请(专利权)人: | 深圳市大梦龙途网络科技有限公司 |
| 主分类号: | G06F8/75 | 分类号: | G06F8/75 |
| 代理公司: | 深圳市恒程创新知识产权代理有限公司 44542 | 代理人: | 赵爱蓉 |
| 地址: | 518000 广东省深圳市南山区粤海*** | 国省代码: | 广东;44 |
| 权利要求书: | 查看更多 | 说明书: | 查看更多 |
| 摘要: | |||
| 搜索关键词: | 一种 函数 调用 路径 获取 方法 相关 装置 | ||
本发明实施例公开了一种函数调用路径获取的方法和相关装置。本发明实施例方法包括:调用API中的EnumProcessModule函数获取当前进程中加载的所有模块的模块信息,所述模块信息包括内存起始地址、内存结束地址和模块的标识信息;通过标准模板库STL中的链表listModuleInfo存储所述所有模块的模块信息;获取核心函数的调用链路,所述调用链路与所述核心函数的内存地址对应;将所述核心函数的调用链路包含于try_except函数中以进行读取操作;当所述读取操作正常执行时,确定获取到的所述核心函数的调用链路是否存在于链路存储集合中;当所述核心函数的调用链路不存在于所述链路存储集合中时,通过所述STL中的数组VectorDWORD将所述核心函数的调用链路保存在所述链路存储集合中。
技术领域
本发明涉及开发平台领域,尤其涉及一种函数调用路径获取的方法和相关装置。
背景技术
目前,针对Windows平台开发的一些软件,其功能会拆分到多个模块来进行开发,通过主程序和多个模块最终组成软件的整个功能,并且每一个功能都会进行封装,并且做到低偶合,上层的功能调用最终调用到底层的功能模块中。然而,对于整个程序来说编写的一些底层功能并不知道调用者是谁,并且一个调用者可能是先调用模块A,然后通过模块A来调用模块C中的一个功能,或者是模块A调用了模块C,模块C又调用了模块A最终通过模块A来调用了对应的功能,这样对于功能调用并非最优的方式,即功能调用的效率并不高。
因此,对于一些核心的功能,如果能够统计出其所有调用者,并且能够找到调用的路径是从哪个模块调用过来,即可达到优化整个调用链,并提高核心功能被调用的速度的目的。
发明内容
本发明实施例提供了一种函数调用路径获取的方法和相关装置,用于确定核心函数的调用路径以进行优化,进而提高软件的执行效率。
本发明实施例的第一方面提供了一种函数调用路径获取的方法,所述方法应用于Windows系统,包括:调用应用程序编程接口API中的EnumProcessModule函数获取当前进程中加载的所有模块的模块信息,所述模块信息包括内存起始地址、内存结束地址和模块的标识信息;通过标准模板库STL中的链表listModuleInfo存储所述所有模块的模块信息;获取核心函数的调用链路,所述调用链路与所述核心函数的内存地址对应;将所述核心函数的调用链路包含于try_except函数中以进行读取操作;当所述读取操作正常执行时,确定获取到的所述核心函数的调用链路是否存在于链路存储集合中;当所述核心函数的调用链路不存在于所述链路存储集合中时,通过所述STL中的数组VectorDWORD将所述核心函数的调用链路保存在所述链路存储集合中。
在一种可能的实施例中,所述通过所述STL中的数组VectorDWORD将所述核心函数的调用链路保存在所述链路存储集合之后,所述方法还包括:根据所述核心函数的调用链路查询所述调用链路对应的模块信息。
在一种可能的实施例中,所述根据所述核心函数的调用链路查询所述调用链路对应的模块信息包括:编写所述调用链路的第一迭代器,所述第一迭代器的赋值为所述调用链路的头结点;编写for循环函数,并根据所述第一迭代器遍历所述链路存储集合,以获取所述核心函数的调用地址;根据所述核心函数的调用地址查询与所述核心函数的调用地址对应的模块信息。
在一种可能的实施例中,所述通过调用API中的EnumProcessModule函数获取当前进程中加载的所有模块的模块信息包括:调用所述API中的OpenProcess函数以打开所述当前进程的句柄;调用所述API中的GetModuleInformation函数获取所述所有模块的内存起始地址和内存结束地址;调用所述API中的GetModuleFileNameEx函数获取所述所有模块的标识信息;调用所述EnumProcessModule函数,并根据所述当前进程的句柄和存放所述句柄的数组,获取所述所有模块的模块信息。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于深圳市大梦龙途网络科技有限公司,未经深圳市大梦龙途网络科技有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201810800298.2/2.html,转载请声明来源钻瓜专利网。





