掌桥专利:专业的专利平台
掌桥专利
首页

一种阻止系统函数调用的方法、装置、设备和存储介质

文献发布时间:2023-06-19 16:11:11



技术领域

本发明实施例涉及计算机技术领域,尤其涉及一种阻止系统函数调用的方法、装置、设备和存储介质。

背景技术

在研发人员进行一些程序研发时,如果调用系统提供的函数进行操作,会造成功能失效等问题,具体体现为:

在研发人员对于具备基础组件和能进行资源管理的程序进行研发时,需要使用与其对应的接口函数操作,如果直接使用系统的函数进行操作,会造成功能失效等问题。例如进行磁盘文件的操作,需要使用与其对应的函数记录和关联文件,从而进行读写和删除等操作,直接使用系统的函数进行操作,会造成基础管理功能失效。

在研发人员对于跨平台的程序进行研发时,如果直接使用系统的函数进行操作,会造成查询编译错误。

由此可知需要一种方案来对系统资源的封装和管理,阻止系统函数的调用。

发明内容

本发明实施例提供一种阻止系统函数调用的方法、装置、设备和存储介质,通过系统调用检查类,判断得知当前编译代码的调用函数是系统函数,则阻止其调用,能够快速查询出系统函数的调用并阻止,解决系统函数被误用的问题。

第一方面,本发明实施例提供一种阻止系统函数调用的方法,包括:

获取任一系统头文件,建立系统函数存储队列;

基于任一新增系统头文件更新所述系统函数存储队列,并对所述系统函数存储队列进行排序;

基于所述系统函数存储队列创建系统调用检查类;

通过所述系统调用检查类对当前编译代码进行识别判断;以及

若当前编译代码为调用函数,且所述调用函数为系统函数,阻止系统函数的调用。

优选的是,所述系统函数存储队列的建立,具体包括:

获取开发工具默认配置的任一系统头文件;

获取所述默认配置的任一系统头文件对应的所有系统函数;

基于所述系统函数的名称和参数建立任一系统头文件对应的系统函数名称列表;

基于所有系统函数名称列表建立系统函数存储队列。

优选的是,所述更新所述系统函数存储队列,并对所述系统函数存储队列进行排序,具体包括:

建立新增系统头文件的系统函数名称列表;

将所述新增系统头文件和对应的系统函数名称列表更新到所述系统函数存储队列中,并对应记录更新时间;

将所述新增系统头文件的系统函数名称列表按照更新时间降序排列;

其中,所述新增系统头文件的系统函数名称列表的排列由数据存储结构EvictingCacheMap创建,并将所述数据存储结构EvictingCacheMap的所有数据持久化到磁盘中。

优选的是,所述系统调用检查类的创建过程包括:

创建编辑器扩展工程;

在所述编辑器扩展工程中定义所述系统调用检查类;

在所述系统调用检查类中添加所述编辑器扩展工程的基础组件库和头文件;

通过所述基础组件库和头文件,在所述系统调用检查类中继承所述编辑器扩展工程的基础组件库中的文字标记标签基础组件;

定义所述系统调用检查类的代码检查成员变量,在所述编辑器扩展工程中定义构造函数,通过所述构造函数将所述编辑器扩展工程的参数赋值于所述代码检查成员变量,完成系统调用检查类的创建;

其中,所述成员变量包括:当前代码显示页面的控件获取接口、当前代码显示页面的控件的设置接口、当前文本代码的获取接口和当前文本代码的设置接口。

优选的是,通过所述系统调用检查类对当前编译代码进行识别判断,具体包括:

获取当前编译代码,并识别出是调用函数的编译代码;

获取所述调用函数对应的头文件,并通过所述系统调用检查类识别出调用函数是系统函数时,修改当前编译代码的调用函数添加下划线标识;和/或

在所有系统函数后添加后缀,以使当前编译代码的调用函数在编译时报错,阻止系统函数调用。

优选的是,获取当前编译代码,并识别出是调用函数的编译代码,具体包括:

获取当前的光标位置,并选择当前编译代码;

提取光标停留位置的完整单词语句;

建立包含调用函数编译语言的单词语句的编译器;

