CN104142819A - 一种文件处理方法及装置 - Google Patents

一种文件处理方法及装置 Download PDF

Info

Publication number
CN104142819A
CN104142819A CN201310287998.3A CN201310287998A CN104142819A CN 104142819 A CN104142819 A CN 104142819A CN 201310287998 A CN201310287998 A CN 201310287998A CN 104142819 A CN104142819 A CN 104142819A
Authority
CN
China
Prior art keywords
file
syntax tree
abstract syntax
pitching pile
destination piece
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
Application number
CN201310287998.3A
Other languages
English (en)
Other versions
CN104142819B (zh
Inventor
吴云佳
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN201310287998.3A priority Critical patent/CN104142819B/zh
Priority to PCT/CN2013/087830 priority patent/WO2015003452A1/en
Priority to US14/256,678 priority patent/US9116714B2/en
Priority to TW103122914A priority patent/TW201502985A/zh
Publication of CN104142819A publication Critical patent/CN104142819A/zh
Application granted granted Critical
Publication of CN104142819B publication Critical patent/CN104142819B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/1734Details of monitoring file system events, e.g. by the use of hooks, filter drivers, logs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • G06F16/217Database tuning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • G06F8/427Parsing

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Machine Translation (AREA)

Abstract

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

Description

一种文件处理方法及装置
技术领域
本发明涉及一种计算机领域,具体涉及文件处理技术领域,尤其涉及一种文件处理方法及装置。
背景技术
在软件程序开发过程中,经常会有性能优化、内存泄漏检测等需求,这时需要对程序源文件中的函数或代码段进行精确的分析,监控程序的源文件中函数或代码段的运行耗时、内存消耗、CPU(Central Processing Unit,中央处理器)占用等指标,用于指导性能优化的方向或定位程序的漏洞bug。目前,对程序源文件的测试分析主要是通过对源文件进行插桩处理实现,插桩是指在保证程序原有逻辑完整性的基础上插入一些探针(桩代码),在被执行时输出程序运行的特征数据,通过这些特征数据来获得程序运行的相关信息,实现测试分析的目的。现有的文件插桩处理发生在程序编译阶段,即基于编译环境在程序源文件的相应位置插入桩代码,获得编译后的可执行程序;上述插桩处理过程需要对整个源文件进行分析,对于大型的程序来说,将会造成相当大的工作量,效率较低;另外,插入桩代码后的源文件直接被编译获得可执行程序,从而无法实现对插桩后的源文件进行操作,降低了文件操作的灵活性。
发明内容
本发明提供一种文件处理方法及装置,可提升文件处理效率,提升文件操作的灵活性。
本发明第一方面提供了一种文件处理方法,可包括:
扫描源文件,确定符合预设的文件过滤条件的目标文件块;
生成用于表示所述目标文件块的第一抽象语法树,并根据所述第一抽象语法树确定对所述目标文件块的插桩位置;
在所述确定的插桩位置对所述目标文件块进行插桩处理,生成用于表示插桩后的所述目标文件块的第二抽象语法树;
调用文件回写接口将所述第二抽象语法树回写至所述源文件中。
本发明第二方面提供了一种文件处理装置,可包括:
过滤模块,用于扫描源文件,确定符合预设的文件过滤条件的目标文件块;
确定模块,用于生成用于表示所述目标文件块的第一抽象语法树,并根据所述第一抽象语法树确定对所述目标文件块的插桩位置;
插桩处理模块,用于在所述确定的插桩位置对所述目标文件块进行插桩处理,生成用于表示插桩后的所述目标文件块的第二抽象语法树;
回写模块,用于调用文件回写接口将所述第二抽象语法树所表示的文件块回写至所述源文件中。
实施本发明实施例,具有如下有益效果:
本发明实施例扫描源文件确定符合预设的文件过滤条件的目标文件块进行文件处理,可以去掉源文件中不需要插桩处理的文件块,减少了文件处理所耗费的资源,提升了文件处理效率;另外,本发明实施例基于目标文件块的抽象语法树进行插桩处理,并将插桩后的抽象语法树回写至源文件中,从而使得完成插桩处理后的源文件依然以代码文件形式存在,方便用户对插桩处理后的源文件的操作,提升了文件操作灵活性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种文件处理方法的流程图;
图2为本发明实施例提供的另一种文件处理方法的流程图;
图3为本发明实施例提供的又一种文件处理方法的流程图;
图4为本发明实施例提供的一种文件处理装置的结构示意图;
图5是本发明实施例提供的另一种文件处理装置的结构示意图;
图6为本发明实施例提供的确定模块的结构示意图;
图7为本发明实施例提供的插桩处理模块的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
下面将结合附图1-附图3,对本发明实施例提供的文件处理方法进行详细介绍。
请参见图1,为本发明实施例提供的一种文件处理方法的流程图;该方法可包括以下步骤S101-步骤S104。
S101,扫描源文件,确定符合预设的文件过滤条件的目标文件块。
其中,源文件可以指程序的源代码文件。文件过滤条件可以由用户预先设置,该文件过滤条件可以为:在循环分支文件、条件分支文件、输入/输出分支文件的任一种或多种类型的分支文件中插入桩代码。本步骤中,依据预设的文件过滤条件,可对源文件中包含的各文件块进行过滤,得到满足文件过滤条件的至少一个目标文件块,例如:得到循环分支文件、条件分支文件、输入/输出分支文件等分支文件。
需要说明的是,通过筛选符合预设的文件过滤条件的目标文件块进行后续处理,而对于不符合预设的文件过滤条件文件块则无需进行处理,从而可避免对整个源文件进行处理所带来的资源耗费,且能有效地提升文件处理效率。
S102,生成用于表示所述目标文件块的第一抽象语法树,并根据所述第一抽象语法树确定对所述目标文件块的插桩位置。
其中,抽象语法树(Abstract Syntax Tree,AST)是编程语言的源代码的抽象语法结构的树状表现形式,AST上的每个节点表示该源代码中的一种结构。本步骤中,第一AST为目标文件块的抽象结构的树状表现形式,通过扫描第一AST,则可确定对所述目标文件块的插桩位置。
S103,在所述确定的插桩位置对所述目标文件块进行插桩处理,生成用于表示插桩后的所述目标文件块的第二抽象语法树。
插桩处理的目的是在所述目标文件块的插桩位置植入桩代码,以实现对目标文件块的监控分析,其中,该桩代码可以由用户预先配置。本步骤中,在第一AST中所确定的插桩位置进行插桩处理后,则形成包含已插入的预先配置的桩代码的新的AST,该新的AST则为所述第二AST,用于表示插桩后的所述目标文件块的抽象结构。
S104,调用文件回写接口将所述第二抽象语法树回写至所述源文件中。
其中,完成回写的所述源文件即为完成插桩处理的源文件。通过本步骤的回写操作,使得完成插桩处理后的源文件依然以代码文件形式存在,用户如果存在修改需要,则可对完成插桩处理后的所述源文件进行修改,从而提升了操作灵活性。
请参见图2,为本发明实施例提供的另一种文件处理方法的流程图;该方法可包括以下步骤S201-步骤S210。
S201,接收用户设置的文件过滤条件,并接收用户预先配置的桩代码。
其中,所述文件过滤条件可以为:在循环分支文件、条件分支文件、输入/输出分支文件的任一种或多种类型的分支文件中插入桩代码。本步骤中,可以通过向用户提供人机交互界面,接收用户设置的过滤条件以及预先配置的桩代码。
S202,扫描源文件,确定符合预设的文件过滤条件的目标文件块。
本步骤可参见图1所示实施例的步骤S101,在此不赘述。
S203,对所述目标文件块进行语法解析,生成所述目标文件块的第一抽象语法树。
其中,抽象语法树的结构不依赖于源语言的文法,即对所述目标文件块进行语法解析的过程与所述目标文件块所采用的上下文文法无关。本步骤中,对所述目标文件块进行语法解析,则可生成所述目标文件块的第一AST,该解析的过程可参见现有技术,在此不赘述。
S204,扫描所述第一抽象语法树,确定所述目标文件块的函数入口位置和函数出口位置。
本步骤中,通过扫描第一AST,即遍历第一AST上的各节点,以在第一AST上判断目标文件块的函数入口和函数出口,从而确定所述目标文件块在第一AST上对应的函数入口位置和函数出口位置。
S205,将所述第一抽象语法树中所确定的所述目标文件块的函数入口位置和/或函数出口位置记录为对所述目标文件块的插桩位置。
本实施例的步骤S203-步骤S205可以为图1所示实施例的步骤S102的具体细化步骤。
S206,获取预先配置的桩代码。
S207,将所述预先配置的桩代码插入至所述第一抽象语法树中所确定的所述目标文件块的函数入口位置和/或函数出口位置。
本步骤在第一AST中所确定的所述目标文件块的函数入口位置和/或函数出口位置插入预先配置的桩代码的过程,即为对所述目标文件块进行插桩的过程。
S208,将插入所述预先配置的桩代码后的第一抽象语法树确定为所述第二抽象语法树。
在第一AST中所确定的插桩位置进行插桩处理后,则形成包含已插入的预先配置的桩代码的新的AST,该新的AST则为所述第二AST,用于表示插桩后的所述目标文件块的抽象结构。
本实施例的步骤S206-步骤S208可以为图1所示实施例的步骤S103的具体细化步骤。
S209,调用文件回写接口将所述第二抽象语法树回写至所述源文件中。
本步骤可参见图1所示实施例的步骤S104,在此不赘述。
S210,调用编译接口将完成回写的所述源文件生成可执行文件。
本步骤中,调用编译接口将完成回写的所述源文件生成可执行文件之后,则完成了对所述源文件的编译过程。可以理解的是,生成可执行文件之后,运行该可执行文件即可实现所述源文件中各文件块的功能以及在所述目标文件块中插入的桩代码的功能。
请参见图3,为本发明实施例提供的又一种文件处理方法的流程图;该方法可包括以下步骤S301-步骤S310。
S301,接收用户设置的文件过滤条件,并接收用户预先配置的桩代码。
S302,扫描源文件,确定符合预设的文件过滤条件的目标文件块。
S303,对所述目标文件块进行语法解析,生成所述目标文件块的第一抽象语法树。
S304,扫描所述第一抽象语法树,确定所述目标文件块的函数入口位置和函数出口位置。
S305,将所述第一抽象语法树中所确定的所述目标文件块的函数入口位置和/或函数出口位置记录为对所述目标文件块的插桩位置。
S306,获取预先配置的桩代码。
S307,将所述预先配置的桩代码插入至所述第一抽象语法树中所确定的所述目标文件块的函数入口位置和/或函数出口位置。
S308,将插入所述预先配置的桩代码后的第一抽象语法树确定为所述第二抽象语法树。
S309,调用文件回写接口将所述第二抽象语法树回写至所述源文件中。
本实施例的步骤S301-步骤S309可参见图2所示实施例的步骤S201-步骤S209,在此不赘述。
S310,在接收到文件修改请求时,对完成回写的所述源文件执行修改操作。
通过步骤S309的回写操作,使得完成插桩处理后的源文件依然以代码文件形式存在,用户如果存在修改需要,则可对完成插桩处理后的所述源文件进行修改。本步骤中,如果接收到用户发送的文件修改请求,则可以根据用户的请求对完成回写的所述源文件执行修改操作,从而提升了对文件的操作灵活性。
S311,调用编译接口将完成回写的所述源文件生成可执行文件。
本实施例的步骤S311可参见图2所示实施例的步骤S210,在此不赘述。
通过上述附图1-附图3所示实施例的描述,本发明实施例扫描源文件确定符合预设的文件过滤条件的目标文件块进行文件处理,可以去掉源文件中不需要插桩处理的文件块,减少了文件处理所耗费的资源,提升了文件处理效率;另外,本发明实施例基于目标文件块的AST进行插桩处理,并将插桩后的AST回写至源文件中,从而使得完成插桩处理后的源文件依然以代码文件形式存在,方便用户对插桩处理后的源文件的操作,提升了文件操作灵活性。
需要说明的是,上述附图1-附图3所示的文件处理方法,可以由文件处理装置执行,该文件处理装置可以为基于轻量级编译器开发的可执行装置,可不依赖于编译环境实现对源文件的处理;例如:该文件处理装置可以为基于Clang编译器开发的可执行装置。该文件处理装置可提供包含:源文件扫描、AST生成、插桩处理以及源文件编译等功能,以实现附图1-附图3所示的文件处理过程。此外,基于轻量级编译器的性能,该文件处理装置还可以支持多种编程语言的源文件,该编程语言包括但不限于:C语言、C++语言、Objective-C语言等。
下面将结合附图4-附图7,对本发明实施例提供的一种文件处理装置的结构进行详细介绍。需要说明的是,附图4-附图7所示的文件处理装置,用于执行本发明图1-图3所示实施例的方法,为了便于说明,仅示出了与本发明实施例相关的部分,具体技术细节未揭示的,请参照本发明图1-图3所示的实施例。
请参见图4,为本发明实施例提供的一种文件处理装置的结构示意图;该装置可包括:过滤模块101、确定模块102、插桩处理模块103和回写模块104。
过滤模块101,用于扫描源文件,确定符合预设的文件过滤条件的目标文件块。
其中,源文件可以指程序的源代码文件。文件过滤条件可以由用户预先设置,该文件过滤条件可以为:在循环分支文件、条件分支文件、输入/输出分支文件的任一种或多种类型的分支文件中插入桩代码。所述过滤模块101依据预设的文件过滤条件,可对源文件中包含的各文件块进行过滤,得到满足文件过滤条件的至少一个目标文件块,例如:得到循环分支文件、条件分支文件、输入/输出分支文件等分支文件。
需要说明的是,通过筛选符合预设的文件过滤条件的目标文件块进行后续处理,而对于不符合预设的文件过滤条件文件块则无需进行处理,从而可避免对整个源文件进行处理所带来的资源耗费,且能有效地提升文件处理效率。
确定模块102,用于生成用于表示所述目标文件块的第一抽象语法树,并根据所述第一抽象语法树确定对所述目标文件块的插桩位置。
其中,抽象语法树(Abstract Syntax Tree,AST)是编程语言的源代码的抽象语法结构的树状表现形式,AST上的每个节点表示该源代码中的一种结构。本步骤中,第一AST为目标文件块的抽象结构的树状表现形式,通过扫描第一AST,则可确定对所述目标文件块的插桩位置。
插桩处理模块103,用于在所述确定的插桩位置对所述目标文件块进行插桩处理,生成用于表示插桩后的所述目标文件块的第二抽象语法树。
插桩处理的目的是在所述目标文件块的插桩位置植入桩代码,以实现对目标文件块的监控分析,其中,该桩代码可以由用户预先配置。所述插桩处理模块103在第一AST中所确定的插桩位置进行插桩处理后,则形成包含已插入的预先配置的桩代码的新的AST,该新的AST则为所述第二AST,用于表示插桩后的所述目标文件块的抽象结构。
回写模块104,用于调用文件回写接口将所述第二抽象语法树所表示的文件块回写至所述源文件中。
其中,完成回写的所述源文件即为完成插桩处理的源文件。通过所述回写模块104的回写操作,使得完成插桩处理后的源文件依然以代码文件形式存在,用户如果存在修改需要,则可对完成插桩处理后的所述源文件进行修改,从而提升了操作灵活性。
请参见图5,是本发明实施例提供的另一种文件处理装置的结构示意图;该装置可包括:过滤模块101、确定模块102、插桩处理模块103和回写模块104。本实施例中,可选地,该装置还可包括以下至少一种模块:接收模块105、封装模块106和文件修改模块107。其中,过滤模块101、确定模块102、插桩处理模块103和回写模块104的结构可参见图4所示实施例的相关描述,在此不赘述。
接收模块105,用于接收用户设置的文件过滤条件,并接收用户预先配置的桩代码。
其中,所述文件过滤条件可以为:在循环分支文件、条件分支文件、输入/输出分支文件的任一种或多种类型的分支文件中插入桩代码。本实施例中,可以通过向用户提供人机交互界面,所述接收模块105接收用户设置的过滤条件以及预先配置的桩代码。
封装模块106,用于调用编译接口将完成回写的所述源文件生成可执行文件。
所述封装模块106调用编译接口将完成回写的所述源文件生成可执行文件之后,则完成了对所述源文件的编译过程。可以理解的是,生成可执行文件之后,运行该可执行文件即可实现所述源文件中各文件块的功能以及在所述目标文件块中插入的桩代码的功能。
文件修改模块107,用于在接收到文件修改请求时,对完成回写的所述源文件执行修改操作。
通过所述回写模块104的回写操作,使得完成插桩处理后的源文件依然以代码文件形式存在,用户如果存在修改需要,则可对完成插桩处理后的所述源文件进行修改。如果接收到用户发送的文件修改请求,所述文件修改模块107则可以根据用户的请求对完成回写的所述源文件执行修改操作,从而提升了对文件的操作灵活性。
请参见图6,为本发明实施例提供的确定模块的结构示意图;该确定模块102可包括:语法分析单元1201、位置确定单元1202和记录单元1203。
语法分析单元1201,用于对所述目标文件块进行语法解析,生成所述目标文件块的第一抽象语法树。
其中,抽象语法树的结构不依赖于源语言的文法,即对所述目标文件块进行语法解析的过程与所述目标文件块所采用的上下文文法无关。所述语法分析单元1201对所述目标文件块进行语法解析,则可生成所述目标文件块的第一AST,该解析的过程可参见现有技术,在此不赘述。
位置确定单元1202,用于扫描所述第一抽象语法树,确定所述目标文件块的函数入口位置和函数出口位置。
所述位置确定单元1202通过扫描第一AST,即遍历第一AST上的各节点,以在第一AST上判断目标文件块的函数入口和函数出口,从而确定所述目标文件块在第一AST上对应的函数入口位置和函数出口位置。
记录单元1203,用于将所述第一抽象语法树中所确定的所述目标文件块的函数入口位置和/或函数出口位置记录为对所述目标文件块的插桩位置。
请参见图7,为本发明实施例提供的插桩处理模块的结构示意图;该插桩处理模块103可包括:获取单元1301、插桩处理单元1302和语法树确定单元1303。
获取单元1301,用于获取预先配置的桩代码。
插桩处理单元1302,用于将所述预先配置的桩代码插入至所述第一抽象语法树中所确定的所述目标文件块的函数入口位置和/或函数出口位置。
所述插桩处理单元1302在第一AST中所确定的所述目标文件块的函数入口位置和/或函数出口位置插入预先配置的桩代码的过程,即为对所述目标文件块进行插桩的过程。
语法树确定单元1303,用于将插入所述预先配置的桩代码后的第一抽象语法树确定为所述第二抽象语法树。
在第一AST中所确定的插桩位置进行插桩处理后,则形成包含已插入的预先配置的桩代码的新的AST,所述语法树确定单元1303将该新的AST确定为所述第二AST,用于表示插桩后的所述目标文件块的抽象结构。
通过上述附图4-附图7所示实施例的描述,本发明实施例扫描源文件确定符合预设的文件过滤条件的目标文件块进行文件处理,可以去掉源文件中不需要插桩处理的文件块,减少了文件处理所耗费的资源,提升了文件处理效率;另外,本发明实施例基于目标文件块的AST进行插桩处理,并将插桩后的AST回写至源文件中,从而使得完成插桩处理后的源文件依然以代码文件形式存在,方便用户对插桩处理后的源文件的操作,提升了文件操作灵活性。
需要说明的是,上述附图4-附图7所示的文件处理装置,可以为基于轻量级编译器开发的可执行装置,可不依赖于编译环境实现对源文件的处理;例如:该文件处理装置可以为基于Clang编译器开发的可执行装置。该文件处理装置可提供包含:源文件扫描、AST生成、插桩处理以及源文件编译等功能,以实现附图1-附图3所示的文件处理过程。此外,基于轻量级编译器的性能,该文件处理装置还可以支持多种编程语言的源文件,该编程语言包括但不限于:C语言、C++语言、Objective-C语言等等。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。

Claims (12)

1.一种文件处理方法,其特征在于,包括:
扫描源文件,确定符合预设的文件过滤条件的目标文件块;
生成用于表示所述目标文件块的第一抽象语法树,并根据所述第一抽象语法树确定对所述目标文件块的插桩位置;
在所述确定的插桩位置对所述目标文件块进行插桩处理,生成用于表示插桩后的所述目标文件块的第二抽象语法树;
调用文件回写接口将所述第二抽象语法树回写至所述源文件中。
2.如权利要求1所述的方法,其特征在于,所述生成用于表示所述目标文件块的第一抽象语法树,并根据所述第一抽象语法树确定所述目标文件块的插桩位置,包括:
对所述目标文件块进行语法解析,生成所述目标文件块的第一抽象语法树;
扫描所述第一抽象语法树,确定所述目标文件块的函数入口位置和函数出口位置;
将所述第一抽象语法树中所确定的所述目标文件块的函数入口位置和/或函数出口位置记录为对所述目标文件块的插桩位置。
3.如权利要求2所述的方法,其特征在于,所述在所述确定的插桩位置对所述目标文件块进行插桩处理,生成用于表示插桩后的目标文件的第二抽象语法树,包括:
获取预先配置的桩代码;
将所述预先配置的桩代码插入至所述第一抽象语法树中所确定的所述目标文件块的函数入口位置和/或函数出口位置;
将插入所述预先配置的桩代码后的第一抽象语法树确定为所述第二抽象语法树。
4.如权利要求1-3任一项所述的方法,其特征在于,所述扫描源文件,确定符合预设的文件过滤条件的目标文件块之前,还包括:
接收用户设置的文件过滤条件,并接收用户预先配置的桩代码;
其中,所述文件过滤条件包括:在循环分支文件、条件分支文件、输入/输出分支文件的任一种或多种类型的分支文件中插入桩代码。
5.如权利要求4所述的方法,其特征在于,所述调用文件回写接口将所述第二抽象语法树回写至所述源文件中之后,还包括:
调用编译接口将完成回写的所述源文件生成可执行文件。
6.如权利要求5所述的方法,其特征在于,所述调用文件回写接口将所述第二抽象语法树回写至所述源文件中之后,所述调用编译接口将完成回写的所述源文件生成可执行文件之前,还包括:
在接收到文件修改请求时,对完成回写的所述源文件执行修改操作。
7.一种文件处理装置,其特征在于,包括:
过滤模块,用于扫描源文件,确定符合预设的文件过滤条件的目标文件块;
确定模块,用于生成用于表示所述目标文件块的第一抽象语法树,并根据所述第一抽象语法树确定对所述目标文件块的插桩位置;
插桩处理模块,用于在所述确定的插桩位置对所述目标文件块进行插桩处理,生成用于表示插桩后的所述目标文件块的第二抽象语法树;
回写模块,用于调用文件回写接口将所述第二抽象语法树所表示的文件块回写至所述源文件中。
8.如权利要求7所述的装置,其特征在于,所述确定模块包括:
语法分析单元,用于对所述目标文件块进行语法解析,生成所述目标文件块的第一抽象语法树;
位置确定单元,用于扫描所述第一抽象语法树,确定所述目标文件块的函数入口位置和函数出口位置;
记录单元,用于将所述第一抽象语法树中所确定的所述目标文件块的函数入口位置和/或函数出口位置记录为对所述目标文件块的插桩位置。
9.如权利要求8所述的装置,其特征在于,所述插桩处理模块包括:
获取单元,用于获取预先配置的桩代码;
插桩处理单元,用于将所述预先配置的桩代码插入至所述第一抽象语法树中所确定的所述目标文件块的函数入口位置和/或函数出口位置;
语法树确定单元,用于将插入所述预先配置的桩代码后的第一抽象语法树确定为所述第二抽象语法树。
10.如权利要求7-9任一项所述的装置,其特征在于,还包括:
接收模块,用于接收用户设置的文件过滤条件,并接收用户预先配置的桩代码;
其中,所述文件过滤条件包括:在循环分支文件、条件分支文件、输入/输出分支文件的任一种或多种类型的分支文件中插入桩代码。
11.如权利要求10所述的装置,其特征在于,还包括:
封装模块,用于调用编译接口将完成回写的所述源文件生成可执行文件。
12.如权利要求11所述的装置,其特征在于,还包括:
文件修改模块,用于在接收到文件修改请求时,对完成回写的所述源文件执行修改操作。
CN201310287998.3A 2013-07-10 2013-07-10 一种文件处理方法及装置 Active CN104142819B (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN201310287998.3A CN104142819B (zh) 2013-07-10 2013-07-10 一种文件处理方法及装置
PCT/CN2013/087830 WO2015003452A1 (en) 2013-07-10 2013-11-26 Methods and systems for file processing
US14/256,678 US9116714B2 (en) 2013-07-10 2014-04-18 Methods and systems for file processing
TW103122914A TW201502985A (zh) 2013-07-10 2014-07-02 檔案處理方法及裝置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310287998.3A CN104142819B (zh) 2013-07-10 2013-07-10 一种文件处理方法及装置

Publications (2)

Publication Number Publication Date
CN104142819A true CN104142819A (zh) 2014-11-12
CN104142819B CN104142819B (zh) 2016-08-24

Family

ID=51852003

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310287998.3A Active CN104142819B (zh) 2013-07-10 2013-07-10 一种文件处理方法及装置

Country Status (3)

Country Link
CN (1) CN104142819B (zh)
TW (1) TW201502985A (zh)
WO (1) WO2015003452A1 (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106155892A (zh) * 2015-04-03 2016-11-23 腾讯科技(深圳)有限公司 判断应用程序测试覆盖范围的方法及程序测试设备
CN110471670A (zh) * 2019-08-20 2019-11-19 杭州和利时自动化有限公司 一种编译器、编译方法和追踪方法及dcs控制器
CN110569628A (zh) * 2019-09-09 2019-12-13 北京智游网安科技有限公司 一种代码的混淆方法以及装置、计算机设备、存储介质
CN112580092A (zh) * 2020-12-07 2021-03-30 北京明朝万达科技股份有限公司 一种敏感文件识别方法及装置

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108182358B (zh) * 2017-12-28 2020-09-29 江苏通付盾信息安全技术有限公司 文件保护方法、装置、计算设备及计算机存储介质
CN112988778B (zh) * 2019-12-13 2024-06-18 北京沃东天骏信息技术有限公司 一种处理数据库查询脚本的方法和装置

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102231109A (zh) * 2011-07-15 2011-11-02 南京大学 无痕可管理的源代码自动插桩方法
CN102323906A (zh) * 2011-09-08 2012-01-18 哈尔滨工程大学 一种基于遗传算法的mc/dc测试数据自动生成方法
CN103049504A (zh) * 2012-12-11 2013-04-17 南京大学 基于源代码查询的半自动插桩方法

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7386541B2 (en) * 2004-03-18 2008-06-10 Microsoft Corporation System and method for compiling an extensible markup language based query
CN101788992A (zh) * 2009-05-06 2010-07-28 厦门东南融通系统工程有限公司 一种数据库查询语句的转换方法和转换系统
US20110321020A1 (en) * 2010-06-23 2011-12-29 Starview Technology, Inc. Transforming declarative event rules into executable procedures

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102231109A (zh) * 2011-07-15 2011-11-02 南京大学 无痕可管理的源代码自动插桩方法
CN102323906A (zh) * 2011-09-08 2012-01-18 哈尔滨工程大学 一种基于遗传算法的mc/dc测试数据自动生成方法
CN103049504A (zh) * 2012-12-11 2013-04-17 南京大学 基于源代码查询的半自动插桩方法

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106155892A (zh) * 2015-04-03 2016-11-23 腾讯科技(深圳)有限公司 判断应用程序测试覆盖范围的方法及程序测试设备
CN110471670A (zh) * 2019-08-20 2019-11-19 杭州和利时自动化有限公司 一种编译器、编译方法和追踪方法及dcs控制器
CN110569628A (zh) * 2019-09-09 2019-12-13 北京智游网安科技有限公司 一种代码的混淆方法以及装置、计算机设备、存储介质
CN110569628B (zh) * 2019-09-09 2021-09-21 北京智游网安科技有限公司 一种代码的混淆方法以及装置、计算机设备、存储介质
CN112580092A (zh) * 2020-12-07 2021-03-30 北京明朝万达科技股份有限公司 一种敏感文件识别方法及装置
CN112580092B (zh) * 2020-12-07 2023-03-24 北京明朝万达科技股份有限公司 一种敏感文件识别方法及装置

Also Published As

Publication number Publication date
CN104142819B (zh) 2016-08-24
TW201502985A (zh) 2015-01-16
WO2015003452A1 (en) 2015-01-15

Similar Documents

Publication Publication Date Title
CN104142819A (zh) 一种文件处理方法及装置
JP6122493B2 (ja) 適応的に移植性を有したライブラリ
US11379943B2 (en) Optimizing compilation of shaders
US8631395B2 (en) Inter-procedural dead catch handler optimizations
CN106547520B (zh) 一种代码路径分析方法及装置
CN109086215B (zh) 一种嵌入式软件单元测试用例生成方法及系统
US10175965B2 (en) Multiphased profile guided optimization
US20130291113A1 (en) Process flow optimized directed graph traversal
CN111090433A (zh) 一种数据处理的方法、装置和存储介质
US8671397B2 (en) Selective data flow analysis of bounded regions of computer software applications
US20110145799A1 (en) Path-sensitive dataflow analysis including path refinement
JP3956131B2 (ja) プログラム変換装置、プログラム変換方法及びプログラム
CN104375875A (zh) 用于应用程序的编译优化的方法以及编译器
US9116714B2 (en) Methods and systems for file processing
CN110795326A (zh) 一种代码拦截检测方法、存储介质、电子设备及系统
CN104267935A (zh) 代码转换方法与装置
CN113626035B (zh) 基于tvm面向risc-v设备的神经网络编译方法
JP2008305337A (ja) プログラム変換装置、プログラム変換方法、プログラム、記憶媒体、デバッグ装置、デバッグ方法及びプログラム開発システム
CN113448874A (zh) 一种单元测试脚本的生成方法及装置
CN112001494A (zh) 一种实现nGraph框架支持FPGA后端设备的方法
CN112596737A (zh) 一种函数调用关系的扫描方法、系统、设备及存储介质
Benz et al. Scenario-aware program specialization for timing predictability
US9785422B1 (en) Applying multiple rewriting without collision for semi-automatic program rewriting system
CN102981839A (zh) 合并执行大规模并行线程的数据扩展优化方法
CN113260976A (zh) 用于在编译源代码中调度指令技术

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant