一种文件处理方法及装置制造方法

文档序号:6505644阅读:177来源:国知局
一种文件处理方法及装置制造方法
【专利摘要】本发明公开了一种文件处理方法及装置,其中的方法可包括:扫描源文件,确定符合预设的文件过滤条件的目标文件块;生成用于表示所述目标文件块的第一抽象语法树,并根据所述第一抽象语法树确定对所述目标文件块的插桩位置;在所述确定的插桩位置对所述目标文件块进行插桩处理,生成用于表示插桩后的所述目标文件块的第二抽象语法树;调用文件回写接口将所述第二抽象语法树回写至所述源文件中。本发明可提升文件处理效率,提升文件操作的灵活性。
【专利说明】一种文件处理方法及装置

【技术领域】
[0001] 本发明涉及一种计算机领域,具体涉及文件处理【技术领域】,尤其涉及一种文件处 理方法及装置。

【背景技术】
[0002] 在软件程序开发过程中,经常会有性能优化、内存泄漏检测等需求,这时需要对程 序源文件中的函数或代码段进行精确的分析,监控程序的源文件中函数或代码段的运行耗 时、内存消耗、CPU (Central Processing Unit,中央处理器)占用等指标,用于指导性能优 化的方向或定位程序的漏洞bug。目前,对程序源文件的测试分析主要是通过对源文件进行 插桩处理实现,插桩是指在保证程序原有逻辑完整性的基础上插入一些探针(桩代码),在 被执行时输出程序运行的特征数据,通过这些特征数据来获得程序运行的相关信息,实现 测试分析的目的。现有的文件插桩处理发生在程序编译阶段,即基于编译环境在程序源文 件的相应位置插入桩代码,获得编译后的可执行程序;上述插桩处理过程需要对整个源文 件进行分析,对于大型的程序来说,将会造成相当大的工作量,效率较低;另外,插入桩代码 后的源文件直接被编译获得可执行程序,从而无法实现对插桩后的源文件进行操作,降低 了文件操作的灵活性。


【发明内容】

[0003] 本发明提供一种文件处理方法及装置,可提升文件处理效率,提升文件操作的灵 活性。
[0004] 本发明第一方面提供了一种文件处理方法,可包括:
[0005] 扫描源文件,确定符合预设的文件过滤条件的目标文件块;
[0006] 生成用于表示所述目标文件块的第一抽象语法树,并根据所述第一抽象语法树确 定对所述目标文件块的插桩位置;
[0007] 在所述确定的插桩位置对所述目标文件块进行插桩处理,生成用于表示插桩后的 所述目标文件块的第二抽象语法树;
[0008] 调用文件回写接口将所述第二抽象语法树回写至所述源文件中。
[0009] 本发明第二方面提供了一种文件处理装置,可包括:
[0010] 过滤模块,用于扫描源文件,确定符合预设的文件过滤条件的目标文件块;
[0011] 确定模块,用于生成用于表示所述目标文件块的第一抽象语法树,并根据所述第 一抽象语法树确定对所述目标文件块的插桩位置;
[0012] 插桩处理模块,用于在所述确定的插桩位置对所述目标文件块进行插桩处理,生 成用于表示插桩后的所述目标文件块的第二抽象语法树;
[0013] 回写模块,用于调用文件回写接口将所述第二抽象语法树所表示的文件块回写至 所述源文件中。
[0014] 实施本发明实施例,具有如下有益效果:
[0015] 本发明实施例扫描源文件确定符合预设的文件过滤条件的目标文件块进行文件 处理,可以去掉源文件中不需要插桩处理的文件块,减少了文件处理所耗费的资源,提升了 文件处理效率;另外,本发明实施例基于目标文件块的抽象语法树进行插桩处理,并将插桩 后的抽象语法树回写至源文件中,从而使得完成插桩处理后的源文件依然以代码文件形式 存在,方便用户对插桩处理后的源文件的操作,提升了文件操作灵活性。

【专利附图】

【附图说明】
[0016] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本 发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以 根据这些附图获得其他的附图。
[0017] 图1为本发明实施例提供的一种文件处理方法的流程图;
[0018] 图2为本发明实施例提供的另一种文件处理方法的流程图;
[0019] 图3为本发明实施例提供的又一种文件处理方法的流程图;
[0020] 图4为本发明实施例提供的一种文件处理装置的结构示意图;
[0021] 图5是本发明实施例提供的另一种文件处理装置的结构示意图;
[0022] 图6为本发明实施例提供的确定模块的结构示意图;
[0023]图7为本发明实施例提供的插桩处理模块的结构示意图。