遍历所述编译器,并将提取到的完整单词语句与所述调用函数编译语言的单词语句进行匹配,将匹配相同的单词语句作为调用函数的编译代码。

优选的是,所述通过所述系统调用检查类识别出调用函数是系统函数,具体包括:

获取并比较所述调用函数和系统函数的编译语言;

若所述调用函数和系统函数的编译语言相同,且所述调用函数未实现自定义的功能,则通过所述系统调用检查类,逐一查找与所述调用函数对应的头文件相同的系统头文件;

若查找到相同的系统头文件且查找到与所述调用函数对应的名称相同的系统函数,则判定所述调用函数是系统函数。

第二方面,本发明实施例提供了一种阻止系统函数调用的装置,包括:

获取模块,其用于获取任一系统头文件,建立系统函数存储队列;

结构模块,其用于基于任一新增系统头文件更新所述系统函数存储队列,并对所述系统函数存储队列进行排序;

检查模块,其用于基于所述系统函数存储队列创建系统调用检查类;

识别模块,其用于通过所述系统调用检查类对当前编译代码进行识别判断;

执行模块,其用于若当前编译代码为调用函数,且所述调用函数为系统函数,所述执行模块阻止系统函数的调用。

第三方面,本发明实施例提供了一种电子设备,包括应用处理器和存储器所述处理器用于实现所述存储器中存储得计算机管理程序式时实现上述的阻止系统函数调用的方法的步骤。

第四方面,本发明实施例提供了一种计算机可读存储介质,其上存储有计算机管理类程序,其所述计算机管理类程序被处理器执行时实现如权利上述的阻止系统函数调用的方法的步骤。

有益效果

本发明实施例提供的一种阻止系统函数调用的方法、装置、设备和存储介质,具有下列有益效果:通过系统调用检查类,判断得知当前编译代码的调用函数是系统函数,则阻止其调用,能够快速查询出系统函数的调用并阻止,解决系统函数被误用的问题。

通过建立系统函数存储队列,能够有效存储所有的系统头文件和系统函数。设置在系统函数存储队列中通过系统头文件可以查询到对应的系统函数名称列表,可以在后续的系统函数查询中提高查询速度,也能够快速的判断调用函数是否是系统函数。通过设置系统函数存储结构建立的排列顺序,能够方便后续的系统函数查询。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明阻止系统函数调用的方法实施例的流程图;

图2为本发明阻止系统函数调用的装置实施例的模块图;

图3为本发明实施例提供的具有阻止系统函数调用功能的装置的硬件结构示意图;

图4为本发明实施例提供的一种可能的电子设备的实施例示意图;

图5为本发明实施例提供的一种可能的计算机可读存储介质的实施例示意图。

具体实施方式

以下由特定的具体实施例说明本发明的实施方式,熟悉此技术的人士可由本说明书所揭露的内容轻易地了解本发明的其他优点及功效,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

需要说明的是,在本发明的描述中,术语“中”、“上”、“下”、“横”、“内”等指示的方向或位置关系的术语是基于附图所示的方向或位置关系,这仅仅是为了便于描述,而不是指示或暗示所述装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性。

此外,还需要说明的是,在本发明的描述中,除非另有明确的规定和限定,术语“设置”、“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域技术人员而言,可根据具体情况理解上述术语在本发明中的具体含义。

需要说明的是,本发明实施例适用于程序研发的代码编译过程。本发明实施例提供的阻止系统函数调用的方法是基于visual studio开发工具设计,本发明还保护基于其他可实现本发明实施例提供的阻止系统函数调用的方法的开发工具。

基于部分已经明确的系统函数阻止其调用的方法,例如对文件操作的系统函数,可通过配置文件来将所有文件操作相关系统函数进行配置,凡是一个函数名称和配置的系统函数名称匹配上了则是系统函数调用。本发明实施例提供的阻止系统函数调用的方法是基于所有系统函数。

图1为本发明阻止系统函数调用的方法实施例的流程图,如图1所示,包括:S101、基于任一系统头文件,建立系统函数存储队列。

