CN110688198A - 系统调用方法、装置和电子设备 - Google Patents
系统调用方法、装置和电子设备 Download PDFInfo
- Publication number
- CN110688198A CN110688198A CN201910908623.1A CN201910908623A CN110688198A CN 110688198 A CN110688198 A CN 110688198A CN 201910908623 A CN201910908623 A CN 201910908623A CN 110688198 A CN110688198 A CN 110688198A
- Authority
- CN
- China
- Prior art keywords
- file
- simulator
- system file
- system call
- call table
- 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
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45579—I/O management, e.g. providing access to device drivers or storage
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/53—Decompilation; Disassembly
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明提供了一种系统调用方法、装置和电子设备,其中,该方法包括:在操作系统上运行模拟器时,加载模拟器的库文件以及预先扫描得到的模拟器的系统调用表;其中,该系统调用表中包括:模拟器中模拟系统调用的系统文件、以及该系统文件的位置信息;从系统调用表中,查找与库文件相关联的目标系统文件;在系统调用表中,将该目标系统文件的位置信息,修改为模拟器对应的执行函数,以通过该执行函数调用目标系统文件。本发明通过修改模拟器的系统调用表,在模拟系统调用系统文件时,以执行函数跳转到需要调用的系统文件,截断了int80指令以及其他软中断指令的产生,提高了系统调用的执行速度,并提高了模拟器的系统调用性能。
Description
技术领域
本发明涉及计算机技术领域,尤其是涉及一种系统调用方法、装置和电子设备。
背景技术
Android X86可以实现在Windows x86系统上运行Android系统,即,基于该Android X86,可以在Windows操作系统上运行Android模拟器。该模拟器在运行过程中,需要通过相关指令实现系统调用。相关技术中,Android X86与Windows x86之间的系统调用,通过int80指令实现;在通过int80指令实现系统调用的过程中,需要使用Windows内核。这种使用Windows内核的方式,易导致通过int80指令实现系统调用时,异常处理的性能较差,进而使得通过int80指令实现上述系统调用的性能较差。
发明内容
有鉴于此,本发明的目的在于提供一种系统调用方法、装置和电子设备,可以提高模拟器的系统调用性能,进而提升用户体验。
第一方面,本发明实施例提供了一种系统调用方法,该方法应用于配置有模拟器的设备,该模拟器用于对该设备的操作系统进行调用,该方法包括:在操作系统上运行模拟器时,加载模拟器的库文件以及预先扫描得到的模拟器的系统调用表;其中,该系统调用表中包括:模拟器中模拟系统调用的系统文件、以及该系统文件的位置信息;从系统调用表中,查找与库文件相关联的目标系统文件;在系统调用表中,将该目标系统文件的位置信息,修改为模拟器对应的执行函数,以通过该执行函数调用目标系统文件。
在本申请较佳的实施例中,上述系统调用表通过下述方式得到:通过二进制搜索和反汇编的方式,扫描模拟系统中包含有预设软中断指令的系统文件,以及该系统文件的位置信息;其中,该预设软中断指令为调用操作系统的指令;该位置信息为偏移位置;将扫描得到的系统文件,以及该系统文件的位置信息写入系统调用表。
在本申请较佳的实施例中,上述通过二进制搜索和反汇编的方式,扫描模拟系统中包含有预设软中断指令的系统文件的步骤,包括:生成包含有objdump命令的脚本文件;通过该脚本文件,对模拟系统进行二进制静态搜索和反汇编处理,得到该模拟系统中包含有预设软中断指令的系统文件。
在本申请较佳的实施例中,如果该模拟系统为Android x86,该系统调用表中的系统文件为包含有int80指令的系统文件;如果该模拟系统为Android x64,该系统调用表中的系统文件为包含有syscall指令的系统文件。
在本申请较佳的实施例中,上述从系统调用表中,查找与库文件相关联的目标系统文件的步骤,包括:从系统调用表中查找库文件的文件名;将系统调用表中,该文件名对应的库中的系统文件,确定为与库文件相关联的目标系统文件。
在本申请较佳的实施例中,上述将目标系统文件的位置信息,修改为模拟器对应的执行函数的步骤,包括:在该操作系统的系统内存中,将目标系统文件对应的位置信息,以patch的方式修改为该模拟系统对应的执行函数。
在本申请较佳的实施例中,上述将该目标系统文件的位置信息,修改为该模拟器对应的执行函数的步骤之后,该方法还包括:在运行该模拟器的过程中,如果需要执行与该模拟器的库文件相关联的系统文件,通过修改后的该执行函数,跳转至该系统文件,以执行该系统文件。
在本申请较佳的实施例中,上述通过修改后的该执行函数,跳转至该系统文件,以执行该系统文件的步骤之后,该方法还包括:通过该执行函数,接收该系统文件的执行结果。
第二方面,本发明实施例还提供了一种系统调用装置,该装置应用于配置有模拟器的设备,该模拟器用于对该设备的操作系统进行调用,该装置包括:库文件及系统调用表加载模块,用于在该操作系统上运行该模拟器时,加载该模拟器的库文件以及预先扫描得到的该模拟器的系统调用表;其中,该系统调用表中包括:该模拟器中模拟系统调用的系统文件、以及该系统文件的位置信息;目标系统文件查找模块,用于从该系统调用表中,查找与该库文件相关联的目标系统文件;位置信息修改模块,用于在该系统调用表中,将该目标系统文件的位置信息,修改为该模拟器对应的执行函数,以通过该执行函数调用该目标系统文件。
第三方面,本发明实施例还提供了一种电子设备,包括处理器和存储器,该存储器存储有能够被该处理器执行的计算机可执行指令,该处理器执行该计算机可执行指令以实现上述系统调用方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令在被处理器调用和执行时,计算机可执行指令促使处理器实现上述系统调用方法。
本发明实施例带来了以下有益效果:
本发明实施例提供的一种系统调用方法、装置和电子设备,在操作系统上运行模拟器时,加载模拟器的库文件以及预先扫描得到的模拟器的系统调用表;其中,该系统调用表中包括:模拟器中模拟系统调用的系统文件、以及该系统文件的位置信息;从系统调用表中,查找与库文件相关联的目标系统文件;在系统调用表中,将该目标系统文件的位置信息,修改为模拟器对应的执行函数,以通过该执行函数调用目标系统文件。该方法通过修改模拟器的系统调用表,在模拟系统调用系统文件时,以执行函数跳转到需要调用的系统文件,截断了int 80指令以及其他软中断指令的产生,使得系统调用的执行速度大幅度提高,从而提高了模拟器的系统调用性能,进而提升用户体验。
本公开的其他特征和优点将在随后的说明书中阐述,或者,部分特征和优点可以从说明书推知或毫无疑义地确定,或者通过实施本公开的上述技术即可得知。
为使本公开的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
为了更清楚地说明本发明具体实施方式或现有技术中的技术方案,下面将对具体实施方式或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种系统调用方法的流程示意图;
图2为本发明实施例提供的另一种系统调用方法的流程示意图;
图3为本发明实施例提供的另一种系统调用方法的流程示意图;
图4为本发明实施例提供的一种系统调用装置的结构示意图;
图5为本发明实施例提供的一种电子设备的结构示意图。
图标:41-库文件及系统调用表加载模块;42-目标系统文件查找模块;43-位置信息修改模块;50-存储器;51-处理器;52-总线;53-通信接口。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合附图对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
考虑到现有模拟器的异常处理性能较差,导致系统调用性能较差的问题,本发明实施例提供了一种系统调用方法、装置和电子设备,该技术可以应用于计算机、手机、平板电脑、游戏设备等可以配置模拟器的设备上。
为便于对本实施例进行理解,首先对本发明实施例所公开的一种系统调用方法进行详细介绍。
如图1所示,其为本发明实施例提供的一种系统调用方法的流程示意图,其中,该方法应用于配置有模拟器的设备,并且该模拟器用于对该设备的操作系统进行调用,由图1可见,该方法包括以下步骤:
步骤S102:在操作系统上运行模拟器时,加载模拟器的库文件以及预先扫描得到的模拟器的系统调用表;其中,该系统调用表中包括:模拟器中模拟系统调用的系统文件、以及该系统文件的位置信息。
这里,模拟器是指在计算机平台上,基于计算机编译的,可模拟执行特定之硬件平台及其程序的软件程序。例如,当我们运行某个PS3模拟器时,这个模拟器便是在电脑上模拟出了PS3的环境,使得原本PS3独占的软件能够在电脑上运行。
模拟器有相应的模拟系统,例如,若模拟器是安卓模拟器,则其对应有安卓模拟系统,因而,它可以在计算机上运行并模拟安卓手机系统,并能安装、使用、卸载安卓应用的软件,让用户在电脑上也能体验安卓游戏和应用。这里,配置模拟器的设备可以是计算机、手机、平板电脑和游戏设备等等。
在实际操作中,当用户需要在配置有模拟器的设备上,使用与该模拟器对应的应用软件时,该模拟器需要调用该设备的操作系统,以实现上述应用软件的运行。这里,操作系统是管理计算机硬件与软件资源的计算机程序,同时也是计算机系统的内核与基石。其中,操作系统通常需要处理如管理与配置内存、决定系统资源供需的优先次序、控制输入设备与输出设备、操作网络与管理文件系统等基本事务。
当在操作系统上运行模拟器时,加载模拟器的库文件,并加载预先扫描得到的模拟器的系统调用表。其中,库文件即是DLL(Dynamic Linkable Library)文件,当执行某一个程序时,与其对应的DLL文件就会被调用。并且,系统调用表包括模拟器中模拟系统调用的系统文件,以及该系统文件的位置信息。这里,系统调用表是一个数组指针表,数组的索引就是系统调用实现的地址。
这里,系统文件是指存放操作系统主要文件的文件夹,一般在安装操作系统过程中自动创建,并将相关文件放在对应的文件夹中,这里面的文件直接影响系统的正常运行,多数都不允许随意改变。其中,系统调用表中的系统文件是该模拟器在运行时实际需要调用的系统文件,通常,系统调用是通过int 80、syscall或sysenter等专用指令进行。另外,上述位置信息是指系统调用发生的具体位置。这样,当运行模拟器时,操作系统可以根据该系统调用表,查找到所需要调用的系统文件,进而实现系统调用。
步骤S104:从系统调用表中,查找与库文件相关联的目标系统文件。
这里,在设备的操作系统上加载了模拟器的库文件以及系统调用表之后,查找系统调用表中与该库文件相关联的系统文件,并确定其为目标系统文件。在系统调用表中,每个系统文件对应有其位置信息,这样,在查找到目标系统文件之后,即可获得该目标系统文件对应的位置信息。
步骤S106:在系统调用表中,将该目标系统文件的位置信息,修改为模拟器对应的执行函数,以通过该执行函数调用目标系统文件。
在查找到目标系统文件之后,根据系统调用表即可获得其对应的位置信息。在本实施例中,将目标系统文件的位置信息修改为模拟器对应的执行函数,这样,当模拟系统在运行时,如果遇到系统调用,则通过该执行函数调用目标系统文件。
相比于现有系统调用技术,由于系统调用需要使用int 80、syscall或sysenter等专用指令进行,其成本比函数调用要高很多,而通过本申请的技术方案,以执行函数取代int 80指令以及其他软中断指令,实现系统文件的调用,大大提高了系统调用的执行速度。
本发明实施例提供的系统调用方法,在操作系统上运行模拟器时,加载模拟器的库文件以及预先扫描得到的模拟器的系统调用表;其中,该系统调用表中包括:模拟器中模拟系统调用的系统文件、以及该系统文件的位置信息;从系统调用表中,查找与库文件相关联的目标系统文件;在系统调用表中,将该目标系统文件的位置信息,修改为模拟器对应的执行函数,以通过该执行函数调用目标系统文件。该方法通过修改模拟器的系统调用表,在模拟系统调用系统文件时,以执行函数跳转到需要调用的系统文件,截断了int 80指令以及其他软中断指令的产生,使得系统调用的执行速度大幅度提高,并有效提高了模拟器的系统调用性能。
在图1所示系统调用方法的基础上,本实施例提供了另一种系统调用方法,该方法应用于配置有模拟器的设备,该模拟器用于对该设备的操作系统进行调用,其中,该方法重点描述了获取上述系统调用表的具体实现过程,如图2所示为该方法的流程示意图,该方法包括以下步骤:
步骤S202:通过二进制搜索和反汇编的方式,扫描模拟系统中包含有预设软中断指令的系统文件,以及该系统文件的位置信息;其中,该预设软中断指令为调用操作系统的指令;该位置信息为偏移位置。
这里,二进制搜索的方式是进行没有格式的内容匹配,例如,在一段数据中搜索“010111110010101”这一串二进制,可直接二进制层面进行匹配搜索。另外,反汇编是把目标代码转为汇编代码的过程,反汇编可以通过反汇编的软件实现,例如OD、IDA Pro、radare2、DEBUG、C32等。并且,软中断指令是由程序设置中断标志后,硬件接着执行中断的相关操作,在本实施例中,该软中断指令为调用操作系统的指令,例如,该软中断指令可以是int80指令、syscall指令和sysenter指令等。
另外,对于不同的模拟系统,通常使用不同的软中断指令。以安卓模拟器的模拟系统为例,Android x86的系统调用使用int 80实现,其中,int 80是一个早已被新的sysenter系列指令淘汰的早期的系统调用的实现方式;Android x64则使用比较先进的syscall系统调用方式。这样,如果该模拟系统为Android x86,则可以将软中断指令预设为int80指令;如果该模拟系统为Android x64,则可以将软中断指令预设为syscall指令。
在其中一种可能的实施方式中,首先生成包含有objdump命令的脚本文件,这里,objdump命令是用查看目标文件或者可执行的目标文件的构成的工具;然后通过该脚本文件,对模拟系统进行二进制静态搜索和反汇编处理,得到该模拟系统中包含有预设软中断指令的系统文件。
这样,通过二进制搜索和反汇编的结合,扫描模拟系统,即可获得包含有预设软中断指令的系统文件,同时获得该系统文件对应的位置信息,在本实施例中,该位置信息为偏移位置。
步骤S204:将扫描得到的系统文件,以及该系统文件的位置信息写入系统调用表。
同样以安卓模拟系统为例,如果该模拟系统为Android x86,则写入该系统调用表中的系统文件为包含有int80指令的系统文件;如果该模拟系统为Android x64,则写入该系统调用表中的系统文件为包含有syscall指令的系统文件。并且,在写入系统文件的同时,也将系统文件对应的位置信息,即其偏移位置,写入系统调用表。
步骤S206:在操作系统上运行模拟器时,加载模拟器的库文件以及上述系统调用表。
对于上述操作系统,它可以是Windows 32或Windows 64系统。当在操作系统上运行模拟器时,加载该模拟器的库文件,并加载上述系统调用表。
步骤S208:从系统调用表中,查找与库文件相关联的目标系统文件。
步骤S210:在系统调用表中,将该目标系统文件的位置信息,修改为模拟器对应的执行函数,以通过该执行函数调用目标系统文件。
在其中一种可能的实施方式中,该执行函数包括trampline汇编代码,这里,trampline汇编代码是指为达到目标逻辑所添加的一小段汇编代码。
本实施例提供的系统调用方法,提供了获取系统调用表的实现方案,通过二进制搜索和反汇编的方式,获取模拟系统中包含系统调用指令的系统文件,以及对应的位置信息,进而得到该模拟器的系统调用表。该系统调用方法在调用系统文件时,截断了int 80指令以及其他软中断指令的产生,而以执行函数跳转到需要调用的系统文件,提高了系统调用的执行速度,并提高了模拟器的系统调用性能。
本实施例提供了另一种系统调用方法,该方法在图1所示系统调用方法的基础上实现,该方法重点描述了上述将目标系统文件的位置信息,修改为模拟器对应的执行函数的具体实现过程,如图3所示,其为该方法的流程示意图,由图3可知,该方法包括以下步骤:
步骤S302:在操作系统上运行模拟器时,加载模拟器的库文件以及预先扫描得到的模拟器的系统调用表;其中,该系统调用表中包括:模拟器中模拟系统调用的系统文件、以及该系统文件的位置信息。
步骤S304:从系统调用表中,查找与库文件相关联的目标系统文件。
在其中一种可能的实施方式中,可以从系统调用表中查找库文件的文件名;然后将系统调用表中与该文件名对应的库中的系统文件,确定为与库文件相关联的目标系统文件。
步骤S306:在该操作系统的系统内存中,将目标系统文件对应的位置信息,以patch的方式修改为该模拟系统对应的执行函数。
在操作系统的系统内存中,找到目标系统文件对应的位置,并将其patch成一个直达系统调用实现的执行函数。这里,不改变目标系统文件的内容,只是在内存中对所有的系统调用发生的位置进行patch修改,这样,在Android APP运行的过程中,当遇到系统调用时,是已经被patch过的代码,就不会产生int 80中断,而是直接执行patch代码。
并且,无论系统调用是int 80还是syscall,都可以通过patch的方式,将系统调用修改为函数调用。
步骤S308:在运行该模拟器的过程中,如果需要执行与该模拟器的库文件相关联的系统文件,通过修改后的该执行函数,跳转至该系统文件,以执行该系统文件。
也即,在运行模拟器的过程中,如果需要调用系统文件,则通过上述执行函数跳转到对应的系统文件,并执行该系统文件。在另一种可能的实施方式中,在执行系统文件之后,还通过该执行函数,接收该系统文件的执行结果。例如,如果该系统文件执行成功,则通过该执行函数返回“execution succeed”,否则返回“Execution failed”。
这样,本发明实施例提供的系统调用方法,通过patch的方式截断了int80指令及其他软中断指令的产生,缓解了通过int80指令实现系统调用时,异常处理的性能较差的技术问题,提高了系统调用的执行速度以及系统调用的性能。
为了更清楚理解上述实施例中所提供的系统调用方法,本实施例介绍了一个应用实例,其为网易MuMu模拟器Nebula新引擎的系统调用实现方式。该方法的具体流程如下:
(1)通过objdump命令组成的脚本,静态搜索整个Android ROM中系统调用发生的地方,并生成一个全局的系统调用表。
(2)在Nebula主程序中加载上述系统调用表。
(3)在Nebula的执行内存中建立一系列称作trampline的汇编代码段,用来模拟系统调用的入口和出口。
(4)当加载ELF(Executable and Linkable Format,可执行与可链接格式)二进制时,对该二进制的内容按照上述系统调用表进行patch,此后整个系统调用不再发生。
这样,所有的Android ROM的系统调用场景,都修改成了直接向trampline程序跳转的逻辑。因此,在Android APP运行的过程中,当遇到系统调用时,读取的是被patch过的代码,就不会产生int 80中断,而是直接执行patch代码。实际测试显示,使用该系统调用方法的操作系统,单个系统调用的速度可以提高三到十倍。
不同于腾讯手游助手Aow引擎方案,Aow引擎方案在内核模块实现int80的模拟调用服务,该方案尚存在以下不足:
(1)程序难调试;
(2)程序异常会导致系统蓝屏;
(3)int 80异常处理的性能很差;
(4)无法直接支持x64的syscall方式。
而Nebula新引擎没有内核模块,为全用户空间,因而不存在蓝屏问题,调试也非常简单轻量。并且,在调用系统文件时,Nebula新引擎通过patch的方式截断了int 80指令以及其他软中断指令(例如syscall)的产生,而以执行函数跳转到需要调用的系统文件,这种patch方式可适用于x86以及x64的系统调用,缓解了x64的系统调用无法直接处理的业内难题。
通过该系统调用方法,将昂贵的异常处理或者系统调用,替换为一个简单的jmp指令,这不但是一个巨大的性能节约,而且也大幅提高了系统调用的执行速度,并提高了模拟器的系统调用性能。
对应于上述实施例中的系统调用方法,本发明实施例还提供了一种系统调用装置,其中,该装置应用于配置有模拟器的设备,该模拟器用于对该设备的操作系统进行调用。如图4所示,为该装置的结构示意图,由图4可见,该装置包括依次连接的库文件及系统调用表加载模块41、目标系统文件查找模块42和位置信息修改模块43,其中,各个模块的功能如下:
库文件及系统调用表加载模块41,用于在该操作系统上运行该模拟器时,加载该模拟器的库文件以及预先扫描得到的该模拟器的系统调用表;其中,该系统调用表中包括:该模拟器中模拟系统调用的系统文件、以及该系统文件的位置信息;
目标系统文件查找模块42,用于从该系统调用表中,查找与该库文件相关联的目标系统文件;
位置信息修改模块43,用于在该系统调用表中,将该目标系统文件的位置信息,修改为该模拟器对应的执行函数,以通过该执行函数调用该目标系统文件。
上述系统调用装置,在操作系统上运行模拟器时,加载模拟器的库文件以及预先扫描得到的模拟器的系统调用表;其中,该系统调用表中包括:模拟器中模拟系统调用的系统文件、以及该系统文件的位置信息;从系统调用表中,查找与库文件相关联的目标系统文件;在系统调用表中,将该目标系统文件的位置信息,修改为模拟器对应的执行函数,以通过该执行函数调用目标系统文件。该装置通过修改模拟器的系统调用表,在模拟系统调用系统文件时,以执行函数跳转到需要调用的系统文件,截断了int 80指令以及其他软中断指令的产生,使得系统调用的执行速度大幅度提高,从而提高了模拟器的系统调用性能,进而提升用户体验。
在其中一种可能的实施方式中,上述库文件及系统调用表加载模块41还用于:通过二进制搜索和反汇编的方式,扫描模拟系统中包含有预设软中断指令的系统文件,以及该系统文件的位置信息;其中,该预设软中断指令为调用操作系统的指令;该位置信息为偏移位置;将扫描得到的系统文件,以及该系统文件的位置信息写入系统调用表。
在另一种可能的实施方式中,上述库文件及系统调用表加载模块41还用于:生成包含有objdump命令的脚本文件;通过该脚本文件,对模拟系统进行二进制静态搜索和反汇编处理,得到该模拟系统中包含有预设软中断指令的系统文件。
在另一种可能的实施方式中,如果上述模拟系统为Android x86,该系统调用表中的系统文件为包含有int80指令的系统文件;如果该模拟系统为Android x64,该系统调用表中的系统文件为包含有syscall指令的系统文件。
在另一种可能的实施方式中,上述目标系统文件查找模块42还用于:从系统调用表中查找库文件的文件名;将系统调用表中,该文件名对应的库中的系统文件,确定为与库文件相关联的目标系统文件。
在另一种可能的实施方式中,上述位置信息修改模块43还用于:在该操作系统的系统内存中,将目标系统文件对应的位置信息,以patch的方式修改为该模拟系统对应的执行函数。
在另一种可能的实施方式中,上述系统调用装置还包括跳转模块,用于在运行该模拟器的过程中,如果需要执行与该模拟器的库文件相关联的系统文件,通过修改后的该执行函数,跳转至该系统文件,以执行该系统文件。
在另一种可能的实施方式中,上述系统调用装置还包括执行结果接收模块,用于通过该执行函数,接收该系统文件的执行结果。
在另一种可能的实施方式中,上述执行函数包括trampline汇编代码。
在另一种可能的实施方式中,上述操作系统包括Windows 32或Windows 64系统。
本申请实施例提供的系统调用装置,其实现原理及产生的技术效果和前述系统调用方法实施例相同,为简要描述,系统调用装置的实施例部分未提及之处,可参考前述系统调用方法实施例中相应内容。
本申请实施例还提供了一种电子设备,如图5所示,为该电子设备的结构示意图,其中,该电子设备包括处理器51和存储器50,该存储器50存储有能够被该处理器51执行的计算机可执行指令,该处理器51执行该计算机可执行指令以实现上述系统调用方法。
在图5示出的实施方式中,该电子设备还包括总线52和通信接口53,其中,处理器51、通信接口53和存储器50通过总线52连接。
其中,存储器50可能包含高速随机存取存储器(RAM,Random Access Memory),也可能还包括非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。通过至少一个通信接口53(可以是有线或者无线)实现该系统网元与至少一个其他网元之间的通信连接,可以使用互联网,广域网,本地网,城域网等。总线52可以是ISA总线、PCI总线或EISA总线等。所述总线52可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
处理器51可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器51中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器51可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital SignalProcessor,简称DSP)、专用集成电路(Application Specific Integrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器51读取存储器中的信息,结合其硬件完成前述实施例的系统调用方法的步骤。
本申请实施例还提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机可执行指令,该计算机可执行指令在被处理器调用和执行时,该计算机可执行指令促使处理器实现上述系统调用方法,具体实现可参见前述方法实施例,在此不再赘述。
本申请实施例所提供的系统调用方法、系统调用装置和电子设备的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的系统调用方法,具体实现可参见方法实施例,在此不再赘述。
除非另外具体说明,否则在这些实施例中阐述的部件和步骤的相对步骤、数字表达式和数值并不限制本申请的范围。
所述功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个处理器可执行的非易失的计算机可读取存储介质中。基于这样的理解,本申请的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本申请各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上所述实施例,仅为本申请的具体实施方式,用以说明本申请的技术方案,而非对其限制,本申请的保护范围并不局限于此,尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,其依然可以对前述实施例所记载的技术方案进行修改或可轻易想到变化,或者对其中部分技术特征进行等同替换;而这些修改、变化或者替换,并不使相应技术方案的本质脱离本申请实施例技术方案的精神和范围,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。
Claims (11)
1.一种系统调用方法,其特征在于,所述方法应用于配置有模拟器的设备,所述模拟器用于对所述设备的操作系统进行调用,所述方法包括:
在所述操作系统上运行所述模拟器时,加载所述模拟器的库文件以及预先扫描得到的所述模拟器的系统调用表;其中,所述系统调用表中包括:所述模拟器中模拟系统调用的系统文件、以及所述系统文件的位置信息;
从所述系统调用表中,查找与所述库文件相关联的目标系统文件;
在所述系统调用表中,将所述目标系统文件的位置信息,修改为所述模拟器对应的执行函数,以通过所述执行函数调用所述目标系统文件。
2.根据权利要求1所述的方法,其特征在于,所述系统调用表通过下述方式得到:
通过二进制搜索和反汇编的方式,扫描所述模拟系统中包含有预设软中断指令的系统文件,以及所述系统文件的位置信息;其中,所述预设软中断指令为调用所述操作系统的指令;所述位置信息为偏移位置;
将扫描得到的系统文件,以及所述系统文件的位置信息写入系统调用表。
3.根据权利要求2所述的方法,其特征在于,通过二进制搜索和反汇编的方式,扫描所述模拟系统中包含有预设软中断指令的系统文件的步骤,包括:
生成包含有objdump命令的脚本文件;
通过所述脚本文件,对所述模拟系统进行二进制静态搜索和反汇编处理,得到所述模拟系统中包含有预设软中断指令的系统文件。
4.根据权利要求1所述的方法,其特征在于,
如果所述模拟系统为Android x86,所述系统调用表中的系统文件为包含有int80指令的系统文件;
如果所述模拟系统为Android x64,所述系统调用表中的系统文件为包含有syscall指令的系统文件。
5.根据权利要求1所述的方法,其特征在于,从所述系统调用表中,查找与所述库文件相关联的目标系统文件的步骤,包括:
从所述系统调用表中查找所述库文件的文件名;
将所述系统调用表中,所述文件名对应的库中的系统文件,确定为与所述库文件相关联的目标系统文件。
6.根据权利要求1所述的方法,其特征在于,将所述目标系统文件的位置信息,修改为所述模拟器对应的执行函数的步骤,包括:
在所述操作系统的系统内存中,将所述目标系统文件对应的位置信息,以patch的方式修改为所述模拟系统对应的执行函数。
7.根据权利要求1所述的方法,其特征在于,将所述目标系统文件的位置信息,修改为所述模拟器对应的执行函数的步骤之后,所述方法还包括:
在运行所述模拟器的过程中,如果需要执行与所述模拟器的库文件相关联的系统文件,通过修改后的所述执行函数,跳转至所述系统文件,以执行所述系统文件。
8.根据权利要求7所述的方法,其特征在于,通过修改后的所述执行函数,跳转至所述系统文件,以执行所述系统文件的步骤之后,所述方法还包括:
通过所述执行函数,接收所述系统文件的执行结果。
9.一种系统调用装置,其特征在于,所述装置应用于配置有模拟器的设备,所述模拟器用于对所述设备的操作系统进行调用,所述装置包括:
库文件及系统调用表加载模块,用于在所述操作系统上运行所述模拟器时,加载所述模拟器的库文件以及预先扫描得到的所述模拟器的系统调用表;其中,所述系统调用表中包括:所述模拟器中模拟系统调用的系统文件、以及所述系统文件的位置信息;
目标系统文件查找模块,用于从所述系统调用表中,查找与所述库文件相关联的目标系统文件;
位置信息修改模块,用于在所述系统调用表中,将所述目标系统文件的位置信息,修改为所述模拟器对应的执行函数,以通过所述执行函数调用所述目标系统文件。
10.一种电子设备,其特征在于,包括处理器和存储器,所述存储器存储有能够被所述处理器执行的计算机可执行指令,所述处理器执行所述计算机可执行指令以实现权利要求1至8任一项所述的系统调用方法。
11.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令在被处理器调用和执行时,计算机可执行指令促使处理器实现权利要求1至8任一项所述的系统调用方法。
Priority Applications (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910908623.1A CN110688198B (zh) | 2019-09-24 | 2019-09-24 | 系统调用方法、装置和电子设备 |
PCT/CN2019/123327 WO2021056823A1 (zh) | 2019-09-24 | 2019-12-05 | 系统调用方法、装置和电子设备 |
US16/975,405 US12073235B2 (en) | 2019-09-24 | 2019-12-05 | System call method and apparatus, and electronic device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910908623.1A CN110688198B (zh) | 2019-09-24 | 2019-09-24 | 系统调用方法、装置和电子设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110688198A true CN110688198A (zh) | 2020-01-14 |
CN110688198B CN110688198B (zh) | 2021-03-02 |
Family
ID=69110559
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910908623.1A Active CN110688198B (zh) | 2019-09-24 | 2019-09-24 | 系统调用方法、装置和电子设备 |
Country Status (3)
Country | Link |
---|---|
US (1) | US12073235B2 (zh) |
CN (1) | CN110688198B (zh) |
WO (1) | WO2021056823A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112379968A (zh) * | 2020-11-13 | 2021-02-19 | 网易(杭州)网络有限公司 | 应用多开的方法、装置、设备及存储介质 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113282541B (zh) * | 2021-06-04 | 2023-08-11 | 网易(杭州)网络有限公司 | 文件调用方法、装置和电子设备 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102902928A (zh) * | 2012-09-21 | 2013-01-30 | 杭州迪普科技有限公司 | 一种网页防篡改方法及装置 |
CN103793651A (zh) * | 2014-02-22 | 2014-05-14 | 西安电子科技大学 | 基于Xen虚拟化的内核完整性检测方法 |
CN104216726A (zh) * | 2013-06-04 | 2014-12-17 | 腾讯科技(深圳)有限公司 | Android虚拟机加载方法及装置 |
CN106445630A (zh) * | 2016-08-10 | 2017-02-22 | 北京奇虎科技有限公司 | Android模拟器及实现Android模拟器的方法 |
CN106959859A (zh) * | 2017-03-30 | 2017-07-18 | 北京奇虎科技有限公司 | 系统调用函数的调用方法与装置 |
CN108170503A (zh) * | 2018-01-24 | 2018-06-15 | 腾讯科技(深圳)有限公司 | 一种跨系统运行安卓应用的方法、终端及存储介质 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6988264B2 (en) | 2002-03-18 | 2006-01-17 | International Business Machines Corporation | Debugging multiple threads or processes |
US8589140B1 (en) | 2005-06-10 | 2013-11-19 | Wapp Tech Corp. | System and method for emulating and profiling a frame-based application playing on a mobile device |
US8423749B2 (en) * | 2008-10-22 | 2013-04-16 | International Business Machines Corporation | Sequential processing in network on chip nodes by threads generating message containing payload and pointer for nanokernel to access algorithm to be executed on payload in another node |
CN101866408B (zh) * | 2010-06-30 | 2011-11-30 | 华中科技大学 | 一种基于虚拟机架构的透明信任链构建系统 |
CN102591696A (zh) | 2011-01-14 | 2012-07-18 | 中国科学院软件研究所 | 一种手机软件行为数据提取方法及系统 |
US8959577B2 (en) * | 2012-04-13 | 2015-02-17 | Cisco Technology, Inc. | Automatic curation and modification of virtualized computer programs |
US9436746B2 (en) * | 2014-01-20 | 2016-09-06 | Sap Se | Next generation architecture for database connectivity |
CN106537333A (zh) * | 2014-06-13 | 2017-03-22 | 查尔斯斯塔克德拉珀实验室公司 | 用于软件产物的数据库的系统和方法 |
US10445112B2 (en) * | 2017-01-27 | 2019-10-15 | Software Ag | Inline dispatching function interface (IDFI), and associated system and/or method |
US11055401B2 (en) * | 2017-09-29 | 2021-07-06 | Intel Corporation | Technologies for untrusted code execution with processor sandbox support |
CN107797820B (zh) * | 2017-11-13 | 2021-03-23 | 北京百度网讯科技有限公司 | 用于生成补丁的方法和装置 |
US10990371B2 (en) * | 2018-01-17 | 2021-04-27 | Crowdstrike, Inc. | Device driver non-volatile backing-store installation |
-
2019
- 2019-09-24 CN CN201910908623.1A patent/CN110688198B/zh active Active
- 2019-12-05 US US16/975,405 patent/US12073235B2/en active Active
- 2019-12-05 WO PCT/CN2019/123327 patent/WO2021056823A1/zh active Application Filing
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102902928A (zh) * | 2012-09-21 | 2013-01-30 | 杭州迪普科技有限公司 | 一种网页防篡改方法及装置 |
CN104216726A (zh) * | 2013-06-04 | 2014-12-17 | 腾讯科技(深圳)有限公司 | Android虚拟机加载方法及装置 |
CN103793651A (zh) * | 2014-02-22 | 2014-05-14 | 西安电子科技大学 | 基于Xen虚拟化的内核完整性检测方法 |
CN106445630A (zh) * | 2016-08-10 | 2017-02-22 | 北京奇虎科技有限公司 | Android模拟器及实现Android模拟器的方法 |
CN106959859A (zh) * | 2017-03-30 | 2017-07-18 | 北京奇虎科技有限公司 | 系统调用函数的调用方法与装置 |
CN108170503A (zh) * | 2018-01-24 | 2018-06-15 | 腾讯科技(深圳)有限公司 | 一种跨系统运行安卓应用的方法、终端及存储介质 |
Non-Patent Citations (2)
Title |
---|
LINUX知识积累: "Linux内核--hook系统调用", 《HTTPS://BLOG.CSDN.NET/T146LLA128XX0X/ARTICLE/DETAILS/79102775》 * |
郑瀚ANDREW HANN: "Linux System Calls Hooking Method Summary", 《HTTPS://WWW.CNBLOGS.COM/LITTLEHANN/P/3854977.HTML?UTM_SOURCE=TUICOOL&UTM_MEDIUM=REFERRAL#_LAB2_3_2》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112379968A (zh) * | 2020-11-13 | 2021-02-19 | 网易(杭州)网络有限公司 | 应用多开的方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN110688198B (zh) | 2021-03-02 |
WO2021056823A1 (zh) | 2021-04-01 |
US20230103210A1 (en) | 2023-03-30 |
US12073235B2 (en) | 2024-08-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109408393B (zh) | 应用测试方法、装置及设备和计算机可读存储介质 | |
CN105468529A (zh) | 一种安卓应用ui控件精准遍历方法和装置 | |
CN101937356B (zh) | 一种编译WebKit浏览器的方法及装置 | |
CN110688198B (zh) | 系统调用方法、装置和电子设备 | |
CN110908677B (zh) | 一种Flutter应用安装包体积优化的方法及存储介质 | |
CN111399840A (zh) | 一种模块开发方法及装置 | |
CN115686631B (zh) | 一种基于知识基的随机指令生成方法、装置及存储介质 | |
CN108108169B (zh) | 一种基于Jenkins的多分支的构建方法及系统 | |
CN114356779A (zh) | 编程语言调试方法、装置及终端设备 | |
CN112698867A (zh) | 注解信息的动态修改方法、装置、电子设备及介质 | |
CN111385661B (zh) | 语音控制全屏播放的方法、装置、终端及存储介质 | |
CN114840427A (zh) | 一种代码测试、测试用例生成的方法及装置 | |
CN110825489A (zh) | 安卓模拟器的应用方法、装置和终端设备 | |
CN109284222B (zh) | 软件单元、数据处理系统中的项目测试方法、装置及设备 | |
CN110688320B (zh) | 全局变量的检测方法、装置及终端设备 | |
CN110765008A (zh) | 一种数据处理方法及装置 | |
US10838748B2 (en) | System and method of emulating execution of files based on emulation time | |
CN111242731B (zh) | 一种业务执行的方法及装置 | |
CN110633210A (zh) | 文件执行方法、装置、存储介质和电子设备 | |
CN111158996B (zh) | 一种信息处理方法、装置和计算机可读存储介质 | |
CN112162776B (zh) | 依赖关系获取方法及装置 | |
EP3444737B1 (en) | System and method of emulating execution of files | |
CN112579126A (zh) | 软件开发平台及软件开发方法 | |
CN115705289A (zh) | 测试方法、Mock框架、用户设备、服务设备和存储介质 | |
CN116991735A (zh) | 前端组件变更的测试系统、方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | 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 |