【具体实施方式】
[0024] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0025] 下面将结合附图1-附图3,对本发明实施例提供的文件处理方法进行详细介绍。
[0026] 请参见图1,为本发明实施例提供的一种文件处理方法的流程图;该方法可包括 以下步骤S101-步骤S104。
[0027] S101,扫描源文件,确定符合预设的文件过滤条件的目标文件块。
[0028] 其中,源文件可以指程序的源代码文件。文件过滤条件可以由用户预先设置,该文 件过滤条件可以为:在循环分支文件、条件分支文件、输入/输出分支文件的任一种或多种 类型的分支文件中插入桩代码。本步骤中,依据预设的文件过滤条件,可对源文件中包含的 各文件块进行过滤,得到满足文件过滤条件的至少一个目标文件块,例如:得到循环分支文 件、条件分支文件、输入/输出分支文件等分支文件。
[0029] 需要说明的是,通过筛选符合预设的文件过滤条件的目标文件块进行后续处理, 而对于不符合预设的文件过滤条件文件块则无需进行处理,从而可避免对整个源文件进行 处理所带来的资源耗费,且能有效地提升文件处理效率。
[0030] S102,生成用于表示所述目标文件块的第一抽象语法树,并根据所述第一抽象语 法树确定对所述目标文件块的插桩位置。
[0031] 其中,抽象语法树(Abstract Syntax Tree,AST)是编程语言的源代码的抽象语法 结构的树状表现形式,AST上的每个节点表示该源代码中的一种结构。本步骤中,第一 AST 为目标文件块的抽象结构的树状表现形式,通过扫描第一 AST,则可确定对所述目标文件块 的插桩位置。
[0032] S103,在所述确定的插桩位置对所述目标文件块进行插桩处理,生成用于表示插 桩后的所述目标文件块的第二抽象语法树。
[0033] 插桩处理的目的是在所述目标文件块的插桩位置植入桩代码,以实现对目标文件 块的监控分析,其中,该桩代码可以由用户预先配置。本步骤中,在第一 AST中所确定的插 桩位置进行插桩处理后,则形成包含已插入的预先配置的桩代码的新的AST,该新的AST则 为所述第二 AST,用于表示插桩后的所述目标文件块的抽象结构。
[0034] S104,调用文件回写接口将所述第二抽象语法树回写至所述源文件中。
[0035] 其中,完成回写的所述源文件即为完成插桩处理的源文件。通过本步骤的回写操 作,使得完成插桩处理后的源文件依然以代码文件形式存在,用户如果存在修改需要,则可 对完成插桩处理后的所述源文件进行修改,从而提升了操作灵活性。
[0036] 请参见图2,为本发明实施例提供的另一种文件处理方法的流程图;该方法可包 括以下步骤S201-步骤S210。
[0037] S201,接收用户设置的文件过滤条件,并接收用户预先配置的桩代码。
[0038] 其中,所述文件过滤条件可以为:在循环分支文件、条件分支文件、输入/输出分 支文件的任一种或多种类型的分支文件中插入桩代码。本步骤中,可以通过向用户提供人 机交互界面,接收用户设置的过滤条件以及预先配置的桩代码。
[0039] S202,扫描源文件,确定符合预设的文件过滤条件的目标文件块。
[0040] 本步骤可参见图1所示实施例的步骤S101,在此不赘述。
[0041] S203,对所述目标文件块进行语法解析,生成所述目标文件块的第一抽象语法树。
[0042] 其中,抽象语法树的结构不依赖于源语言的文法,即对所述目标文件块进行语法 解析的过程与所述目标文件块所采用的上下文文法无关。本步骤中,对所述目标文件块进 行语法解析,则可生成所述目标文件块的第一 AST,该解析的过程可参见现有技术,在此不 赘述。
[0043] S204,扫描所述第一抽象语法树,确定所述目标文件块的函数入口位置和函数出 口位置。
[0044] 本步骤中,通过扫描第一 AST,即遍历第一 AST上的各节点,以在第一 AST上判断目 标文件块的函数入口和函数出口,从而确定所述目标文件块在第一 AST上对应的函数入口 位置和函数出口位置。
[0045] S205,将所述第一抽象语法树中所确定的所述目标文件块的函数入口位置和/或 函数出口位置记录为对所述目标文件块的插桩位置。
[0046] 本实施例的步骤S203-步骤S205可以为图1所示实施例的步骤S102的具体细化 步骤。
[0047] S206,获取预先配置的桩代码。
[0048] S207,将所述预先配置的桩代码插入至所述第一抽象语法树中所确定的所述目标 文件块的函数入口位置和/或函数出口位置。
[0049] 本步骤在第一 AST中所确定的所述目标文件块的函数入口位置和/或函数出口位 置插入预先配置的桩代码的过程,即为对所述目标文件块进行插桩的过程。
[0050] S208,将插入所述预先配置的桩代码后的第一抽象语法树确定为所述第二抽象语 法树。
[0051] 在第一 AST中所确定的插桩位置进行插桩处理后,则形成包含已插入的预先配置 的桩代码的新的AST,该新的AST则为所述第二 AST,用于表示插桩后的所述目标文件块的 抽象结构。
[0052] 本实施例的步骤S206-步骤S208可以为图1所示实施例的步骤S103的具体细化 步骤。
[0053] S209,调用文件回写接口将所述第二抽象语法树回写至所述源文件中。
[0054] 本步骤可参见图1所示实施例的步骤S104,在此不赘述。
[0055] S210,调用编译接口将完成回写的所述源文件生成可执行文件。
[0056] 本步骤中,调用编译接口将完成回写的所述源文件生成可执行文件之后,则完成 了对所述源文件的编译过程。可以理解的是,生成可执行文件之后,运行该可执行文件即可 实现所述源文件中各文件块的功能以及在所述目标文件块中插入的桩代码的功能。
[0057] 请参见图3,为本发明实施例提供的又一种文件处理方法的流程图;该方法可包 括以下步骤S301-步骤S310。
[0058] S301,接收用户设置的文件过滤条件,并接收用户预先配置的桩代码。
[0059] S302,扫描源文件,确定符合预设的文件过滤条件的目标文件块。
[0060] S303,对所述目标文件块进行语法解析,生成所述目标文件块的第一抽象语法树。
[0061] S304,扫描所述第一抽象语法树,确定所述目标文件块的函数入口位置和函数出 口位置。
[0062] S305,将所述第一抽象语法树中所确定的所述目标文件块的函数入口位置和/或 函数出口位置记录为对所述目标文件块的插桩位置。
[0063] S306,获取预先配置的桩代码。
[0064] S307,将所述预先配置的桩代码插入至所述第一抽象语法树中所确定的所述目标 文件块的函数入口位置和/或函数出口位置。
[0065] S308,将插入所述预先配置的桩代码后的第一抽象语法树确定为所述第二抽象语 法树。
[0066] S309,调用文件回写接口将所述第二抽象语法树回写至所述源文件中。
[0067] 本实施例的步骤S301-步骤S309可参见图2所示实施例的步骤S201-步骤S209, 在此不赘述。
[0068] S310,在接收到文件修改请求时,对完成回写的所述源文件执行修改操作。
[0069] 通过步骤S309的回写操作,使得完成插桩处理后的源文件依然以代码文件形式 存在,用户如果存在修改需要,则可对完成插桩处理后的所述源文件进行修改。本步骤中, 如果接收到用户发送的文件修改请求,则可以根据用户的请求对完成回写的所述源文件执 行修改操作,从而提升了对文件的操作灵活性。
[0070] S311,调用编译接口将完成回写的所述源文件生成可执行文件。
[0071] 本实施例的步骤S311可参见图2所示实施例的步骤S210,在此不赘述。
[0072] 通过上述附图1-附图3所示实施例的描述,本发明实施例扫描源文件确定符合预 设的文件过滤条件的目标文件块进行文件处理,可以去掉源文件中不需要插桩处理的文件 块,减少了文件处理所耗费的资源,提升了文件处理效率;另外,本发明实施例基于目标文 件块的AST进行插桩处理,并将插桩后的AST回写至源文件中,从而使得完成插桩处理后的 源文件依然以代码文件形式存在,方便用户对插桩处理后的源文件的操作,提升了文件操 作灵活性。
[0073] 需要说明的是,上述附图1-附图3所示的文件处理方法,可以由文件处理装置 执行,该文件处理装置可以为基于轻量级编译器开发的可执行装置,可不依赖于编译环境 实现对源文件的处理;例如:该文件处理装置可以为基于Clang编译器开发的可执行装 置。该文件处理装置可提供包含:源文件扫描、AST生成、插桩处理以及源文件编译等功 能,以实现附图1-附图3所示的文件处理过程。此外,基于轻量级编译器的性能,该文件 处理装置还可以支持多种编程语言的源文件,该编程语言包括但不限于:C语言、C++语言、 Objective-C 语言等。
[0074] 下面将结合附图4-附图7,对本发明实施例提供的一种文件处理装置的结构进行 详细介绍。需要说明的是,附图4-附图7所示的文件处理装置,用于执行本发明图1-图3 所示实施例的方法,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未 揭示的,请参照本发明图1-图3所示的实施例。
[0075] 请参见图4,为本发明实施例提供的一种文件处理装置的结构示意图;该装置可 包括:过滤模块101、确定模块102、插桩处理模块103和回写模块104。
[0076] 过滤模块101,用于扫描源文件,确定符合预设的文件过滤条件的目标文件块。
[0077] 其中,源文件可以指程序的源代码文件。文件过滤条件可以由用户预先设置,该文 件过滤条件可以为:在循环分支文件、条件分支文件、输入/输出分支文件的任一种或多种 类型的分支文件中插入桩代码。所述过滤模块101依据预设的文件过滤条件,可对源文件 中包含的各文件块进行过滤,得到满足文件过滤条件的至少一个目标文件块,例如:得到循 环分支文件、条件分支文件、输入/输出分支文件等分支文件。
[0078] 需要说明的是,通过筛选符合预设的文件过滤条件的目标文件块进行后续处理, 而对于不符合预设的文件过滤条件文件块则无需进行处理,从而可避免对整个源文件进行 处理所带来的资源耗费,且能有效地提升文件处理效率。
[0079] 确定模块102,用于生成用于表示所述目标文件块的第一抽象语法树,并根据所述 第一抽象语法树确定对所述目标文件块的插桩位置。
[0080] 其中,抽象语法树(Abstract Syntax Tree,AST)是编程语言的源代码的抽象语法 结构的树状表现形式,AST上的每个节点表示该源代码中的一种结构。本步骤中,第一 AST 为目标文件块的抽象结构的树状表现形式,通过扫描第一 AST,则可确定对所述目标文件块 的插桩位置。
[0081] 插桩处理模块103,用于在所述确定的插桩位置对所述目标文件块进行插桩处理, 生成用于表示插桩后的所述目标文件块的第二抽象语法树。
[0082] 插桩处理的目的是在所述目标文件块的插桩位置植入桩代码,以实现对目标文件 块的监控分析,其中,该桩代码可以由用户预先配置。所述插桩处理模块103在第一 AST中 所确定的插桩位置进行插桩处理后,则形成包含已插入的预先配置的桩代码的新的AST,该 新的AST则为所述第二 AST,用于表示插桩后的所述目标文件块的抽象结构。
[0083] 回写模块104,用于调用文件回写接口将所述第二抽象语法树所表示的文件块回 写至所述源文件中。
[0084] 其中,完成回写的所述源文件即为完成插桩处理的源文件。通过所述回写模块104 的回写操作,使得完成插桩处理后的源文件依然以代码文件形式存在,用户如果存在修改 需要,则可对完成插桩处理后的所述源文件进行修改,从而提升了操作灵活性。
[0085] 请参见图5,是本发明实施例提供的另一种文件处理装置的结构示意图;该装置 可包括:过滤模块101、确定模块102、插桩处理模块103和回写模块104。本实施例中,可选 地,该装置还可包括以下至少一种模块:接收模块105、封装模块106和文件修改模块107。 其中,过滤模块101、确定模块102、插桩处理模块103和回写模块104的结构可参见图4所 示实施例的相关描述,在此不赘述。
[0086] 接收模块105,用于接收用户设置的文件过滤条件,并接收用户预先配置的桩代 码。
[0087] 其中,所述文件过滤条件可以为:在循环分支文件、条件分支文件、输入/输出分 支文件的任一种或多种类型的分支文件中插入桩代码。本实施例中,可以通过向用户提供 人机交互界面,所述接收模块105接收用户设置的过滤条件以及预先配置的桩代码。
[0088] 封装模块106,用于调用编译接口将完成回写的所述源文件生成可执行文件。
[0089] 所述封装模块106调用编译接口将完成回写的所述源文件生成可执行文件之后, 则完成了对所述源文件的编译过程。可以理解的是,生成可执行文件之后,运行该可执行文 件即可实现所述源文件中各文件块的功能以及在所述目标文件块中插入的桩代码的功能。
[0090] 文件修改模块107,用于在接收到文件修改请求时,对完成回写的所述源文件执行 修改操作。
[0091] 通过所述回写模块104的回写操作,使得完成插桩处理后的源文件依然以代码文 件形式存在,用户如果存在修改需要,则可对完成插桩处理后的所述源文件进行修改。如果 接收到用户发送的文件修改请求,所述文件修改模块107则可以根据用户的请求对完成回 写的所述源文件执行修改操作,从而提升了对文件的操作灵活性。
[0092] 请参见图6,为本发明实施例提供的确定模块的结构示意图;该确定模块102可包 括:语法分析单元1201、位置确定单元1202和记录单元1203。
[0093] 语法分析单元1201,用于对所述目标文件块进行语法解析,生成所述目标文件块 的第一抽象语法树。
[0094] 其中,抽象语法树的结构不依赖于源语言的文法,即对所述目标文件块进行语法 解析的过程与所述目标文件块所采用的上下文文法无关。所述语法分析单元1201对所述 目标文件块进行语法解析,则可生成所述目标文件块的第一 AST,该解析的过程可参见现有 技术,在此不赘述。
[0095] 位置确定单元1202,用于扫描所述第一抽象语法树,确定所述目标文件块的函数 入口位置和函数出口位置。
[0096] 所述位置确定单元1202通过扫描第一 AST,即遍历第一 AST上的各节点,以在第 一 AST上判断目标文件块的函数入口和函数出口,从而确定所述目标文件块在第一 AST上 对应的函数入口位置和函数出口位置。
[0097] 记录单元1203,用于将所述第一抽象语法树中所确定的所述目标文件块的函数入 口位置和/或函数出口位置记录为对所述目标文件块的插桩位置。
[0098] 请参见图7,为本发明实施例提供的插桩处理模块的结构示意图;该插桩处理模 块103可包括:获取单元1301、插桩处理单元1302和语法树确定单元1303。
[0099] 获取单元1301,用于获取预先配置的桩代码。
[0100] 插桩处理单元1302,用于将所述预先配置的桩代码插入至所述第一抽象语法树中 所确定的所述目标文件块的函数入口位置和/或函数出口位置。
[0101] 所述插桩处理单元1302在第一 AST中所确定的所述目标文件块的函数入口位置 和/或函数出口位置插入预先配置的桩代码的过程,即为对所述目标文件块进行插桩的过 程。
[0102] 语法树确定单元1303,用于将插入所述预先配置的桩代码后的第一抽象语法树确 定为所述第二抽象语法树。
[0103] 在第一 AST中所确定的插桩位置进行插桩处理后,则形成包含已插入的预先配置 的桩代码的新的AST,所述语法树确定单元1303将该新的AST确定为所述第二 AST,用于表 示插桩后的所述目标文件块的抽象结构。
[0104] 通过上述附图4-附图7所示实施例的描述,本发明实施例扫描源文件确定符合预 设的文件过滤条件的目标文件块进行文件处理,可以去掉源文件中不需要插桩处理的文件 块,减少了文件处理所耗费的资源,提升了文件处理效率;另外,本发明实施例基于目标文 件块的AST进行插桩处理,并将插桩后的AST回写至源文件中,从而使得完成插桩处理后的 源文件依然以代码文件形式存在,方便用户对插桩处理后的源文件的操作,提升了文件操 作灵活性。
[0105] 需要说明的是,上述附图4-附图7所示的文件处理装置,可以为基于轻量级编译 器开发的可执行装置,可不依赖于编译环境实现对源文件的处理;例如:该文件处理装置 可以为基于Clang编译器开发的可执行装置。该文件处理装置可提供包含:源文件扫描、 AST生成、插桩处理以及源文件编译等功能,以实现附图1-附图3所示的文件处理过程。此 夕卜,基于轻量级编译器的性能,该文件处理装置还可以支持多种编程语言的源文件,该编程 语目包括但不限于:C语目、C++语目、Objective-C语目等等。
[0106] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以 通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质 中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁 碟、光盘、只读存储记忆体(Read-Only Memory, ROM)或随机存储记忆体(Random Access Memory, RAM)等。
[0107] 以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范 围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
【权利要求】
1. 一种文件处理方法,其特征在于,包括: 扫描源文件,确定符合预设的文件过滤条件的目标文件块; 生成用于表示所述目标文件块的第一抽象语法树,并根据所述第一抽象语法树确定对 所述目标文件块的插桩位置; 在所述确定的插桩位置对所述目标文件块进行插桩处理,生成用于表示插桩后的所述 目标文件块的第二抽象语法树; 调用文件回写接口将所述第二抽象语法树回写至所述源文件中。
2.如权利要求1所述的方法,其特征在于,所述生成用于表示所述目标文件块的第一 抽象语法树,并根据所述第一抽象语法树确定所述目标文件块的插桩位置,包括: 对所述目标文件块进行语法解析,生成所述目标文件块的第一抽象语法树; 扫描所述第一抽象语法树,确定所述目标文件块的函数入口位置和函数出口位置; 将所述第一抽象语法树中所确定的所述目标文件块的函数入口位置和/或函数出口 位置记录为对所述目标文件块的插桩位置。
3.如权利要求2所述的方法,其特征在于,所述在所述确定的插桩位置对所述目标文 件块进行插桩处理,生成用于表示插桩后的目标文件的第二抽象语法树,包括: 获取预先配置的桩代码; 将所述预先配置的桩代码插入至所述第一抽象语法树中所确定的所述目标文件块的 函数入口位置和/或函数出口位置; 将插入所述预先配置的桩代码后的第一抽象语法树确定为所述第二抽象语法树。
4.如权利要求1-3任一项所述的方法,其特征在于,所述扫描源文件,确定符合预设的 文件过滤条件的目标文件块之前,还包括: 接收用户设置的文件过滤条件,并接收用户预先配置的桩代码; 其中,所述文件过滤条件包括:在循环分支文件、条件分支文件、输入/输出分支文件 的任一种或多种类型的分支文件中插入桩代码。
5.如权利要求4所述的方法,其特征在于,所述调用文件回写接口将所述第二抽象语 法树回写至所述源文件中之后,还包括: 调用编译接口将完成回写的所述源文件生成可执行文件。
6.如权利要求5所述的方法,其特征在于,所述调用文件回写接口将所述第二抽象语 法树回写至所述源文件中之后,所述调用编译接口将完成回写的所述源文件生成可执行文 件之前,还包括: 在接收到文件修改请求时,对完成回写的所述源文件执行修改操作。
7. 一种文件处理装置,其特征在于,包括: 过滤模块,用于扫描源文件,确定符合预设的文件过滤条件的目标文件块; 确定模块,用于生成用于表示所述目标文件块的第一抽象语法树,并根据所述第一抽 象语法树确定对所述目标文件块的插桩位置; 插桩处理模块,用于在所述确定的插桩位置对所述目标文件块进行插桩处理,生成用 于表示插桩后的所述目标文件块的第二抽象语法树; 回写模块,用于调用文件回写接口将所述第二抽象语法树所表示的文件块回写至所述 源文件中。
8.如权利要求7所述的装置,其特征在于,所述确定模块包括: 语法分析单元,用于对所述目标文件块进行语法解析,生成所述目标文件块的第一抽 象语法树; 位置确定单元,用于扫描所述第一抽象语法树,确定所述目标文件块的函数入口位置 和函数出口位置; 记录单元,用于将所述第一抽象语法树中所确定的所述目标文件块的函数入口位置和 /或函数出口位置记录为对所述目标文件块的插桩位置。
9.如权利要求8所述的装置,其特征在于,所述插桩处理模块包括: 获取单元,用于获取预先配置的桩代码; 插桩处理单元,用于将所述预先配置的桩代码插入至所述第一抽象语法树中所确定的 所述目标文件块的函数入口位置和/或函数出口位置; 语法树确定单元,用于将插入所述预先配置的桩代码后的第一抽象语法树确定为所述 第二抽象语法树。
10.如权利要求7-9任一项所述的装置,其特征在于,还包括: 接收模块,用于接收用户设置的文件过滤条件,并接收用户预先配置的桩代码; 其中,所述文件过滤条件包括:在循环分支文件、条件分支文件、输入/输出分支文件 的任一种或多种类型的分支文件中插入桩代码。
11.如权利要求10所述的装置,其特征在于,还包括: 封装模块,用于调用编译接口将完成回写的所述源文件生成可执行文件。
12.如权利要求11所述的装置,其特征在于,还包括: 文件修改模块,用于在接收到文件修改请求时,对完成回写的所述源文件执行修改操 作。
【文档编号】G06F9/44GK104142819SQ201310287998
【公开日】2014年11月12日 申请日期:2013年7月10日 优先权日:2013年7月10日
【发明者】吴云佳 申请人:腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1