基于任一系统头文件,建立系统函数存储队列,是指基于任一系统头文件建立任一系统头文件对应的系统函数名称列表,基于任一系统头文件对应的系统函数名称列表和任一系统头文件建立系统函数存储队列。任一系统头文件,包括有默认配置的系统头文件和增加的系统头文件。对于visual studio开发工具,默认配置的系统头文件是指visualstudio开发工具默认配置的系统头文件。对于系统头文件,任一系统头文件对应有一个或多个系统函数。

进一步地,S101具体包括:获取visual studio开发工具默认配置的任一系统头文件。

Visual Studio,简称VS,是微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等。

进一步地,S101还具体包括:获取默认配置的任一系统头文件对应的所有系统函数。

各系统头文件对应的所有系统函数可通过任一系统头文件直接获取。

进一步地,S101还具体包括:基于系统函数的名称和参数建立任一系统头文件对应的系统函数名称列表。

列表是一种常见的数据结构,用list表示,本发明实施例为每个系统头文件建立一个系统函数名称列表,其上存储有该系统头文件的所有系统函数名称和参数。

进一步地,S101还具体包括:基于所有系统函数名称列表建立系统函数存储队列。

队列是区别于列表的另一种常见的数据结构。本发明实施例将所有系统头文件和对应的系统函数名称列表存储到系统函数存储队列中。系统函数存储队列中包括每一系统头文件和与其一一对应的系统函数名称列表,在系统函数存储结构中通过系统头文件可以查询到对应的系统函数名称列表。

本发明实施例提供的阻止系统函数调用的方法,具有下列有益效果:设置基于系统函数的名称和参数建立任一系统头文件对应的系统函数名称列表,且基于所有系统函数名称列表建立系统函数存储队列,能够有效存储所有系统头文件和所有系统函数名称,便于进行后续的系统函数调用判定以及阻止。

S102、基于任一新增系统头文件更新所述系统函数存储队列,并对所述系统函数存储队列进行排序。

上述实施例中已经描述,任一系统头文件,包括有默认配置的系统头文件和增加的系统头文件。对于新增的系统头文件,本发明实施例也将其与对应的系统函数名称列表存储至系统函数存储队列中,并称之为更新系统函数存储队列。系统函数存储队列中包含有多个系统头文件和对应的系统函数名称列表,本发明实施例会对系统函数存储队列进行排序。

进一步地,S102具体包括:建立新增系统头文件的系统函数名称列表。

建立新增系统头文件的系统函数名称列表的过程和上述实施例描述的建立任一系统头文件对应的系统函数名称列表的过程相同,即获取新增系统头文件对应的所有系统函数,基于系统函数的名称和参数建立新增系统头文件对应的系统函数名称列表。

进一步地,S102还具体包括:将所述新增系统头文件和对应的系统函数名称列表更新到所述系统函数存储队列中,并对应记录更新时间。

本发明实施例记录新增系统头文件和对应的系统函数名称列表存储进系统函数存储队列的时间,该时间为系统时间。

进一步地,S102还具体包括:将所述新增系统头文件的系统函数名称列表按照更新时间降序排列。

按照更新时间降序排列具体是指,将任一时刻新增系统头文件和对应的系统函数名称列表存储到系统函数存储队列的最前。

进一步地,S102还具体包括:所述新增系统头文件的系统函数名称列表的排列由数据存储结构EvictingCacheMap创建,并将所述数据存储结构EvictingCacheMap的所有数据持久化到磁盘中。

由数据存储结构EvictingCacheMap创建的计算机语言具体表示为EvictingCacheMap>,该map数据结构的key值是每一系统头文件的名称,list表示系统函数名称列表,用于存储系统头文件的所有系统函数名称和参数。

EvictingCacheMap存在如下接口:

listget(string headername);此接口则是用于通过系统头文件来获取其对应的系统函数名称列表。

Void set(string headerName,listfunclist);此接口则用于构建系统函数存储结构,将系统头文件和对应的所有系统函数都存储到EvictingCacheMap中。

