CN106502876A - 一种热点函数确定的方法及相关设备 - Google Patents
一种热点函数确定的方法及相关设备 Download PDFInfo
- Publication number
- CN106502876A CN106502876A CN201610969657.8A CN201610969657A CN106502876A CN 106502876 A CN106502876 A CN 106502876A CN 201610969657 A CN201610969657 A CN 201610969657A CN 106502876 A CN106502876 A CN 106502876A
- Authority
- CN
- China
- Prior art keywords
- function
- target program
- terminal
- module
- whole functions
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/34—Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
- G06F11/3466—Performance evaluation by tracing or monitoring
- G06F11/3476—Data logging
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/30—Monitoring
- G06F11/3003—Monitoring arrangements specially adapted to the computing system or computing system component being monitored
- G06F11/302—Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a software system
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Quality & Reliability (AREA)
- General Physics & Mathematics (AREA)
- Computing Systems (AREA)
- Computer Hardware Design (AREA)
- Mathematical Physics (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明实施例公开了一种热点函数确定的方法及相关设备。用于本发明实施例方法包括:终端获取目标程序中的程序数据库文件PDB文件;终端对目标程序中的PDB文件进行解析,得到目标程序中全部函数及全部函数对应的函数信息集合,函数信息集合包括各函数的标识;终端将各函数的标识存储至预置的存储区;当终端执行目标程序时,每当执行到任一第一函数时,跳转到与任一第一函数的标识所对应的存储区,对任一第一函数的被执行的次数加1;终端根据存储区中的各函数的执行次数的记录信息,确定目标程序中的热点函数。
Description
技术领域
本发明涉及计算机领域,尤其涉及一种热点函数确定的方法及相关设备。
背景技术
程序是由一个个函数构成的,当终端(例如,计算机,手机等)在运行程序的过程中,程序中的函数执行次数是不同的,而且有可能不同的函数执行的次数千差万别,以游戏程序为例,在游戏中那些执行次数非常多的函数的执行效率严重影响整个游戏的执行性能。
传统的方法中,测试人员通过手动方式对关注的函数进行执行情况分析,需要确定函数原型并且需要针对目标函数编写对应的代码,如果关注的函数发生变化或关注的函数增加了,都需要重新编码来获取信息。需要花费很大的人力成本。并且仅仅可以获取关注的函数的执行次数,无法确定该函数是否是热点函数。
发明内容
本发明实施例提供了一种热点函数确定的方法及相关设备。
第一方面,本发明实施例提供了一种热点函数确定的方法,包括:
终端获取目标程序中的程序数据库文件PDB文件;
所述终端对所述目标程序中的PDB文件进行解析,得到所述目标程序中全部函数及所述全部函数对应的函数信息集合,所述函数信息集合包括各函数的标识;
所述终端将所述各函数的标识存储至预置的存储区;
当所述终端执行所述目标程序时,每当执行到任一第一函数时,跳转到与所述任一第一函数的标识所对应的存储区,对所述任一第一函数的被执行的次数加1;
所述终端根据所述存储区中的各函数的执行次数的记录信息,确定所述目标程序中的热点函数。
第二方面,本发明实施例提供了一种热点函数确定的方法,包括:
服务器接收终端发送的目标程序中的程序数据库文件PDB文件;
所述服务器对所述PDB文件进行解析,得到所述目标程序中的全部函数;
所述服务器确定所述全部函数中的各第一函数,所述各第一函数为与执行次数具有跳转关系的函数;
所述服务器通过hook将函数记录操作注入到所述第一函数里生成测试工具包;
所述服务器将所述测试工具包发送给所述终端,以使所述终端根据所述测试工具包对所述目标程序中的全部函数的执行次数进行测试,以确定所述目标程序中的热点函数。
第三方面,本发明实施例提供了一种终端,包括:
获取模块,用于获取目标程序中的程序数据库文件PDB文件;
解析模块,用于对所述获取模块获取的所述目标程序中的PDB文件进行解析,得到所述目标程序中全部函数及所述全部函数对应的函数信息集合,所述函数信息集合包括各函数的标识,所述PDB文件还用于确定所述全部函数中的各第一函数,所述各第一函数为被hook后与执行次数具有跳转关系的函数;
存储模块,用于将所述各函数的标识存储至预置的存储区;
执行模块,用于当执行所述目标程序时,每当执行到任一第一函数时,跳转到与所述确定模块确定的所述任一第一函数的所述存储模块存储的标识所对应的存储区,对所述任一第一函数的被执行的次数加1;
第一确定模块,用于根据所述存储区中的所述执行模块执行的各函数的执行次数的记录信息,确定所述目标程序中的热点函数。
第四方面,本发明提供了一种服务器,包括:
接收模块,用于接收终端发送的目标程序中的程序数据库文件PDB文件;
解析模块,用于对所述接收模块接收的所述PDB文件进行解析,得到所述目标程序中的全部函数;
确定模块,用于确定所述解析模块解析的所述全部函数中的各第一函数,所述各第一函数为与执行次数具有跳转关系的函数;
工具包生成模块,用于通过hook将函数记录操作注入到所述确定模块确定的所述第一函数里生成测试工具包;
发送模块,用于将所述工具包生成模块生成的所述测试工具包发送给所述终端,以使所述终端根据所述测试工具包对所述目标程序中的全部函数的执行次数进行测试,以确定所述目标程序中的热点函数。
从以上技术方案可以看出,本发明实施例具有以下优点:
本发明实施例中,在解析出目标程序中的全部函数后,使用hook技术将函数记录操作注入到全部函数里,在目标程序运行的过程中,同步记录目标程序中各函数的被执行次数,不影响目标程序的运行。当目标程序结束后,生成各函数的被执行次数的记录信息,根据该记录信息中记录的各函数的被执行的次数,确定出目标程序中的热点函数。从而使得后续可以根据这些热点函数对目标程序进行有目的的优化,可以提升目标程序的性能。
附图说明
图1为本发明实施例中的通信系统的架构示意图;
图2为本发明实施例中的一种热点函数确定的方法的一个实施例示意图;
图3为本发明实施例中的函数信息的示意图;
图4为本发明实施例中的工具图形界面的示意图;
图5为本发明实施例中的测试工具包包括的文件的示意图;
图6为本发明实施例中的代码片段的示意图;
图7为本发明实施例中的统计函数被执行次数的原理示意图;
图8为本发明实施例中的终端展示热点函数的展示界面示意图;
图9为本发明实施例中的一种热点函数确定的方法的另一个实施例示意图;
图10为本发明实施例中的一种终端的一个实施例的结构示意图;
图11为本发明实施例中的一种终端的另一个实施例的结构示意图;
图12为本发明实施例中的一种终端的另一个实施例的结构示意图;
图13为本发明实施例中的一种终端的另一个实施例的结构示意图;
图14为本发明实施例中的一种服务器的一个实施例的结构示意图;
图15为本发明实施例中的一种服务器的另一个实施例的结构示意图;
图16为本发明实施例中的一种服务器的另一个实施例的结构示意图;
图17为本发明实施例中的一种服务器的另一个实施例的结构示意图。
具体实施方式
本发明实施例提供了一种热点函数确定的方法,用于确定目标程序中的热点函数。从而使得后续可以根据这些热点函数对目标程序进行有目的的优化,可以提升目标程序的性能。
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的实施例能够以除了在这里图示或描述的内容以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为了方便理解,首先对本发明实施例中设计的词语进行解释说明:
PDB文件:是使用微软提供的集成开发环境软件(Microsoft Visual studio,VS)生成的用于调试的符号文件(program database),保存着调试信息。
热点函数:一个程序在运行过程中,会执行很多的函数,而执行次数最多的那些函数被称为热点函数。在一个程序中可以将各函数的被执行次数按照从大到小的顺序进行排序,位于第N个位次之前的函数为热点函数,N为大于等于2的正整数。例如N为10,则按照被执行次数进行排序,前9个函数为该程序中的热点函数。因为热点函数被执行的次数多,所以这些函数的执行效率对程序的整体执行性能影响很大。
函数hook技术:一种对目标函数进行hook,用于改变函数执行结果或获取想要信息的技术。使用这种技术可以改变或增加一个函数的原有功能。基本方法是找到需要修改的函数入口点,改变它的地址指向新的自定义函数。其中,Inline hook技术是函数hook技术的一种,Inline hook技术可以理解为:通过函数头部的代码来使改变后的代码跳转到预设的函数里。
DLL:DLL(Dynamic Link Library)文件是动态链接库文件,是软件文件类型。在系统中,许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即DLL文件。当执行某一个程序时,相应的DLL文件就会被调用,每个DLL实现不同的软件功能。测试人员可以编写新的DLL文件并让目标程序加载执行。
上面对本发明实施例中涉及的词语进行了解释,下面对本发明提供的一种热点函数确定的方法的一个实施例进行说明。
该方法可以应用于一种测试系统,该测试系统包括服务器110和终端120,该终端可以为包括手机、电脑、PDA(Personal Digital Assistant,个人数字助理)等,本发明实施例中,该终端可以以电脑为例进行说明。请参阅图1所示,图1为通信系统的架构示意图,终端120用于获取目标程序中的程序数据库文件PDB文件。终端120获取PDB文件,并将所述PDB文件发送给服务器。需要说明的是,本发明实施例中的目标程序可以为一个游戏程序(例如,自由足球游戏、欢乐农场、龙之崛起等等),也可以为社交应用程序(QQ,263等),或者,也可以为软件管理类程序(QQ管家等)。本发明实施例中,该目标程序可以为游戏程序为例进行说明,而在具体的实际应用中,本发明中对于目标程序并不限定。终端120对所述目标程序中的PDB文件进行解析,得到所述目标程序中全部函数及所述全部函数对应的函数信息集合,所述函数信息集合包括各函数的标识,将所述各函数的标识存储至预置的存储区。
服务器110用于生成测试工具包。服务器110接收到终端发送的目标程序中的PDB文件,对PDB文件进行解析,得到所述目标程序中的全部函数;确定所述全部函数中的各第一函数,所述各第一函数为与执行次数具有跳转关系的函数;通过hook将函数记录操作注入到所述第一函数里生成测试工具包,并将该测试工具包发送给终端120。
终端120还用于通过测试工具包对目标程序中的函数的执行次数进行测试。终端120接收到该测试工具包后,加载该测试工具包,当终端120在执行目标程序的同时对目标程序中的各函数的执行次数进行测试:当执行所述目标程序时,每当执行到任一第一函数时,跳转到与所述任一第一函数的标识所对应的存储区,对所述任一第一函数的被执行的次数加1,通过对各第一函数被执行的次数的记录,得到各函数的执行次数的记录信息。
服务器110用于根据记录信息,确定所述目标程序中的热点函数。或者,终端120也可以根据记录信息,确定所述目标程序中的热点函数,在实际的部署中,由服务器110确定热点函数或者由终端120确定热点函数本发明并不限定。
请参阅图2所示,图2为本发明实施例中提供的一种热点函数确定的方法的一个实施例的步骤流程示意图,下面对该方法提供的一个实施例进行详细描述:
步骤201、终端获取目标程序中的程序数据库文件PDB文件。
本发明实施例中,目标程序以自由足球游戏为例进行说明,终端获取目标程序中的程序数据库文件PDB文件。可选的,终端还可以进一步获取目标程序中的DLL文件。
步骤202、终端对目标程序的PDB文件进行解析,得到目标程序中全部函数及全部函数对应的函数信息集合,函数信息集合包括各函数的标识。
终端使用脚本程序对PDB文件进行解析,解析出游戏中全部函数及全部函数对应的函数信息集合,请结合图3进行理解,图3为函数信息的示意图。该函数信息集合包括各函数的标识,偏移地址、函数大小等信息,其中函数的标识包括函数名称和函数的索引编号。
步骤203、终端将各函数的标识存储至预置的存储区。
该预置的存储区可以为预先设置的共享内存,将各函数的标识可以为函数名称,也可以是函数的索引编号,在一种优选的方案中,为了减少存储区的资源占用量,在存储区中存储的各函数的标识可以为各函数的索引编号。
步骤204、终端将获取的目标程序的PDB文件发送至服务器。
终端将获取的该游戏的PDB文件发送至服务器,可选的,终端可以将该目标程序对应的PDB文件和DLL文件发送至服务器。
步骤205、服务器对PDB文件进行解析,得到目标程序中的全部函数。
服务器解析PDB文件,服务器解析出PDB文件中全部函数及全部函数对应的函数信息集合,请结合图3进行理解,该函数信息集合包括各函数的名称、偏移地址、大小与索引编号等信息。
在一种可能的实现方式中,为了方便后续调用这些函数信息,该函数信息集合可以被保存到数据库。
步骤206、服务器确定全部函数中的各第一函数。
首先,全部函数可能包括第一函数和第二函数,其中,第一函数为能被hook的函数,第二函数为不能被hook的函数,而且第一函数为在全部函数中除了第二函数之外的函数。
其次,在一种可能的实现的方式中,该全部函数为均能被hook的函数,也就是说全部函数的数量与第一函数的数量相同。全部函数中不包括第二函数。服务器可以生成第一格式文件,例如,该第一格式文件可以为.flf文件(protobuf格式,一种用户自定义的数据交换格式,独立于语言与平台)。服务器将全部函数写入第一格式文件。
再次,在另一种可能的实现方式中,全部函数中包括第一函数和第二函数,并不是所有的函数都能进行hook操作,对不能hook的第二函数进行hook会导致程序崩溃。所以需要找出程序中那些不能hook的第二函数并跳过对它们的inline hook。进而就需要解析DLL文件来确定不能被hook的第二函数。
解析DLL文件确定不能被hook的第二函数的具体方法可以为:IDA工具可以反汇编二进制程序获取到函数的汇编指令。通过IDA工具对DLL文件进行反汇编生成目标格式文件。例如,该目标格式文件可以为.asm格式文件。然后对.asm文件里的汇编指令进行分析处理,分析出不能被hook的地址,该地址也就是第二函数的地址,并将不能被hook的各第二函数保存到第二格式文件中。例如,该第二格式文件可以为.json文件。服务器确定出第二函数后,在全部函数中除了第二函数就可以确定出第一函数。
需要说明的是,服务器确定第二函数的具体方法可以为:函数头部的预置字节内(例如,5个字节内),不包括跳转指令;或者,函数体头部小于预置字节(例如,5个字节);或者,函数头部不能被跳转指令指向。
可以理解的是,服务器也可以直接出全部函数中的第一函数,但是由于在全部函数中,第二函数的数量较少,通过确定出第二函数进行确定第一函数的方式是一种优选方式,能够提高效率。
将确定出的第一函数写入第一格式文件。例如,该第一格式文件可以为.flf文件中。
步骤207、服务器通过hook将函数记录操作注入到第一函数里生成测试工具包。
该工具包中包括两类DLL文件、该第一格式文件和该第二格式文件:
通过hook将函数记录操作注入到第一函数里的具体实现需要包括两类DLL文件:
第一DLL文件(例如,QpAPI.dll):基于微软Detours库的基础,实现了可以对任意位置汇编代码进行Inline Hook的方法,对外以函数的形式提供Inline Hook功能。
第二DLL文件(例如,QpPlugin.dll):通过注册表方式注入到目标进程中,根据配置第一格式文件(.flf)和第二格式文件(.json)对目标进程中可执行文件和DLL中的函数入口进行inline hook。
inline hook每次在函数执行的头部跳转后,将函数执次数加1,然后再跳转回函数体继续执行函数代码。第一函数为与其被执行次数具有跳转关系的函数。
步骤208、服务器将测试工具包发送至终端。
步骤209、终端接收服务器发送的测试工具包,加载该测试工具包,测试工具包用于对目标程序中的全部函数的执行次数进行测试。
终端接收服务器发送的测试工具包,请结合图4进行理解,图4为终端加载测试工具包后,工具图形界面的示意图。加载该测试工具包后,终端显示该工具图形界面,例如,该工具图形界面标示了要测试的游戏名称、游戏版本、测试任务等内容。
请结合图5进行理解,图5为该测试工具包包括的文件的示意图。其中图界面工具在CC_Log_GUI文件夹里,测试工具包括中包括QpAPI.dll、QpPlugin.dll,.flf和.json文件。需要说明的是,QpAPI.dll、QpPlugin.dll,.flf和.json的文件格式只是举例说明,并不对本发明中第一DLL文件、第二DLL文件,第一格式文件和第二格式文件的限定性说明。
步骤210、终端通过该测试工具包对目标程序中第一函数的执行次数进行统计,得到第一函数的执行次数的记录信息。
工具包需要放置在目标程序(例如,自由足球游戏)的同级目录,否则启动工具时会有警告提示。终端接收了测试人员输入的开始测试的操作指令,终端提示开始运行该自由足球游戏的测试工作,并显示所hook的函数数目。
终端对目标程序的具体的测试的过程请结合图6和图7所示,图6为代码片段的示意图,图7为统计函数被执行次数的原理示意图。
针对图6中所示的代码片段,在一种可能的实现方式中,假设函数f1,f2,f3,f4这四个函数都是第一函数,也就是说这四个函数都是能被执行hook的函数。从图6所示的代码片段中可以看出,函数执行的流程是f1→f3→f4→f4。当执行函数f1时,跳转到与函数f1的索引编号对应的存储区,将f1的被执行次数加1,然后再跳转回到函数f1继续执行流程;当执行函数f3时,跳转到与函数f3的索引编号对应的存储区,将f3的被执行次数加1,然后再跳转回到函数f3继续执行流程;同理,函数f4被执行一次,跳转到与函数f4的索引编号对应的存储区将f4的被执行次数加1,函数f4再被执行一次,将f4的被执行次数再加1。也就是说,在执行f1→f3→f4→f4的过程中,函数f1的被执行次数加1,函数f3的被执行次数加1,函数f4的被执行次数加2,由于函数f2没有被执行,则函数f2的被执行次数不变。
在另一种可能的实现方式中,假设在函数f1,f2,f3,f4中,函数f3是第一函数,也就是说函数f3时不能被hook的函数,函数f1,f2和f4均为第一函数,f1,f2和f4均是能被hook的函数。函数执行的流程还是f1→f3→f4→f4。当执行函数f1时,跳转到与函数f1的索引编号对应的存储区,将f1的被执行次数加1,然后再跳转回到函数f1继续执行流程;当执行函数f3时,不会发生跳转,而是继续执行函数f4,当执行函数f4时,跳转到与函数f4的索引编号对应的存储区,将f4的被执行次数加1,然后再跳转回到函数f4继续执行流程,继续执行函数f4,再跳转到与函数f4的索引编号对应的存储区,将f4的被执行次数再加1。也就是说,在执行f1→f3→f4→f4的过程中,函数f1的被执行次数加1,函数f3的被执行次不被统计,函数f4的被执行次数加2,由于函数f2没有被执行,则函数f2的被执行次数不变。
从上述例子可以看出,当执行目标程序时,每当执行到任一第一函数时,跳转到与任一第一函数的标识所对应的存储区,对任一第一函数的被执行的次数加1。
当执行目标程序时,每当执行到任一第二函数时,则继续执行下一个待执行的函数。
终端根据存储区中记录的各函数的执行次数,得到各函数的被执行次数的记录信息。需要说明的是,若目标程序中全部函数均为第一函数,则记录信息中包括了全部函数的被执行次数的信息。若目标程序的全部函数中包括第一函数和第二函数,在实际应用中,第二函数的数量较少,则记录信息中可以只包括第一函数的标识及该第一函数被执行次数。或者,记录信息中包括全部函数的被执行次数,各第二函数的标识对应的函数被执行次数为“0”,各第一函数的被执行次数的信息。
步骤211、终端将各函数被执行次数的记录信息发送至服务器。
终端将各函数被执行次数的记录信息写入.bin格式的日志文件。该日志文件的格式(.bin格式)为举例说明,并非限定性说明。终端可以将该日记文件发送至服务器。
步骤212、服务器对记录信息进行分析,确定热点函数。
请结合下表1所示,下表1为为热点函数的展示样例表。服务器可以根据一个终端发送的记录信息进行分析,通过记录信息中的函数的索引编号和解析出的PDB文件中的函数信息,确定各函数的函数名称,得到各函数的执行次数,根据各函数的执行次数按照执行次数的大小进行排序,确定出目标程序中的热点函数。
表1
假设上表1中的11个函数为目标程序中全部函数中按各函数被执行次数从大到小的顺序进行排序,上述11个函数为第1位次到第11位次,那么上述表1中的11个函数为目标程序中的热点函数。
需要说明的是,上述表1中的各函数的名称,及各函数被执行的次数均为举例说明,并不造成对本发明的限定。
需要说明的是,一个目标程序可以被多台终端进行测试,或者可以被多次测试,那么服务器可以接收到多个终端发送的针对该目标程序的多个记录信息,服务器根据多个记录信息,对多个记录信息中的各函数的对应的执行次数进行累加,得到各函数的累加后的执行次数。根据各函数的累加后的执行次数确定目标程序中的热点函数。在另一可能的实现方式中,服务器根据多个记录信息,对多个记录信息中的各函数的对应的执行次数进行平均计算,得到各函数的平均计算后的执行次数。根据各函数的平均计算后的执行次数确定目标程序中的热点函数。通过服务器确定热点函数的一个应用场景为:目标程序为自由足球游戏,多个测试人员或者多个用户玩家启动游戏,终端在游戏运行的过程中,边记录各函数的执行次数,针对不同的测试人员或者用户,在一个目标程序中对于同一个函数的执行次数可能有所不同。例如,第一个用户玩家可能是“带球过人”的次数较多,而第二个用户玩家可能是“传球”的次数较多,第三个用户玩家可能是“加速跑”的次数较多。因此服务器可以接收多个测试人员或用户玩家的记录信息,并对该自由足球游戏中的各函数的执行次数进行累加,或者将各函数的执行次数进行平均计算,确定热点函数。可以以服务器接收到3个记录信息,每个记录信息包括4个函数,该4个函数分别为f1,f2,f3和f4:为例进行说明,请参阅下表2所示:
表2
函数名称 | 测试人员1 | 测试人员2 | 测试人员3 | 平均次数 | 累加次数 |
f1 | 7000 | 7300 | 7200 | 7367 | 21500 |
f2 | 6000 | 6320 | 6300 | 6507 | 18620 |
f3 | 5000 | 4800 | 5100 | 5067 | 14900 |
f4 | 4000 | 4500 | 4500 | 4833 | 13000 |
从上表2所示,若热点函数的选取数量为2个,则热点函数为f1和f2。
需要说明的是,上述表1中函数的名称、各函数被执行的次数,及热点函数选取的数量均为举例说明,并不造成对本发明的限定。
可选的,服务器可以将该目标程序的各函数的被执行次数存储至数据库,以备后续调用。
步骤213、服务器将热点函数的信息发送至终端。
步骤213为可选步骤,可以不执行。当测试人员需要查看该目标程序中的热点函数的相关信息时,终端可以向服务器发送用于获取热点函数的信息的请求,服务器将目标程序的热点函数信息发送至终端,终端展示热点函数的信息,请结合图8进行理解,图8为终端展示热点函数的展示界面示意图。测试人员可以点击目标程序对应的一个DLL的热点函数按钮,就可以查看其中的热点函数详情。在另一种可能实现的方式中,服务器开始分析PDB时就已经把函数名称与函数索引序号存入数据库,当测试人员查看热点函数详情的时候,服务器会根据用户请求将数据库中的函数名称数据和函数执行次数信息结合起来以网页的形式展示于终端。
上述实施例中,是通过服务器对目标程序的PDB文件进行分析,并生成针对目标程序的测试工具包,并向终端发送该测试工具包,终端加载该测试工具包后,对目标程序中的各函数的被执行次数进行统计。例如,上述实施例适应的场景为:例如,某公司开发多项游戏,如,10项游戏,针对每一项游戏,生成一个用于统计函数被执行次数的测试工具包,当测试人员需要测试其中某一项游戏时,终端接收用于下载测试工具包的下载指令,终端向服务器发送请求,服务器将该游戏对应的测试工具包发送给终端,终端加载该测试工具包后,在该游戏运行的过程中,记录该游戏中各函数的执行次数。
本发明实施例中,在解析出目标程序中的全部函数后,使用hook技术将函数记录操作注入到全部函数里,在目标程序运行的过程中,同步记录目标程序中各函数的被执行次数,不影响目标程序的运行。当目标程序结束后,生成各函数的被执行次数的记录信息,根据该记录信息中记录的各函数的被执行的次数,确定出目标程序中的热点函数。从而使得后续可以根据这些热点函数对目标程序进行有目的的优化,可以提升目标程序的性能。
请参阅图9所示,本发明实施例提供了一种热点函数确定的方法的另一个实施例,该方法可以应用于终端。
步骤901、终端获取目标程序中的程序数据库文件PDB文件。
本步骤可以结合图2对应的实施例中的步骤201进行理解,此处不赘述。
步骤902、终端对目标程序中的PDB文件进行解析,得到目标程序中全部函数及全部函数对应的函数信息集合,函数信息集合包括各函数的标识。
本步骤可以结合图2对应的实施例中的步骤202进行理解,此处不赘述。
步骤903、终端确定全部函数中的各第一函数,各第一函数为被hook后与执行次数具有跳转关系的函数。
首先,全部函数可能包括第一函数和第二函数,其中,第一函数为能被hook的函数,第二函数为不能被hook的函数,而且第一函数为在全部函数中除了第二函数之外的函数。
其次,在一种可能的实现的方式中,该全部函数均能被hook的函数,也就是说全部函数的数量与第一函数的数量相同。全部函数中不包括第二函数。终端可以生成第一格式文件,例如,该第一格式文件可以为.flf文件(protobuf格式,一种用户自定义的数据交换格式,独立于语言与平台)。终端将全部函数写入第一格式文件。
再次,在另一种可能的实现方式中,全部函数中包括第一函数和第二函数,并不是所有的函数都能进行hook操作,对不能hook的函数进行hook会导致程序崩溃。所以需要找出程序中那些不能hook的函数并跳过对它们的inline hook。进而就需要解析DLL文件来确定不能被hook的第二函数。解析DLL文件确定不能被hook的第二函数的具体方法可以为:IDA工具可以反汇编二进制程序获取到函数的汇编指令。通过IDA工具对DLL文件进行反汇编生成目标格式文件,例如,该目标格式文件可以为.asm格式文件。然后对.asm文件里的汇编指令进行分析处理,分析出不能hook的地址,该地址也就是第二函数的地址,并将不能被hook的各第二函数保存到第二格式文件中,例如,该第二格式文件可以为.json文件。终端确定出第二函数后,在全部函数中除了第二函数就可以确定出第一函数。
需要说明的是,终端确定第二函数的具体方法可以为:函数头部的预置字节内(例如,5个字节内),不包括跳转指令;或者,函数体头部小于预置字节(例如,5个字节);或者,函数头部不能被跳转指令指向。
可以理解的是,终端也可以直接出全部函数中的第一函数,但是由于在全部函数中,第二函数的数量较少,通过确定出第二函数进行确定第一函数的方式是一种优选方式,能够提高效率。
将确定出的第一函数写入第一格式文件。例如,该第一格式文件可以为.flf文件中。
对目标格式文件进行分析处理,分析出第二函数。
第一函数能够被hook,可以理解为:通过hook将函数记录操作注入到第一函数里的具体实现需要包括两类DLL文件:
第一DLL文件(例如,QpAPI.dll):基于微软Detours库的基础,实现了可以对任意位置汇编代码进行Inline Hook的方法,对外以函数的形式提供Inline Hook功能。
第二DLL文件(例如,QpPlugin.dll):通过注册表方式注入到目标进程中,根据配置第一格式文件(.flf)和第二格式文件(.json)对目标进程中可执行文件和DLL中的函数入口进行inline hook。
inline hook每次在函数执行的头部跳转后,将函数执次数加1,然后再跳转回函数体继续执行函数代码。第一函数为与其被执行次数具有跳转关系的函数。
步骤904、终端将各函数的标识存储至预置的存储区。
该预置的存储区可以为预先设置的共享内存。本步骤请结合图2对应的实施例中的步骤203进行理解,此处不赘述。
需要说明的是,步骤903和步骤904没有时序上的限定,步骤1104也可以在步骤903之前。
步骤901至步骤904为测试前准备步骤,步骤905为对目标程序开始测试。
步骤905、当终端执行目标程序时,每当执行到任一第一函数时,跳转到与任一第一函数的标识所对应的存储区,对任一第一函数的被执行的次数加1;
当执行目标程序时,每当执行到任一第二函数时,则继续执行下一个待执行的函数。
本步骤可以结合图2对应的实施例中的步骤209进行理解,此处不赘述。
步骤906、根据存储区中的各函数的执行次数的记录信息,确定目标程序中的热点函数。
请结合表1进行理解。终端可以根据一个终端发送的记录信息进行分析,通过记录信息中的函数的索引编号和解析出的PDB文件中的函数信息,确定各函数的函数名称,得到各函数的执行次数,根据各函数的执行次数按照执行次数的大小进行排序,确定出目标程序中的热点函数。
本发明实施例中,通过终端对目标程序的PDB文件进行解析,得到PDB中的全部函数,并确定出能被hook的第一函数,通过hook技术将记录操作注入到第一函数中,并在终端运行目标程序的同时,记录各函数的被执行的次数,从而确定出热点函数,从而使得后续可以根据这些热点函数对目标程序进行有目的的优化,可以提升目标程序的性能。进一步的,本发明实施中,测试前的准备工作和测试工作均由终端离线完成,不需要通过网络借助服务器,节省了网络资源。
请参阅图10所示,本发明实施例中还提供了一种终端1000的一个实施例,该终端包括:
获取模块1010,用于获取目标程序中的程序数据库文件PDB文件;
解析模块1020,用于对获取模块1010获取的目标程序中的PDB文件进行解析,得到目标程序中全部函数及全部函数对应的函数信息集合,函数信息集合包括各函数的标识,PDB文件还用于确定全部函数中的各第一函数,各第一函数为被hook后与执行次数具有跳转关系的函数;
存储模块1030,用于将解析模块1020解析出的各函数的标识存储至预置的存储区;
执行模块1040,用于当执行目标程序时,每当执行到解析模块1020解析出的任一第一函数时,跳转到与确定模块确定的任一第一函数的存储模块1030存储的标识所对应的存储区,对任一第一函数的被执行的次数加1;
第一确定模块1050,用于根据存储区中的执行模块1040执行的各函数的执行次数的记录信息,确定目标程序中的热点函数。
第一确定模块1050还具体用于:
获取对目标程序多次测试,得出的多个记录信息;
对多个记录信息中的各函数的执行次数进行累加,得到各函数的累加后的执行次数;
根据各函数的累加后的执行次数确定目标程序中的热点函数。
该终端还包括第二确定模块1060;
请参阅图11所示,在图10的基础上,本发明实施例中还提供了一种终端1100的另一个实施例,还包括第二确定模块1060;
第二确定模块1060,用于确定解析模块1020解析的全部函数中的各第一函数,各第一函数为与执行次数具有跳转关系的函数。
第二确定模块1060包括第一确定单元1061和第二确定单元1062;
第一确定单元1061,用于确定全部函数中的各第二函数,各第二函数为不能为hook的函数;
第二确定单元1062,用于根据第一确定单元1061确定的各第二函数确定各第一函数,第一函数为全部函数中除第二函数之外的函数,第一函数为能被hook的函数。
在一种可能的实现方式中,第一确定单元1061还具体用于:
获取目标程序的动态链接库DLL文件;
通过IDA工具对DLL文件进行反汇编生成目标格式文件;
对目标格式文件进行分析处理,分析出第二函数。
执行模块1040,还用于当执行目标程序时,每当执行到任一第二函数时,则继续执行下一个待执行的函数。
请参阅图12所示,在图10的基础上,本发明中还提供了一种终端1200的另一个实施例,该终端还包括发送模块1070和接收模块1080;
发送模块1070,用于将获取模块1010获取的PDB文件发送至服务器,PDB文件用于服务器生成测试工具包,测试工具包为通过hook将函数记录操作注入到全部函数里而生成的执行文件。
接收模块1080,用于接收测试工具包,测试工具包用于对目标程序中的解析模块1020解析出的全部函数的执行次数进行测试。
进一步的,图10至图12中的终端是以功能模块的形式来呈现。这里的“模块”可以指特定应用集成电路(application-specific integrated circuit,ASIC),电路,执行一个或多个软件或固件程序的处理器和存储器,集成逻辑电路,和/或其他可以提供上述功能的器件。在一个简单的实施例中,图10至图12中的终端可以采用图13所示的形式。各模块可以通过图13所示的结构来实现。
终端包括:收发器1310、存储器1320、输入单元1330、显示单元1340、音频电路1360、处理器1380、以及电源1390等部件。本领域技术人员可以理解,图13中示出的终端结构并不构成对终端的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
收发器1310,用于接收信息的接收和发送,用于将所述获取模块获取的所述PDB文件发送至服务器,所述PDB文件用于所述服务器生成测试工具包,所述测试工具包为通过hook将函数记录操作注入到所述全部函数里而生成的执行文件;
还用于接收所述测试工具包,所述测试工具包用于对所述目标程序中的全部函数的执行次数进行测试。
存储器1320可用于存储软件程序以及模块,处理器1380通过运行存储在存储器1320的软件程序以及模块,从而执行终端的各种功能应用以及数据处理。存储器1320可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序,存储器存储目标程序,及PDB解析出的全部函数。还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。
输入单元1330可用于接收输入的数字或字符信息,以及产生与终端的用户设置以及功能控制有关的键信号输入。具体地,输入单元1330可包括触控面板1331以及其他输入设备1332。其他输入设备1332可以包括但不限于物理键盘、鼠标、操作杆等中的一种或多种。
显示单元1340可用于显示由用户输入的信息或提供给用户的信息以及终端的各种菜单。显示单元1340可包括显示面板1341,可选的,可以采用液晶显示器(LiquidCrystal Display,LCD)、有机发光二极管(Organic Light-Emitting Diode,OLED)等形式来配置显示面板1341。进一步的,触控面板1331可覆盖显示面板1341,当触控面板1331检测到在其上或附近的触摸操作后,传送给处理器1380以确定触摸事件的类型,随后处理器1380根据触摸事件的类型在显示面板1341上提供相应的视觉输出。虽然在图13中,触控面板1331与显示面板1341是作为两个独立的部件来实现终端的输入和输入功能,但是在某些实施例中,可以将触控面板1331与显示面板1341集成而实现终端的输入和输出功能。还用于显示应用界面,目标程序的运行界面,及显示热点函数。
音频电路1360、扬声器1361,传声器1362可提供用户与终端之间的音频接口。音频电路1360可将接收到的音频数据转换后的电信号,传输到扬声器1361,由扬声器1361转换为声音信号输出。
处理器1380是终端的控制中心,利用各种接口和线路连接整个终端的各个部分,通过运行或执行存储在存储器1320内的软件程序和/或模块,以及调用存储在存储器1320内的数据,执行终端的各种功能和处理数据,从而对终端进行整体监控。可选的,处理器1380可包括一个或多个处理单元;优选的,处理器1380可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器1380中。
处理器,用于执行存储器中的指令时,使终端执行图2对应的实施例中的终端所执行的步骤,执行图9对应的实施例中的终端所执行的步骤。
请参阅图14所示,图14为本发明中提供的一种服务器1400的一个实施例示意图。该服务器1400包括:
接收模块,用于接收终端发送的目标程序中的程序数据库文件PDB文件;
解析模块,用于对接收模块接收的PDB文件进行解析,得到目标程序中的全部函数;
确定模块,用于确定解析模块解析的全部函数中的各第一函数,各第一函数为与执行次数具有跳转关系的函数;
工具包生成模块,用于通过hook将函数记录操作注入到确定模块确定的第一函数里生成测试工具包;
发送模块,用于将工具包生成模块生成的测试工具包发送给终端,以使终端根据测试工具包对目标程序中的全部函数的执行次数进行测试,以确定目标程序中的热点函数。
请参阅图15所示,在图14对应的实施例的基础上,本发明实施例提供了一种服务器1500的另一个实施例。
该确定模块还包括第一确定单元和第二确定单元;
第一确定单元,用于确定全部函数中的各第二函数,各第二函数为不能被hook的函数;
第二确定单元,用于根据第一确定单元确定的各第二函数确定各第一函数,各第一函数为全部函数中除第二函数之外的函数,第一函数为能被hook的函数。
可选的,第二确定单元还具体用于:
获取目标程序的动态链接库DLL文件;
通过IDA工具对DLL文件进行反汇编生成目标格式文件;
对目标格式文件进行分析处理,分析出第二函数。
请参阅图16所示,在图14对应的实施例的基础上,本发明实施例提供了一种服务器1600的另一个实施例。
该服务器还包括热点函数分析模块;
接收模块,还用于接收终端发送的多个记录信息;
热点函数分析模块,用于对多个记录信息中的各函数的执行次数进行累加,得到各函数的累加后的执行次数,并根据各函数的累加后的执行次数确定目标程序中的热点函数。
进一步的,图13至图16中的服务器是以功能模块的形式来呈现。这里的“模块”可以指特定应用集成电路(application-specific integrated circuit,ASIC),电路,执行一个或多个软件或固件程序的处理器和存储器,集成逻辑电路,和/或其他可以提供上述功能的器件。在一个简单的实施例中,图13至图16中的终端可以采用图17所示的形式。各模块可以通过图17所示的结构来实现。
图17是本发明实施例提供的一种服务器1700结构示意图,该服务器1700可因配置或性能不同而产生比较大的差异,可以包括一个或一个处理器1722和存储器1732,一个或一个以上存储应用程序1742或数据1744的存储介质1730(例如一个或一个以上海量存储设备)。其中,存储器1732和存储介质1730可以是短暂存储或持久存储。存储在存储介质1730的程序可以包括一个或一个以上模块(图示没标出),每个模块可以包括对服务器中的一系列指令操作。更进一步地,处理器1722可以设置为与存储介质1730通信,在服务器1700上执行存储介质1730中的一系列指令操作。
服务器1700还可以包括一个或一个以上电源1726,一个或一个以上有线或无线网络接口1750,一个或一个以上输入输出接口1758,和/或,一个或一个以上操作系统1741,例如Windows ServerTM,Mac OS XTM,UnixTM,LinuxTM,FreeBSDTM等等。
上述实施例中由服务器所执行的步骤可以基于该图17所示的服务器结构。
处理器1722,用于在执行存储器中的指令时,使服务器执行图2对应的实施例中服务器所实际执行的步骤。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (22)
1.一种热点函数确定的方法,其特征在于,包括:
终端获取目标程序中的程序数据库文件PDB文件;
所述终端对所述目标程序中的PDB文件进行解析,得到所述目标程序中全部函数及所述全部函数对应的函数信息集合,所述函数信息集合包括各函数的标识;
所述终端将所述各函数的标识存储至预置的存储区;
当所述终端执行所述目标程序时,每当执行到任一第一函数时,跳转到与所述任一第一函数的标识所对应的存储区,对所述任一第一函数的被执行的次数加1;
所述终端根据所述存储区中的各函数的执行次数的记录信息,确定所述目标程序中的热点函数。
2.根据权利要求1所述的方法,其特征在于,所述PDB文件还用于确定所述全部函数中的各第一函数,所述各第一函数为被hook后与执行次数具有跳转关系的函数;所述当所述终端执行所述目标程序之前,所述方法还包括:
所述终端确定所述全部函数中的各第一函数。
3.根据权利要求2所述的方法,其特征在于,所述终端确定所述全部函数中的各第一函数,包括:
终端确定所述全部函数中的各第二函数,所述各第二函数为不能被hook的函数;
终端根据所述各第二函数确定所述各第一函数,所述各第一函数为所述全部函数中除所述各第二函数之外的函数,所述各第一函数为能被hook的函数。
4.根据权利要求3所述的方法,其特征在于,所述终端确定所述全部函数中的各第二函数,包括:
所述终端获取所述目标程序的动态链接库DLL文件;
所述终端通过IDA工具对所述DLL文件进行反汇编生成目标格式文件;
所述终端对所述目标格式文件进行分析处理,分析出第二函数。
5.根据权利要求3或4所述的方法,其特征在于,所述方法还包括:
当所述终端执行所述目标程序时,每当执行到任一第二函数时,则继续执行下一个待执行的函数。
6.根据权利要求3或4所述的方法,其特征在于,所述终端获取目标程序中的程序数据库文件PDB文件之后,在所述终端执行所述目标程序之前,所述方法还包括:
所述终端将所述PDB文件发送至服务器,所述PDB文件用于所述服务器生成测试工具包,所述测试工具包为通过hook将函数记录操作注入到所述全部函数里而生成的执行文件;
所述终端接收所述测试工具包,所述测试工具包用于对所述目标程序中的全部函数的执行次数进行测试。
7.根据权利要求1至6任一项所述的方法,其特征在于,所述终端根据所述存储区中的各函数的执行次数的记录信息,确定所述目标程序中的热点函数,包括:
所述终端获取对所述目标程序多次测试得出的多个记录信息;
所述终端对所述多个记录信息中的各函数对应的的执行次数进行累加或者平均计算,得到各函数的累加或者平均计算后的执行次数;
所述终端根据所述各函数的累加或者平均计算后的执行次数确定所述目标程序中的热点函数。
8.一种热点函数确定的方法,其特征在于,包括:
服务器接收终端发送的目标程序中的程序数据库文件PDB文件;
所述服务器对所述PDB文件进行解析,得到所述目标程序中的全部函数;
所述服务器确定所述全部函数中的各第一函数,所述各第一函数为与执行次数具有跳转关系的函数;
所述服务器通过hook将函数记录操作注入到所述第一函数里生成测试工具包;
所述服务器将所述测试工具包发送给所述终端,以使所述终端根据所述测试工具包对所述目标程序中的全部函数的执行次数进行测试,以确定所述目标程序中的热点函数。
9.根据权利要求8所述的方法,其特征在于,所述服务器确定所述全部函数中的各第一函数,包括:
所述服务器确定所述全部函数中的各第二函数,所述各第二函数为不能被hook的函数;
所述服务器根据所述各第二函数确定所述各第一函数,所述第一函数为所述全部函数中除所述第二函数之外的函数,所述第一函数为能被hook的函数。
10.根据权利要求9所述的方法,其特征在于,所述服务器确定所述全部函数中的各第二函数,包括:
所述服务器获取所述目标程序的动态链接库DLL文件;
所述服务器通过IDA工具对所述DLL文件进行反汇编生成目标格式文件;
所述服务器对所述目标格式文件进行分析处理,分析出第二函数。
11.根据权利要求8至10任一项所述的方法,所述方法还包括:
所述服务器接收终端发送的多个记录信息;
所述服务器对所述多个记录信息中的各函数的执行次数进行累加,得到各函数的累加后的执行次数;
所述服务器根据所述各函数的累加后的执行次数确定所述目标程序中的热点函数。
12.一种终端,其特征在于,包括:
获取模块,用于获取目标程序中的程序数据库文件PDB文件;
解析模块,用于对所述获取模块获取的所述目标程序中的PDB文件进行解析,得到所述目标程序中全部函数及所述全部函数对应的函数信息集合,所述函数信息集合包括各函数的标识;
存储模块,用于将所述各函数的标识存储至预置的存储区;
执行模块,用于当执行所述目标程序时,每当执行到任一第一函数时,跳转到与所述确定模块确定的所述任一第一函数的所述存储模块存储的标识所对应的存储区,对所述任一第一函数的被执行的次数加1;
第一确定模块,用于根据所述存储区中的所述执行模块执行的各函数的执行次数的记录信息,确定所述目标程序中的热点函数。
13.根据权利要求12所述的终端,其特征在于,所述PDB文件还用于确定所述全部函数中的各第一函数,所述各第一函数为被hook后与执行次数具有跳转关系的函数,所述终端还包括:第二确定模块;
所述第二确定模块,用于确定所述解析模块解析的所述全部函数中的各第一函数,所述各第一函数为与执行次数具有跳转关系的函数。
14.根据权利要求13所述的终端,其特征在于,所述第二确定模块包括第一确定单元和第二确定单元;
所述第一确定单元,用于确定所述全部函数中的各第二函数,所述各第二函数为不能为hook的函数;
所述第二确定单元,用于根据所述第一确定单元确定的所述各第二函数确定所述各第一函数,所述第一函数为所述全部函数中除所述第二函数之外的函数,所述第一函数为能被hook的函数。
15.根据权利要求14所述的终端,其特征在于,
所述第一确定单元还具体用于:
获取所述目标程序的动态链接库DLL文件;
通过IDA工具对所述DLL文件进行反汇编生成目标格式文件;
对所述目标格式文件进行分析处理,分析出第二函数。
16.根据权利要求14或15所述的终端,其特征在于,
所述执行模块,还用于当执行所述目标程序时,每当执行到任一第二函数时,则继续执行下一个待执行的函数。
17.根据权利要求14或15所述的终端,其特征在于,还包括发送模块和接收模块;
所述发送模块,用于将所述获取模块获取的所述PDB文件发送至服务器,所述PDB文件用于所述服务器生成测试工具包,所述测试工具包为通过hook将函数记录操作注入到所述全部函数里而生成的执行文件;
所述接收模块,用于接收所述测试工具包,所述测试工具包用于对所述目标程序中的全部函数的执行次数进行测试。
18.根据权利要求12所述的终端,其特征在于,
所述第一确定模块还具体用于:
获取对所述目标程序多次测试,得出的多个记录信息;
对所述多个记录信息中的各函数的执行次数进行累加,得到各函数的累加后的执行次数;
根据所述各函数的累加后的执行次数确定所述目标程序中的热点函数。
19.一种服务器,其特征在于,包括:
接收模块,用于接收终端发送的目标程序中的程序数据库文件PDB文件;
解析模块,用于对所述接收模块接收的所述PDB文件进行解析,得到所述目标程序中的全部函数;
确定模块,用于确定所述解析模块解析的所述全部函数中的各第一函数,所述各第一函数为与执行次数具有跳转关系的函数;
工具包生成模块,用于通过hook将函数记录操作注入到所述确定模块确定的所述第一函数里生成测试工具包;
发送模块,用于将所述工具包生成模块生成的所述测试工具包发送给所述终端,以使所述终端根据所述测试工具包对所述目标程序中的全部函数的执行次数进行测试,以确定所述目标程序中的热点函数。
20.根据权利要求19所述的服务器,其特征在于,所述确定模块还包括第一确定单元和第二确定单元;
所述第一确定单元,用于确定所述全部函数中的各第二函数,所述各第二函数为不能被hook的函数;
所述第二确定单元,用于根据所述第一确定单元确定的所述各第二函数确定所述各第一函数,所述各第一函数为所述全部函数中除所述第二函数之外的函数,所述第一函数为能被hook的函数。
21.根据权利要求20所述的服务器,其特征在于,所述第二确定单元还具体用于:
获取所述目标程序的动态链接库DLL文件;
通过IDA工具对所述DLL文件进行反汇编生成目标格式文件;
对所述目标格式文件进行分析处理,分析出第二函数。
22.根据权利要求19所述的服务器,其特征在于,还包括:热点函数分析模块;
所述接收模块,还用于接收终端发送的多个记录信息;
所述热点函数分析模块,用于对所述多个记录信息中的各函数的执行次数进行累加,得到各函数的累加后的执行次数,并根据所述各函数的累加后的执行次数确定所述目标程序中的热点函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610969657.8A CN106502876B (zh) | 2016-10-26 | 2016-10-26 | 一种热点函数确定的方法及相关设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610969657.8A CN106502876B (zh) | 2016-10-26 | 2016-10-26 | 一种热点函数确定的方法及相关设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106502876A true CN106502876A (zh) | 2017-03-15 |
CN106502876B CN106502876B (zh) | 2020-01-10 |
Family
ID=58321938
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610969657.8A Active CN106502876B (zh) | 2016-10-26 | 2016-10-26 | 一种热点函数确定的方法及相关设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106502876B (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109145590A (zh) * | 2018-07-27 | 2019-01-04 | 平安科技(深圳)有限公司 | 一种函数hook检测方法、检测设备及计算机可读介质 |
CN109408323A (zh) * | 2018-09-18 | 2019-03-01 | 珠海金山网络游戏科技有限公司 | 一种服务器lua性能热点分析方法 |
CN109710396A (zh) * | 2017-10-26 | 2019-05-03 | 华为技术有限公司 | 一种信息采集及内存释放的方法及装置 |
CN110175110A (zh) * | 2019-05-31 | 2019-08-27 | 深圳前海微众银行股份有限公司 | 压力测试方法、装置、系统、设备及计算机可读存储介质 |
CN110197064A (zh) * | 2019-02-18 | 2019-09-03 | 腾讯科技(深圳)有限公司 | 进程处理方法和装置、存储介质及电子装置 |
CN110580253A (zh) * | 2019-09-10 | 2019-12-17 | 网易(杭州)网络有限公司 | 时序数据组的加载方法、装置、存储介质及电子设备 |
CN110727716A (zh) * | 2019-10-24 | 2020-01-24 | 北京智游网安科技有限公司 | 一种应用中集成sdk的识别方法、智能终端及存储介质 |
WO2020191549A1 (zh) * | 2019-03-22 | 2020-10-01 | 华为技术有限公司 | 一种soc芯片、确定热点函数的方法及终端设备 |
CN112099838A (zh) * | 2019-06-17 | 2020-12-18 | 腾讯科技(深圳)有限公司 | 确定版本差异的方法、装置及存储介质 |
WO2021135988A1 (zh) * | 2019-12-31 | 2021-07-08 | Oppo广东移动通信有限公司 | 热点代码处理方法、请求方法、装置及电子设备 |
CN113190235A (zh) * | 2021-05-27 | 2021-07-30 | 武汉斗鱼鱼乐网络科技有限公司 | 一种代码的分析方法、装置、电子终端及存储介质 |
CN114153494A (zh) * | 2021-12-02 | 2022-03-08 | 中国核动力研究设计院 | 一种基于热力图的热点代码优化方法及装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100930962B1 (ko) * | 2006-11-23 | 2009-12-10 | 한국전자통신연구원 | 알피씨 기반 소프트웨어의 원격지 보안 테스팅 장치 및방법 |
CN102279788A (zh) * | 2010-06-09 | 2011-12-14 | 英业达股份有限公司 | 解析目标程序以生成测试程序的测试系统及其测试方法 |
CN103092759A (zh) * | 2013-01-28 | 2013-05-08 | 电子科技大学 | 一种嵌入式环境下的代码动态性能剖析器 |
CN104375935A (zh) * | 2014-11-13 | 2015-02-25 | 华为技术有限公司 | Sql注入攻击的测试方法和装置 |
US20160092175A1 (en) * | 2014-09-29 | 2016-03-31 | National Instruments Corporation | Remote Interface to Logical Instruments |
CN105550104A (zh) * | 2015-12-08 | 2016-05-04 | 北京奇虎科技有限公司 | 应用程序性能测试方法及装置 |
CN105930692A (zh) * | 2016-04-20 | 2016-09-07 | 北京鼎源科技有限公司 | 一种Android应用程序的动态脱壳方法 |
-
2016
- 2016-10-26 CN CN201610969657.8A patent/CN106502876B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR100930962B1 (ko) * | 2006-11-23 | 2009-12-10 | 한국전자통신연구원 | 알피씨 기반 소프트웨어의 원격지 보안 테스팅 장치 및방법 |
CN102279788A (zh) * | 2010-06-09 | 2011-12-14 | 英业达股份有限公司 | 解析目标程序以生成测试程序的测试系统及其测试方法 |
CN103092759A (zh) * | 2013-01-28 | 2013-05-08 | 电子科技大学 | 一种嵌入式环境下的代码动态性能剖析器 |
US20160092175A1 (en) * | 2014-09-29 | 2016-03-31 | National Instruments Corporation | Remote Interface to Logical Instruments |
CN104375935A (zh) * | 2014-11-13 | 2015-02-25 | 华为技术有限公司 | Sql注入攻击的测试方法和装置 |
CN105550104A (zh) * | 2015-12-08 | 2016-05-04 | 北京奇虎科技有限公司 | 应用程序性能测试方法及装置 |
CN105930692A (zh) * | 2016-04-20 | 2016-09-07 | 北京鼎源科技有限公司 | 一种Android应用程序的动态脱壳方法 |
Cited By (24)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109710396A (zh) * | 2017-10-26 | 2019-05-03 | 华为技术有限公司 | 一种信息采集及内存释放的方法及装置 |
CN109710396B (zh) * | 2017-10-26 | 2023-08-22 | 华为技术有限公司 | 一种信息采集及内存释放的方法及装置 |
CN109145590B (zh) * | 2018-07-27 | 2023-04-07 | 平安科技(深圳)有限公司 | 一种函数hook检测方法、检测设备及计算机可读介质 |
CN109145590A (zh) * | 2018-07-27 | 2019-01-04 | 平安科技(深圳)有限公司 | 一种函数hook检测方法、检测设备及计算机可读介质 |
CN109408323B (zh) * | 2018-09-18 | 2022-05-10 | 珠海金山网络游戏科技有限公司 | 一种服务器lua性能热点分析方法 |
CN109408323A (zh) * | 2018-09-18 | 2019-03-01 | 珠海金山网络游戏科技有限公司 | 一种服务器lua性能热点分析方法 |
CN110197064A (zh) * | 2019-02-18 | 2019-09-03 | 腾讯科技(深圳)有限公司 | 进程处理方法和装置、存储介质及电子装置 |
CN110197064B (zh) * | 2019-02-18 | 2023-08-25 | 腾讯科技(深圳)有限公司 | 进程处理方法和装置、存储介质及电子装置 |
CN111989655B (zh) * | 2019-03-22 | 2022-03-29 | 华为技术有限公司 | 一种soc芯片、确定热点函数的方法及终端设备 |
WO2020191549A1 (zh) * | 2019-03-22 | 2020-10-01 | 华为技术有限公司 | 一种soc芯片、确定热点函数的方法及终端设备 |
CN111989655A (zh) * | 2019-03-22 | 2020-11-24 | 华为技术有限公司 | 一种soc芯片、确定热点函数的方法及终端设备 |
CN110175110A (zh) * | 2019-05-31 | 2019-08-27 | 深圳前海微众银行股份有限公司 | 压力测试方法、装置、系统、设备及计算机可读存储介质 |
CN110175110B (zh) * | 2019-05-31 | 2022-04-01 | 深圳前海微众银行股份有限公司 | 压力测试方法、装置、系统、设备及计算机可读存储介质 |
CN112099838A (zh) * | 2019-06-17 | 2020-12-18 | 腾讯科技(深圳)有限公司 | 确定版本差异的方法、装置及存储介质 |
CN112099838B (zh) * | 2019-06-17 | 2023-08-15 | 腾讯科技(深圳)有限公司 | 确定版本差异的方法、装置及存储介质 |
CN110580253A (zh) * | 2019-09-10 | 2019-12-17 | 网易(杭州)网络有限公司 | 时序数据组的加载方法、装置、存储介质及电子设备 |
CN110727716B (zh) * | 2019-10-24 | 2022-04-22 | 北京智游网安科技有限公司 | 一种应用中集成sdk的识别方法、智能终端及存储介质 |
CN110727716A (zh) * | 2019-10-24 | 2020-01-24 | 北京智游网安科技有限公司 | 一种应用中集成sdk的识别方法、智能终端及存储介质 |
CN113126995A (zh) * | 2019-12-31 | 2021-07-16 | Oppo广东移动通信有限公司 | 热点代码处理方法、请求方法、装置及电子设备 |
WO2021135988A1 (zh) * | 2019-12-31 | 2021-07-08 | Oppo广东移动通信有限公司 | 热点代码处理方法、请求方法、装置及电子设备 |
CN113190235A (zh) * | 2021-05-27 | 2021-07-30 | 武汉斗鱼鱼乐网络科技有限公司 | 一种代码的分析方法、装置、电子终端及存储介质 |
CN113190235B (zh) * | 2021-05-27 | 2022-05-10 | 武汉斗鱼鱼乐网络科技有限公司 | 一种代码的分析方法、装置、电子终端及存储介质 |
CN114153494A (zh) * | 2021-12-02 | 2022-03-08 | 中国核动力研究设计院 | 一种基于热力图的热点代码优化方法及装置 |
CN114153494B (zh) * | 2021-12-02 | 2024-02-13 | 中国核动力研究设计院 | 一种基于热力图的热点代码优化方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN106502876B (zh) | 2020-01-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106502876A (zh) | 一种热点函数确定的方法及相关设备 | |
US20160217491A1 (en) | Devices and methods for preventing user churn | |
CN108038398B (zh) | 一种二维码解析能力测试方法、装置及电子设备 | |
EP3095113A1 (en) | Digital personal assistant interaction with impersonations and rich multimedia in responses | |
CN107391750A (zh) | 用于处理信息的方法和装置 | |
CN110489344A (zh) | 引擎测试方法及相关产品 | |
CN104133765B (zh) | 网络活动的测试用例发送方法及测试用例服务器 | |
CN103455411B (zh) | 日志分类模型的建立、行为日志分类方法及装置 | |
CN112463634B (zh) | 微服务架构下的软件测试方法及装置 | |
US9639455B2 (en) | Autonomous media version testing | |
CN109981721A (zh) | 信息推送方法、装置及计算机可读存储介质 | |
CN107046582A (zh) | 电子资源信息的消息提示方法、介质、装置和计算设备 | |
CN108140055A (zh) | 触发应用信息 | |
CN111782266B (zh) | 软件性能基准确定方法及装置 | |
CN107145446A (zh) | 一种应用程序app的测试方法、装置和介质 | |
US20180065054A1 (en) | Dialog simulation | |
CN109701278A (zh) | 一种游戏教学方法、装置、设备及存储介质 | |
CN111352832B (zh) | 自动测试页面的方法、装置 | |
CN105389241A (zh) | 移动终端防骚扰工具的性能测试方法及系统 | |
US6907550B2 (en) | Stochastic simulation of computer activity based on user categories | |
CN109712622B (zh) | 用于语音对话平台的语音交互异常处理的配置方法及系统 | |
CN109684196B (zh) | 一种测试方法及装置 | |
CN110990577A (zh) | 一种文本分类方法和装置 | |
CN107291543B (zh) | 应用程序处理方法、装置、存储介质和终端 | |
CN107491509B (zh) | 一种用户属性信息挖掘方法、装置和介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |