CN107506199A - Hook方法、装置以及计算机可读存储介质 - Google Patents
Hook方法、装置以及计算机可读存储介质 Download PDFInfo
- Publication number
- CN107506199A CN107506199A CN201710785564.4A CN201710785564A CN107506199A CN 107506199 A CN107506199 A CN 107506199A CN 201710785564 A CN201710785564 A CN 201710785564A CN 107506199 A CN107506199 A CN 107506199A
- Authority
- CN
- China
- Prior art keywords
- name
- party
- function pointer
- religious
- hook
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/315—Object-oriented languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
- G06F8/31—Programming languages or programming paradigms
- G06F8/313—Logic programming, e.g. PROLOG programming language
- G06F8/3135—Unification or backtracking
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computing Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Telephone Function (AREA)
Abstract
本公开提供一种HOOK方法、装置以及计算机可读存储介质。HOOK方法包括:记录方法交换过程;查找并执行与第一方法名对应的第一函数指针;根据所述方法交换过程查找所述第一函数指针原本对应的第二方法名,判断所述第二方法名是否与所述第一方法名相同;如果所述第二方法名与所述第一方法名不同,查找并执行所述第二方法名对应的第二函数指针。本公开提供的HOOK方法可以避免交换方法时覆盖原有方法,增强了系统的稳健性与开发的条理性。
Description
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种HOOK方法、装置以及计算机可读存储介质。
背景技术
HOOK技术是一种用于改变方法(类中的method)执行结果的技术。在系统开发领域,HOOK技术被广泛应用。
在系统开发中,每个方法名都有对应的函数指针(implementation,IMP),用于实现方法的具体功能。通过修改一个方法名对应的函数指针,可以修改方法的实际执行,进而修改方法。当系统开发人员需要对同一个类的方法进行交换时,只需修改两个方法名对应的函数指针即可实现,这个过程即为HOOK,以下称为方法交换。
然而,在多个团队协作的大项目中,如果多名系统开发人员对同一个类的相同方法进行交换,有可能造成先交换的方法被后交换的方法覆盖的问题,这种覆盖会造成非常严重的功能逻辑紊乱。
因此,需要一种安全稳妥具有条理性的HOOK方法。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本公开的目的在于提供一种HOOK方法与装置,用于至少在一定程度上克服由于相关技术的限制和缺陷而导致的一个或多个问题。
根据本公开实施例的第一方面,提供一种HOOK方法,包括:记录方法交换过程;查找并执行与第一方法名对应的第一函数指针;根据所述方法交换过程查找所述第一函数指针原本对应的第二方法名,判断所述第二方法名是否与所述第一方法名相同;如果所述第二方法名与所述第一方法名不同,查找并执行所述第二方法名对应的第二函数指针。
在本公开的一种示例性实施例中,包括:如果所述第二方法名与所述第一方法名相同,结束流程。
在本公开的一种示例性实施例中,所述记录方法交换过程包括:在修改方法名对应的函数指针时,记录所述函数指针原本对应的方法名。
根据本公开的第二方面,提供一种HOOK装置,包括:交换接口模块,用于记录方法交换过程;函数执行模块,用于查找并执行与第一方法名对应的第一函数指针;原属判断模块,用于根据所述方法交换过程查找所述第一函数指针原本对应的第二方法名,判断所述第二方法名是否与所述第一方法名相同;接续执行模块,用于在所述第二方法名与所述第一方法名不同时查找并执行所述第二方法的函数指针所指向的第二函数。
在本公开的一种示例性实施例中,包括:结束执行模块,用于在所述第二方法名与所述第一方法名相同时结束流程。
在本公开的一种示例性实施例中,所述交换接口模块包括:原属记录单元,用于在修改方法名对应的函数指针时,记录所述函数指针原本对应的方法名。
根据本公开的第三方面,提供一种HOOK装置,包括:存储器;以及耦合到所属存储器的处理器,处理器被配置为基于存储在存储器中的指令,执行如上述任意一项所述的方法。
根据本公开的第四方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任意一项所述的方法步骤。
本公开提供的HOOK方法,通过记录方法交换过程,并在执行完每一函数指针后查找执行该函数指针原本对应的方法名,保证了方法交换后业务流程可以被完整执行,避免了多次交换方法时先交换方法被后交换方法覆盖的危险,确保了业务的正常运行不至于由于方法被覆盖而被中断,提高了系统开发时方法交换的条理性以及系统的稳健性。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示意性示出本公开示例性实施例中HOOK方法的流程图。
图2A~图2D示意性示出本公开示例性实施例中方法交换的示意图。
图3示意性示出本公开示例性实施例中HOOK方法的另一种流程图。
图4示意性示出本公开示例性实施例中HOOK方法的执行过程示意图。
图5示意性示出本公开一个示例性实施例中一种HOOK装置的方框图。
图6示意性示出本公开一个示例性实施例中另一种HOOK装置的方框图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本公开的各方面变得模糊。
此外,附图仅为本公开的示意性图解,图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
下面结合附图对本公开示例实施方式进行详细说明。
图1示意性示出本公开示例性实施例中HOOK方法的流程图。
参考图1,HOOK方法100可以包括:
步骤S102,记录方法交换过程。
步骤S104,查找并执行与第一方法名对应的第一函数指针。
步骤S106,根据所述方法交换过程查找所述第一函数指针原本对应的第二方法名,判断所述第二方法名是否与所述第一方法名相同。
步骤S108,如果所述第二方法名与所述第一方法名不同,查找并执行所述第二方法名对应的第二函数指针。
本公开提供的HOOK方法,通过记录方法交换过程,并在执行完每一函数指针后查找执行该函数指针原本对应的方法,避免了多次交换方法时先交换方法被后交换方法覆盖的危险,提高了系统开发时方法交换的条理性以及系统的稳健性。
下面对HOOK方法100的各步骤进行详细说明。
在步骤S102,记录方法交换过程。
在本公开的一种示例性实施例中,所述记录方法交换过程包括:在修改方法名对应的函数指针时,记录所述函数指针原本对应的方法名。
图2A~图2D示意性示出本公开示例性实施例中方法交换的示意图。
参考图2A,方法交换前,每个方法名对应一个函数指针。
参考图2B,第一次交换后,方法名a对应的函数指针由函数指针a变为函数指针b,方法名b对应的函数指针变为函数指针a。
参考图2C,第二次交换后,方法名a对应的函数指针变为函数指针c,方法名c对应的函数指针变为函数指针b。
参考图2D,第三次交换后,方法名a对应的函数指针变为函数指针d,方法名d对应的函数指针变为函数指针a。
通过记录以上方法交换过程,可以记录下函数指针a原来对应的方法名为方法名a,函数指针b原来对应的方法名为方法名b,函数指针c原来对应的方法名为方法名c,函数指针d原来对应的方法名为方法名d。
在步骤S104,查找并执行与第一方法名对应的第一函数指针。
参考图2D,交换完成后方法名a对应函数指针d,此时函数指针d即为第一方法的具体实现,执行函数指针d。
在步骤S106,根据所述方法交换过程查找所述第一函数指针原本对应的第二方法名,判断所述第二方法名是否与所述第一方法名相同。
继续参考图2D,执行完函数指针d后,函数指针a、b、c所指向的函数如果不被继续执行,则本次方法交换过程覆盖了方法b、c、d现在的功能,这种情况很容易造成业务流程中断。因此,可以根据记录的方法交换过程查找到函数指针d原来对应的方法名,判断其是否与方法名a相同,即判断函数指针d原来对应的方法名是否为方法名a。
在步骤S108,如果所述第二方法名与所述第一方法名不同,查找并执行所述第二方法名对应的第二函数指针。
继续参考图2D,由于函数指针d原来对应的方法名不是方法名a,此时,找到方法名d此时对应的函数指针c,执行函数指针c。
图3示意性示出本公开示例性实施例中HOOK方法的另一种流程图。
参考图3,在步骤S306判断第二方法名与第一方法名相同时,在步骤S310结束流程,避免死循环。
图4示意性示出本公开示例性实施例中HOOK方法的执行过程示意图。
参考图4,在进行如图2A~图2D所示的交换过程后,本方法的执行流程整体为:
步骤1:执行方法名a对应的函数指针d,查找函数指针d原来对应的方法名d,判断方法名d与方法名a不同,进入步骤2;
步骤2:执行方法名d对应的函数指针c,查找函数指针c原来对应的方法名c,判断方法名c与方法名a不同,进入步骤3;
步骤3:执行方法名c对应的函数指针b,查找函数指针b原来对应的方法名b,判断方法名b与方法名a不同,进入步骤4;
步骤4:执行方法名b对应的函数指针a,查找函数指针a原来对应的方法名a,判断方法名a与方法名a相同,结束流程。
以上仅以四个方法为示例进行解释,在实际应用中,当有若干个方法进行交换时,上述过程可以根据实际方法数量延伸或终断。
在一些实施例中,为了防止手动标记执行可能造成的疏忽,可以封装以上执行过程以及记录方法交换过程,生成一个新的中间方法,用于接管执行调用环节,从而自动化管理方法交换过程以及交换后的方法执行过程,增加系统开发条理性,提高系统稳健度。
对应于上述方法实施例,本公开还提供一种HOOK装置,可以用于执行上述方法实施例。
图5示意性示出本公开一个示例性实施例中一种HOOK装置的方框图。参考图5,HOOK装置400可以包括:
交换接口模块502,用于记录方法交换过程。
函数执行模块504,用于查找并执行与第一方法名对应的第一函数指针。
原属判断模块506,用于根据所述方法交换过程查找所述第一函数指针原本对应的第二方法名,判断所述第二方法名是否与所述第一方法名相同。
接续执行模块508,用于在所述第二方法名与所述第一方法名不同时查找并执行所述第二方法的函数指针所指向的第二函数。
在本公开的一种示例性实施例中,包括:
结束执行模块510,用于在所述第二方法名与所述第一方法名相同时结束流程。
在本公开的一种示例性实施例中,所述交换接口模块包括:
原属记录单元5020,用于在修改方法名对应的函数指针时,记录所述函数指针原本对应的方法名。
由于装置500的各功能已在其对应的方法实施例中予以详细说明,本公开于此不再赘述。
根据本公开的一个方面,提供一种HOOK装置,包括:
存储器;以及
耦合到所属存储器的处理器,所述处理器被配置为基于存储在所述存储器中的指令,执行如上述任意一项所述的方法。
该实施例中的装置的处理器执行操作的具体方式已经在有关该HOOK方法的实施例中执行了详细描述,此处将不做详细阐述说明。
图6是根据一示例性实施例示出的一种装置500的框图。装置500可以是智能手机、平板电脑等移动终端。
参照图6,装置600可以包括以下一个或多个组件:处理组件602,存储器604,电源组件606,多媒体组件608,音频组件610,传感器组件614以及通信组件616。
处理组件602通常控制装置600的整体操作,诸如与显示,电话呼叫,数据通信,相机操作以及记录操作相关联的操作等。处理组件602可以包括一个或多个处理器618来执行指令,以完成上述的方法的全部或部分步骤。此外,处理组件602可以包括一个或多个模块,便于处理组件602和其他组件之间的交互。例如,处理组件602可以包括多媒体模块,以方便多媒体组件608和处理组件602之间的交互。
存储器604被配置为存储各种类型的数据以支持在装置600的操作。这些数据的示例包括用于在装置600上操作的任何应用程序或方法的指令。存储器604可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。存储器604中还存储有一个或多个模块,该一个或多个模块被配置成由该一个或多个处理器618执行,以完成上述任一所示方法中的全部或者部分步骤。
电源组件606为装置600的各种组件提供电力。电源组件606可以包括电源管理系统,一个或多个电源,及其他与为装置600生成、管理和分配电力相关联的组件。
多媒体组件608包括在所述装置600和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。
音频组件610被配置为输出和/或输入音频信号。例如,音频组件610包括一个麦克风(MIC),当装置600处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器604或经由通信组件616发送。在一些实施例中,音频组件610还包括一个扬声器,用于输出音频信号。
传感器组件614包括一个或多个传感器,用于为装置600提供各个方面的状态评估。例如,传感器组件614可以检测到装置600的打开/关闭状态,组件的相对定位,传感器组件614还可以检测装置600或装置600一个组件的位置改变以及装置600的温度变化。在一些实施例中,该传感器组件614还可以包括磁传感器,压力传感器或温度传感器。
通信组件616被配置为便于装置600和其他设备之间有线或无线方式的通信。装置600可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件616经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件616还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
在示例性实施例中,装置600可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行上述方法。
在本公开的一种示例性实施例中,还提供了一种计算机可读存储介质,其上存储有程序,该程序被处理器执行时实现如上述任意一项所述的HOOK方法。该计算机可读存储介质例如可以为包括指令的临时性和非临时性计算机可读存储介质。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和构思由权利要求指出。
Claims (8)
1.一种HOOK方法,其特征在于,包括:
记录方法交换过程;
查找并执行与第一方法名对应的第一函数指针;
根据所述方法交换过程查找所述第一函数指针原本对应的第二方法名,判断所述第二方法名是否与所述第一方法名相同;
如果所述第二方法名与所述第一方法名不同,查找并执行所述第二方法名对应的第二函数指针。
2.如权利要求1所述的HOOK方法,其特征在于,包括:
如果所述第二方法名与所述第一方法名相同,结束流程。
3.如权利要求1所述的HOOK方法,其特征在于,所述记录方法交换过程包括:
在修改方法名对应的函数指针时,记录所述函数指针原本对应的方法名。
4.一种HOOK装置,其特征在于,包括:
交换接口模块,用于记录方法交换过程;
函数执行模块,用于查找并执行与第一方法名对应的第一函数指针;
原属判断模块,用于根据所述方法交换过程查找所述第一函数指针原本对应的第二方法名,判断所述第二方法名是否与所述第一方法名相同;
接续执行模块,用于在所述第二方法名与所述第一方法名不同时查找并执行所述第二方法的函数指针所指向的第二函数。
5.如权利要求4所述的HOOK装置,其特征在于,包括:
结束执行模块,用于在所述第二方法名与所述第一方法名相同时结束流程。
6.如权利要求4所述的HOOK装置,其特征在于,所述交换接口模块包括:
原属记录单元,用于在修改方法名对应的函数指针时,记录所述函数指针原本对应的方法名。
7.一种HOOK装置,其特征在于,包括:
存储器;以及
耦合到所属存储器的处理器,处理器被配置为基于存储在存储器中的指令,执行如权利要求1-3任一项所述的方法。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1-3任一项所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710785564.4A CN107506199B (zh) | 2017-09-04 | 2017-09-04 | Hook方法、装置以及计算机可读存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710785564.4A CN107506199B (zh) | 2017-09-04 | 2017-09-04 | Hook方法、装置以及计算机可读存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107506199A true CN107506199A (zh) | 2017-12-22 |
CN107506199B CN107506199B (zh) | 2020-11-20 |
Family
ID=60695748
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710785564.4A Active CN107506199B (zh) | 2017-09-04 | 2017-09-04 | Hook方法、装置以及计算机可读存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107506199B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111125796A (zh) * | 2019-12-26 | 2020-05-08 | 深信服科技股份有限公司 | 对移动存储设备进行保护的方法及装置、设备、存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101169752A (zh) * | 2007-11-26 | 2008-04-30 | 中兴通讯股份有限公司 | 一种捕获导致内存被野指针改写的函数的方法 |
CN106407800A (zh) * | 2016-09-20 | 2017-02-15 | 腾讯科技(深圳)有限公司 | 一种hook的方法及终端设备 |
-
2017
- 2017-09-04 CN CN201710785564.4A patent/CN107506199B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101169752A (zh) * | 2007-11-26 | 2008-04-30 | 中兴通讯股份有限公司 | 一种捕获导致内存被野指针改写的函数的方法 |
CN106407800A (zh) * | 2016-09-20 | 2017-02-15 | 腾讯科技(深圳)有限公司 | 一种hook的方法及终端设备 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111125796A (zh) * | 2019-12-26 | 2020-05-08 | 深信服科技股份有限公司 | 对移动存储设备进行保护的方法及装置、设备、存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN107506199B (zh) | 2020-11-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102069863B1 (ko) | 입력 수단의 결제 기능을 제어하는 전자 장치 및 방법 | |
CN107943439A (zh) | 界面移动方法、装置、智能终端、服务器和操作系统 | |
CN104808501A (zh) | 智能场景删除方法和装置 | |
CN104536935B (zh) | 计算显示方法、计算编辑方法及装置 | |
CN107066172A (zh) | 移动终端的文件传输方法及装置 | |
CN106126685A (zh) | 页面加载方法及装置 | |
CN107239527A (zh) | 网页访问方法及装置 | |
CN105049219B (zh) | 流量订购方法和系统、移动终端及服务器 | |
CN104281478A (zh) | 更新应用程序的方法及装置 | |
CN110168496A (zh) | 用于应用呈现的方法和系统 | |
CN105302572A (zh) | 在软件中导入文件的方法及装置 | |
CN105094830A (zh) | 一种执行目标功能的方法和装置 | |
CN104714826A (zh) | 应用主题的加载方法及装置 | |
CN104063424B (zh) | 网页图片的展现方法和展现装置 | |
CN105183571A (zh) | 函数调用方法和装置 | |
CN107463372A (zh) | 一种数据驱动的页面更新方法和装置 | |
CN110084009A (zh) | 数字解锁方法、装置、存储介质及移动终端 | |
CN107506199A (zh) | Hook方法、装置以及计算机可读存储介质 | |
CN107239236A (zh) | 数据写入方法及装置 | |
CN107402756A (zh) | 用于绘制页面的方法、装置及终端 | |
CN106775410A (zh) | 应用程序启动方法、装置及终端 | |
CN105930266A (zh) | 网页调试方法及装置 | |
CN106559573B (zh) | 移动终端及多媒体数据处理方法 | |
CN115314427A (zh) | 一种协议测试方法、电子设备及芯片系统 | |
CN106993031A (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 |