一种64位视窗操作系统下获取函数参数的方法及系统技术方案

技术编号:2849529 阅读:396 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供了一种64位视窗操作系统下获取函数参数的方法及系统。所述方法包括:生成陷阱函数用于对获取的参数进行处理;修改系统函数入口指令为第一跳转指令指向预置的陷阱函数入口地址;生成桩函数,包括:将系统函数入口将被第一跳转指令覆盖的指令集合复制到确定缓冲区,将其中相对地址操作变换为绝对地址操作,并在所述指令集后添加第二跳转指令指向系统函数中所述第一跳转指令后的第一条指令;在第一应用程序调用系统函数时,陷阱函数通过所述第一跳转指令调用陷阱函数获取参数并进行处理,进而调用桩函数完成系统函数中被覆盖的指令,并通过第二跳转指令返回继续执行系统函数。本发明专利技术获取函数参数的操作保证了程序的正常执行。

【技术实现步骤摘要】

本专利技术涉及基于视窗(WINDOWS)操作系统的函数执行中参数的获取方法,尤其是针对于64位视窗操作系统中函数参数的获取方法。
技术介绍
视窗操作系统提供了一系列的应用程序接口(API)函数,亦称作系统函数,供基于视窗操作系统的应用程序调用,几乎所有的运行于视窗操作系统的应用程序都会调用所述的API。例如进行文字输入操作时,相应的文字处理软件则调用视窗操作系统提供的用于文字输出的API,实现在机器屏幕上进行文字显示。在程序执行过程中,为了完成操作,一个程序通常还需要获取其他正在执行的程序的执行参数。例如即时翻译软件对记事本所打开的文本文件中的某个词进行取词操作,要实现对该词的取词操作,即时翻译软件需要获取输出该词时API调用的相关参数,然而该文本文件中内容的输出是记事本应用程序直接调用视窗操作系统提供的API完成的,其所传递的参数是所述即时翻译软件无法直接从记事本中获取的。因此,某个应用程序要获取其他应用程序中的某个参数,就需要在这些应用程序调用视窗操作系统API时执行截获。现有技术在32位视窗操作系统上实现了上述功能,以应用程序APP2要获取应用程序APP1调用系统函数TextOutA所传递的参数为例说明现有32位系统下的实现方法。在应用程序APP2中设计一个函数,用于处理被拦截的参数,称其为陷阱函数(Trap);图1为地址空间示意图,该图示出了在虚拟地址空间中函数的存储结构,即通过访问函数入口地址实现调用,当APP1调用TextOutA时,修改TextOutA的入口地址所对应的指令,修改其为跳转指令,目的在于跳转到陷阱函数的入口地址,从而执行陷阱函数;由于修改TextOutA函数的入口指令为一条跳转指令,在32位视窗操作系统下,跳转指令一般占有5个字节,从TextOutA函数的入口开始的5个字节的指令条数N的范围是,N>=1且N<=5,这N条指令被跳转指令所取代,导致TextOutA将不能被完整执行,基于这个原因,需要在修改TextOutA函数入口地址之前,就计算出N值,并把这N条指令复制到缓冲区中,并在这N条指令后增加一条跳转指令(用于跳转回TextOutA函数原入口地址开始的第N+1跳指令继续执行),生成桩函数(Stub)。基于上述方法,并参照图2所示的参数获取流程图可知。(1)APP1调用系统函数TextoutA时,(2)陷阱函数将截获APP1发送给系统函数TextoutA的参数,(3)并在对参数进行处理后调用桩函数,依据所述参数执行被复制的所述N条指令,(4)进而通过跳转指令跳转回TextoutA第N+1条指令,继续执行TextOutA,这样不仅获取了APP2传递给TextoutA的参数,并且能保证TextoutA的正常执行。上述过程对于APP1是透明的。上述方法中系统函数入口的前N个指令将被覆盖,由于32位操作系统需要由栈保存/恢复寄存器中的数据,函数入口开始通常为堆栈指令,因此被覆盖/备份的指令一般情况下都是该些堆栈指令而不会涉及地址的操作,该些指令备份到桩函数中执行依然正常。即使在入口指令中出现了涉及地址操作指令,由于32位寻址空间小,因而只需进行简单计算即可获取所述指令所指向的正确位置。然而64位操作系统不使用栈传递数据,函数入口开始的指令就可能有是涉及地址的操作;并且,64位操作系统下,指令所占用字节数增大,使得所备份的指令中包含地址操作指令的可能性相应的增大。因此将现有技术应用于64位操作系统中时将出现大量地址运算的问题,并且,由于64位系统环境下,由于寻址空间很大,因而采用32位系统下简单的计算方法无法得到正确的地址。
技术实现思路
为了解决上述问题,本专利技术的目的是提供一种能够实现在64位视窗操作系统下获取函数参数的方法。为解决上述技术问题,本专利技术的目的是通过以下技术方案实现的一种64位视窗操作系统下获取函数参数的方法,用于获取第一应用程序参数,包括生成陷阱函数用于对获取的参数进行处理;修改系统函数入口指令为第一跳转指令指向预置的陷阱函数入口地址;生成桩函数,包括将系统函数入口将被第一跳转指令覆盖的指令集合复制到确定缓冲区,将其中相对地址操作变换为绝对地址操作,并在所述指令集后添加第二跳转指令指向系统函数中所述第一跳转指令后的第一条指令;在第一应用程序调用系统函数时,陷阱函数通过所述第一跳转指令调用陷阱函数获取参数并进行处理,进而调用桩函数完成系统函数中被覆盖的指令,并通过第二跳转指令返回继续执行系统函数。上述方法基础上,通过查找预置的指令代码表实现相对地址操作指令到绝对地址操作指令的变换。上述方法基础上,通过反汇编计算出第一跳转指令在系统函数中占用地址空间的指令数,进而确定复制到缓冲区的指令集。上述方法基础上,第一应用程序完成系统函数调用后,还包括将桩函数中备份到缓冲区的指令恢复到系统函数中。所述方法中的地址操作包括寻址操作。一种64位视窗系统中获取函数参数的系统,用于在第一应用程序调用确定系统函数单元时获取其参数,包括系统函数单元,入口地址指令为第一跳转指令,指向所述陷阱函数入口地址;陷阱函数单元,对获取的参数进行处理,并在完成操作后调用桩函数单元;桩函数单元,包括系统函数中被第一跳转指令覆盖的指令集,该指令集中包括绝对地址操作的指令;所述指令集后还包括第二跳转指令指向系统函数单元中所述第一跳转指令后的第一个指令地址。其中,所述地址操作包括寻址操作。以上技术方案可以看出,由于本专利技术中将桩函数中指令集中的相对地址操作指令变换为绝对地址操作指令,所述地址指向不随该指令存储地址的改变而改变,进而所述指令集被复制到确定缓冲区后,其中的地址操作指令(寻址操作或地址跳转)仍然可以指向正确的指令地址,保证了系统函数的顺利执行,使得本专利技术获取函数参数的操作不会影响程序的正常执行。附图说明图1为地址空间示意图;图2为函数参数获取原理图;图3为本专利技术中桩函数生成流程图;图4为本专利技术完成参数获取流程图。具体实施例方式本专利技术所涉及64位系统中函数参数的获取方法。所述64位是指CPU通用寄存器(General-Purpose Register,GPRs)的数据宽度(位宽)为64位。64位的处理器可以一次传输和运算64bit即8个字节的数据,相比现行的32位处理器一次只能处理32bit即4个字节的数据,理论上在相同的时钟周期内,64位平台处理的数据量是32位平台处理数据量的两倍;并且,64位处理器的优势还体现在系统对内存的控制上,现行32位处理器的寻址空间最大为4GB,而64位平台的寻址空间的282TB(1TB=1024GB),使得可以进行更大范围的数据计算以及支持更大容量的内存。现行系统中采用相对地址操作的方式。由于程序和函数每次加载到内存后,系统所分配的地址空间都是不同的,即每次程序或函数被加载到内存中的绝对地址都是不同的,因此程序中涉及到地址的寻址或跳转等操作通常都使用相对地址,相对地址是在函数首地址基础上进行的地址偏移;使用相对地址才能保证即使每次加载到内存中的绝对地址不同,寻址指令依然能正常执行。然而,对于使用相对地址的指令来说,将相对地址操作指令备份到桩函数后,由于桩函数的首地址和函数的首地址不同,因此导致在桩函数的首地址基础上进行偏移后的地址,并不是原先函数首地址基础上进行本文档来自技高网
...