系统函数存储队列在程序的启动阶段建立。在程序退出时,将系统函数存储结构,即EvictingCacheMap的数据持久化到磁盘中。需要说明的是,持久化是指将瞬时数据转化为持久数据。因此在持久化EvictingCacheMap的数据时,记录了所有的系统头文件和系统函数名称列表,从而程序每次启动只需要检测当前增加的系统头文件是否都在EvictingCacheMap中,若在,则说明EvictingCacheMap的数据最新的,不需要更新,若不在则更新EvictingCacheMap,将增加的系统头文件和对应的系统函数名称列表添加到EvictingCacheMap中。

优选地,对于修改的程序代码文件,记录文件修改的时间,从而程序再次启动时,如果判断文件的最后修改时间记录和上次一致则说明文件没有被修改。

本发明实施例提供的阻止系统函数调用的方法,具有下列有益效果:通过建立系统函数存储队列,能够有效存储所有的系统头文件和系统函数。设置在系统函数存储队列中通过系统头文件可以查询到对应的系统函数名称列表,可以在后续的系统函数查询中提高查询速度,也能够快速的判断调用函数是否是系统函数。通过设置系统函数存储结构建立的排列顺序,能够方便后续的系统函数查询。通过设置系统函数存储结构在程序的启动阶段建立,能够提高后续的系统函数查询速度。通过将系统函数存储队列EvictingCacheMap的所有数据持久化到磁盘中,使得程序下次启动时不需要重新建立。在持久化时,记录所有包含的数据,防止在程序再次启动时增加了新的系统头文件而导致EvictingCacheMap没有进行更新。

S103、基于所述系统函数存储队列创建系统调用检查类。

后续基于调用函数对应的头文件和系统函数存储结构,判断调用的函数是否是系统函数,是在系统调用检查类中完成的。系统调用检查类,计算机语言表述为SystemCallCheck。在系统调用检查类中,通过调用函数对应的头文件在系统函数存储结构中判断是否存在系统函数名称与调用的函数名称相同,若存在,则调用的函数是系统函数,若不存在,则调用的函数不是系统函数。

进一步地,S103具体包括:创建编辑器扩展工程。

为完成本发明实施例中提供的阻止系统函数调用的方法,需要创建编辑器扩展工程,在编辑器扩展工程完成该方法。基于开发工具visual studio创建编辑器扩展工程。创建编辑器扩展工程的过程如下:首先,从开发工具visual studio的文件菜单中选择新建项目,使用VSIX项目模板来创建编辑器扩展工程。需要说明的是,编辑器扩展工程使用编辑器和语言服务扩展功能。其次,在解决方案资源管理器中,选择项目节点然后添加新项,并转到“Visual c#扩展性”节点,并选择“编辑器分类器”。完成上述步骤,即为创建编辑器扩展工程。

进一步地,S103还具体包括:在所述编辑器扩展工程中定义所述系统调用检查类SystemCallCheck。

进一步地,S103还具体包括:在所述系统调用检查类中添加所述编辑器扩展工程的基础组件库和头文件。

在SystemCallCheck中添加编辑器扩展工程的基础组件库和头文件,基础组件库和头文件如下:

using System;

using System.Collections.Generic;

using Microsoft.VisualStudio.Text;

using Microsoft.VisualStudio.Text.Editor;

using Microsoft.VisualStudio.Text.Tagging;

using Microsoft.VisualStudio.Utilities;。

进一步地,S103还具体包括:通过所述基础组件库和头文件,在所述系统调用检查类中继承所述编辑器扩展工程的基础组件库中的文字标记标签基础组件。

基于上述基础组件库和头文件,在编辑器扩展工程中通过SystemCallCheckTagger类继承编辑器扩展工程的基础组件库中的文字标记标签基础组件。计算机语言描述为:

internal class SystemCallCheckTagger:ITagger

ITagger表示编辑器扩展工程的基础组件库中的文字标记标签基础组件,internal class SystemCallCheckTagger表示SystemCallCheckTagger类。

进一步地,S103还具体包括:定义所述系统调用检查类的代码检查成员变量,在所述编辑器扩展工程中定义构造函数,通过所述构造函数将所述编辑器扩展工程的参数赋值于所述代码检查成员变量,完成系统调用检查类的创建。

定义系统调用检查类中定义成员变量,以检查当前开发的全部代码。系统调用检查类的成员变量在本发明实施例中称为代码检查成员变量。系统调用检查类中还通过Dictionarym_systemList;来记录当前所有的系统函数调用代码的位置和系统函数的名称。

定义了成员变量之后,需要在编辑器扩展工程中定义构造函数,以实现将编辑器扩展工程的参数赋值到系统调用检查类中,以及对代码检查成员变量的初始化,完成系统调用检查类的创建,具体通过以下计算机语言实现:

internal SystemCallCheckTagger

(ITextView view,ITextBuffer sourceBuffer){

其中,参数view和sourceBuffer表示编辑器扩展工程将当前工程中此参数传入系统调用检查类中。this.View=view;表示将view参数赋值给代码检查成员变量。this.SourceBuffer=sourceBuffer;表示将sourceBuffer参数赋值给代码检查成员变量。

进一步地,S103还具体包括:所述成员变量包括:当前代码显示页面的控件获取接口、当前代码显示页面的控件的设置接口、当前文本代码的获取接口和当前文本代码的设置接口。

代码检查成员变量包括当前代码显示页面的控件获取接口get、当前代码显示页面的控件的设置接口set,计算机语言表述为:

ITextViewView{get;set;}

代码检查成员变量还包括当前文本代码的获取接口get;和当前文本代码的设置接口set,计算机语言表述为:

ITextBuffer SourceBuffer{get;set;}

本发明实施例提供的阻止系统函数调用的方法,具有下列有益效果:在编辑器扩展工程中通过SystemCallCheckTagger继承编辑器扩展工程的基础组件库中的文字标记标签基础组件,能够实现文本相关的功能,即代码的获取等功能。通过定义系统调用检查类中定义成员变量,能够检查当前开发的全部代码,方便后续的系统函数查询。

S104、通过所述系统调用检查类对当前编译代码进行识别判断。

在创建了系统调用检查类之后,需要对当前编译代码进行识别并判断是否在进行系统函数调用操作。

进一步地,S104具体包括:获取当前编译代码,并识别出是调用函数的编译代码。

本步骤是通过编译器识别出调用函数的编译代码的。

本步骤具体包括:获取当前的光标位置,并选择当前编译代码。

通过监听到的光标改变事件,可获知当前正在编译代码,计算机语言具体表示为:

private void CaretPositionChanged

(object sender,CaretPositionChangedEventArgs e){

在该段计算机语言中,通过参数e获取当前的光标位置。用e.NewPosition表示当前的光标位置。

本步骤还具体包括:提取光标停留位置的完整单词语句。

基于光标停留位置获取当前编译的代码,具体计算机语言的代码如下:

SnapshotPointpoint=

caretPoisition.Point.GetPoint(SourceBuffer,e.NewPosition.Affinity);

上述代码表示获取当前编译的代码的快照信息。e.NewPosition表示当前的光标位置。通过Word.HasValue判断当前光标位置是否有单词,以及当前的光标位置是否是完整的单词。若当前光标位置没有完整单词,则允许继续编码。若当前光标位置有完整单词,则进行:

point.Value>=Word.Value.Start&&point.Value<=Word.Value.End)

上述代码为定位该单词的起始字母和终止字母,Word.Value.Start表示起始字母,Word.Value.End表示终止字母。

通过name=point.Value;获取该单词。

本步骤还具体包括:建立包含调用函数编译语言的单词语句的编译器。

对于获取到的单词,无法直接得知当前对程序的操作是否是函数调用,实际上,该单词可为一个变量名称,或者是表示正在进行函数调用。所以需要判断当前编译的代码是否是函数调用。判断当前操作是否为函数调用,是指当前编译的代码所进行的操作是否是函数调用。本发明实施例通过编译器判断当前操作是否为函数调用,通过编译器预设的单词的匹配关系,查找与该单词相同的单词。

本步骤还具体包括:遍历所述编译器,并将提取到的完整单词语句与所述调用函数编译语言的单词语句进行匹配,将匹配相同的单词语句作为调用函数的编译代码。

基于当前页的全代码来搜索函数调用,计算机语言描述如下:

TextExtent word=

TextStructureNavigator.GetExtentOfWord(point.Value);

其中,TextStructureNavigator表示文本结构导航器。

再定义一个具有查询功能的实例对象findData,计算机语言描述如下:

FindData findData=new FindData(word.GetText(),word.Snapshot);

其中填入该单词的文本和获取到的该单词的快照信息,用word.Snapshot表示预设的单词的匹配关系。

获取匹配的单词,计算机语言描述如下:

findData.FindOptions=FindOptions.WholeWord|FindOptions.MatchCase;

其中,MatcCase表示scale模式的匹配语法。为区分不同的函数,本发明实施例中匹配的单词包括整个单词内容全量匹配和大小写的匹配。

查询所有匹配的单词内容,计算机语言描述如下:

TextSearchService.FindAll(findData);

其中,FindAll(findData)表示找到所有实例。

通过编译器,判断该单词是否与预设的调用函数编译语言的单词的匹配,若匹配,则是函数调用,将匹配相同的单词语句作为调用函数的编译代码,不匹配则不是函数调用。

本发明实施例提供的阻止系统函数调用的方法,具有下列有益效果:通过编译器预设的单词的匹配关系判断当前操作是否为函数调用,可以避免全程序遍历查询判断,提高判断的速度。通过设置具有查询功能的实例对象,可以很方便的获取下一个匹配的单词和上一个匹配的单词。

进一步地,S104还具体包括:获取所述调用函数对应的头文件,并通过所述系统调用检查类识别出调用函数是系统函数。

进一步地,本步骤具体包括:获取并比较所述调用函数和系统函数的编译语言。

获取并比较所述调用函数和系统函数的编译语言是否相同。需要说明的是,本发明实施例中的系统函数使用的计算机语言优选为C语言。已知系统函数使用的计算机语言优选为C语言,调用函数使用的计算机语言可能为C语言或者是C++语言。

进一步地,本步骤还具体包括:若所述调用函数和系统函数的编译语言相同,且所述调用函数未实现自定义的功能,则通过所述系统调用检查类,逐一查找与所述调用函数对应的头文件相同的系统头文件。

当调用函数使用的计算机语言不是C语言而是C++语言,则调用函数不是系统函数,当调用函数使用的计算机语言是C语言时,则无法直接判断调用函数是否是系统函数,需要进一步地判断,具体为判断调用函数是否是已编写的非系统函数,即实现了自定义的功能。已编写的非系统函数包括类的成员函数,类的静态函数,包含命名空间的函数和全局函数等,这些已编写的非系统函数是C语言编写的或者是C++语言编写的。若调用函数是已编写的非系统函数,则调用函数不是系统函数,反之则需通过所述系统调用检查类,逐一查找与所述调用函数对应的头文件相同的系统头文件。优选地,已编写的非系统函数在代码的编译过程中不断更新。

进一步地,本步骤还具体包括:若查找到相同的系统头文件且查找到与所述调用函数对应的名称相同的系统函数,则判定所述调用函数是系统函数。

由上述实施例中可得知,系统函数存储队列中包括系统头文件和对应的系统函数名称列表,在系统函数存储队列中,通过调用函数的头文件以系统头文件的排列前后顺序,逐一查找,判断系统函数存储队列中是否存在系统头文件与调用函数的头文件相同,若不存在则调用函数不是系统函数,若存在,则遍历与调用函数对应的头文件相同的系统头文件对应的系统函数名称列表,判断该系统函数名称列表中是否存在系统函数名称与调用函数对应的名称相同。若不存在则调用函数不是系统函数,若存在,则是系统函数。

在上述实施例中,说明了系统函数存储队列中的数据的排列顺序,即系统头文件和对应的系统函数名称列表的排列顺序。基于该顺序,通过EvictingCacheMap由头部至尾部,即由前至后逐一查找系统头文件,来判断是否存在系统头文件与调用函数对应的头文件相同进行下一步的操作。

本发明实施例提供的阻止系统函数调用的方法,具有下列有益效果:通过先判断调用函数是否是已编写的非系统函数,且已编写的非系统函数数量较少,能够加快查询判断系统函数的过程。

进一步地,S104还具体包括:通过所述系统调用检查类识别出调用函数是系统函数时,修改当前编译代码的调用函数添加下划线标识;和/或在所有系统函数后添加后缀,以使当前编译代码的调用函数在编译时报错,阻止系统函数调用。

进一步地,本步骤中对调用函数添加下划线标识是通过编辑器扩展工程的接口完成的,添加下划线标识表示此处出现语法错误,告知此函数存在不合法的调用,是语法上存在问题的调用,从而使得研发人员发现当前编译的代码存在错误,及时进行修改。基于已标记的所有系统函数的调用位置,对所有系统函数添加后缀,从而在编译时因为函数被修改查找不到原型,产生编译错误,并且编译错误都会记录所有系统函数调用点是非法调用。从而可以告知研发人员所有系统函数调用是无法编译的,阻止调用系统函数。

在一个具体实施例中,对于现有系统函数CreateFile的调用。对其添加后缀成为CreateFile_SystemCallError,在编译时该添加后缀的函数因无法查找到原型而报错,报错的位置是系统函数调用点,原因是系统函数的调用,错误提示记录所有的系统函数调用位置。当编译错误产生时,程序对所有文件编译后,会生成错误列表,列出所有错误的位置,研发人员基于错误列表方便进行修改。在编译事件结束时,将函数修改回CreateFile,从而避免因为修改造成困扰。

本发明实施例提供的阻止系统函数调用的方法,具有下列有益效果:通过设置对调用函数添加下划线标识,能够从代码编写阶段就不断的提醒和告警,从而提高研发效率。通过设置对所有系统函数添加后缀,以使得调用的函数在编译时报错且提供所有的系统函数调用位置,使得研发人员基于每个错误可以非常方便的去修改所有的系统函数调用。

S105、若当前编译代码为调用函数,且所述调用函数为系统函数,阻止系统函数的调用。

通过上述实施例描述可知,通过修改当前编译代码的调用函数添加下划线标识;和/或在所有系统函数后添加后缀,以使当前编译代码的调用函数在编译时报错,阻止系统函数调用。和/或意为至少使用两种方法中的一种。

优选地,阻止系统函数的调用,之后还包括:将与调用函数对应的头文件相同的系统头文件对应的系统函数名称列表,以及与调用函数对应的头文件相同的系统头文件列表排列至系统函数存储队列前面,即key值被访问后可以移动到系统函数存储队列前面,以使得下次判断时优先查询该key值。通过上述实施例中提到的listget(stringheadername)来实现,此接口被访问时,该key值则会排列至系统函数存储队列前面。

优选地,遍历出当前编译的代码页面所有引入的头文件,并将头文件分成2份,一份是系统头文件,另一份是已编写的非系统函数的头文件。本发明实施例优先在系统函数存储队列中查找当前编译的代码页面所对应的系统头文件,若未查找到,则以任一系统头文件的排列的前后顺序,逐一查找系统头文件。

本发明实施例提供的阻止系统函数调用的方法,具有下列有益效果:通过设置以任一系统头文件的排列的前后顺序,逐一查找系统头文件,能够快速查询系统函数。通过设置将与调用函数对应的头文件相同的系统头文件及对应的系统函数名称列表排列至系统函数存储队列前面,能够提高查询效率。

需要说明的是,本发明实施例中的编译的代码是在visual studio开发工具中编译的。本发明实施例提供的阻止系统函数调用的方法是基于visual studio开发工具设计,使得系统函数从最开始被调用时就会阻止拦截。

上面对本发明实施例中设置阻止系统函数调用的方法进行了描述,下面对本发明实施例中的具有阻止系统函数调用功能的装置进行描述。

图2为本发明阻止系统函数调用的装置实施例的模块图,如图2所示,本发明实施例中还提供了一种具有阻止系统函数调用功能的装置的一个实施例,该装置包括:获取模块210、结构模块220、检查模块230、识别模块240和执行模块250。

获取模块210用于获取任一系统头文件,建立系统函数存储队列;结构模块220用于基于任一新增系统头文件更新系统函数存储队列,并对所述系统函数存储队列进行排序;检查模块230用于基于系统函数存储队列创建系统调用检查类;识别模块240用于通过所述系统调用检查类对当前编译代码进行识别判断;执行模块250用于若当前编译代码为调用函数,且所述调用函数为系统函数,执行模块阻止系统函数的调用。

图2从模块化功能实体的角度对本发明实施例中的阻止系统函数调用功能的装置进行了描述,下面从硬件处理的角度对本发明实施例中的阻止系统函数调用功能的装置进行详细描述,图3为本发明实施例提供的具有阻止系统函数调用功能的装置的硬件结构示意图;请参阅图3,本发明实施例中的推荐具有阻止系统函数调用功能的装置300为一个实施例,包括:

输入装置301、输出装置302、处理器303和存储器304(其中处理器303的数量可以一个或多个,图3中以一个处理器303为例)。在本发明的一些实施例中,输入装置301、输出装置302、处理器303和存储器304可通过总线或其它方式连接,其中,图3中以通过总线连接为例。

其中,通过调用存储器304存储的操作指令,处理器303,用于执行如下步骤:

获取任一系统头文件,建立系统函数存储队列;

基于任一新增系统头文件更新所述系统函数存储队列,并对所述系统函数存储队列进行排序;

基于所述系统函数存储队列创建系统调用检查类;

通过所述系统调用检查类对当前编译代码进行识别判断;以及

若当前编译代码为调用函数,且所述调用函数为系统函数,阻止系统函数的调用。

通过调用存储器304存储的操作指令,处理器303,还用于执行图1对应的实施例中的任一方式。

图4为本发明实施例提供的一种可能的电子设备的实施例示意图,如图4所示。

在另一实施例中,本发明还提供了一种电子设备,包括存储器410、处理器420及存储在存储器420上并可在处理器420上运行的计算机程序411,处理器420执行计算机程序411时实现以下步骤。

获取任一系统头文件,建立系统函数存储队列;

基于任一新增系统头文件更新所述系统函数存储队列,并对所述系统函数存储队列进行排序;

基于所述系统函数存储队列创建系统调用检查类;

通过所述系统调用检查类对当前编译代码进行识别判断;以及

若当前编译代码为调用函数,且所述调用函数为系统函数,阻止系统函数的调用。

在具体实施过程中,处理器420执行计算机程序411时,可以实现图1对应的实施例中任一实施方式。

由于本实施例所介绍的电子设备为实施本发明实施例中一种具有阻止系统函数调用功能的装置所采用的设备,故而基于本发明实施例中所介绍的方法,本领域所属技术人员能够了解本实施例的电子设备的具体实施方式以及其各种变化形式,所以在此对于该电子设备如何实现本发明实施例中的方法不再详细介绍,只要本领域所属技术人员实施本发明实施例中的方法所采用的设备,都属于本申请所欲保护的范围。

图5为本发明实施例提供的一种可能的计算机可读存储介质的实施例示意图,请参阅图5。

如图5所示,本实施例提供了一种计算机可读存储介质500,其上存储有计算机程序511,该计算机程序511被处理器执行时实现如下步骤:

获取任一系统头文件,建立系统函数存储队列;

基于任一新增系统头文件更新所述系统函数存储队列,并对所述系统函数存储队列进行排序;

基于所述系统函数存储队列创建系统调用检查类;

通过所述系统调用检查类对当前编译代码进行识别判断;以及

若当前编译代码为调用函数,且所述调用函数为系统函数,阻止系统函数的调用。

在具体实施过程中,该计算机程序511被处理器执行时可以实现图1对应的实施例中任一实施方式。

需要说明的是,在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其它实施例的相关描述。

本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式计算机或者其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

本发明实施例还提供了一种计算机程序产品,该计算机程序产品包括计算机软件指令,当计算机软件指令在处理设备上运行时,使得处理设备执行如图1对应实施例中的阻止系统函数调用的方法中的流程。

所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(digital subscriber line,DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存储的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘(solid state disk,SSD))等。

所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。

所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。

所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。

本发明实施例提供的一种阻止系统函数调用的方法、装置、设备和存储介质,具有下列有益效果:通过系统调用检查类,判断得知当前编译代码的调用函数是系统函数,则阻止其调用,能够快速查询出系统函数的调用并阻止,解决系统函数被误用的问题。

以上所述,以上实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围。

技术分类

06120114733392