【技术保护点】
一种64位视窗操作系统下获取函数参数的方法,用于获取第一应用程序参数,其特征在于:生成陷阱函数用于对获取的参数进行处理;修改系统函数入口指令为第一跳转指令指向预置的陷阱函数入口地址;生成桩函数,包括:将系统函数入口将 被第一跳转指令覆盖的指令集合复制到确定缓冲区,将其中相对地址操作变换为绝对地址操作,并在所述指令集后添加第二跳转指令指向系统函数中所述第一跳转指令后的第一条指令;在第一应用程序调用系统函数时,陷阱函数通过所述第一跳转指令调用陷阱函数 获取参数并进行处理,进而调用桩函数完成系统函数中被覆盖的指令,并通过第二跳转指令返回继续执行系统函数。

【技术特征摘要】
1.一种64位视窗操作系统下获取函数参数的方法,用于获取第一应用程序参数,其特征在于生成陷阱函数用于对获取的参数进行处理;修改系统函数入口指令为第一跳转指令指向预置的陷阱函数入口地址;生成桩函数,包括将系统函数入口将被第一跳转指令覆盖的指令集合复制到确定缓冲区,将其中相对地址操作变换为绝对地址操作,并在所述指令集后添加第二跳转指令指向系统函数中所述第一跳转指令后的第一条指令;在第一应用程序调用系统函数时,陷阱函数通过所述第一跳转指令调用陷阱函数获取参数并进行处理,进而调用桩函数完成系统函数中被覆盖的指令,并通过第二跳转指令返回继续执行系统函数。2.如权利要求1所述的64位视窗操作系统下获取函数参数的方法,其特征在于通过查找预置的指令代码表实现相对地址操作指令到绝对地址操作指令的变换。3.如权利要求1所述的64位视窗操作系统下获取函数参数的方法,其特征在于通过反汇编计算出第一跳转指令在系统函数中占用地址空间...

【专利技术属性】
技术研发人员:朱江
申请(专利权)人:北京金山软件有限公司
类型:发明
国别省市:11[中国|北京]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1