CN108932263B - 一种关联对象追踪方法及装置 - Google Patents
一种关联对象追踪方法及装置 Download PDFInfo
- Publication number
- CN108932263B CN108932263B CN201710383370.1A CN201710383370A CN108932263B CN 108932263 B CN108932263 B CN 108932263B CN 201710383370 A CN201710383370 A CN 201710383370A CN 108932263 B CN108932263 B CN 108932263B
- Authority
- CN
- China
- Prior art keywords
- current
- associated object
- temporary
- current object
- strong reference
- 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.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 29
- 230000006870 function Effects 0.000 claims abstract description 58
- 238000013507 mapping Methods 0.000 claims abstract description 14
- 238000012986 modification Methods 0.000 claims description 3
- 230000004048 modification Effects 0.000 claims description 3
- 238000004891 communication Methods 0.000 description 4
- 238000010586 diagram Methods 0.000 description 4
- 238000004590 computer program Methods 0.000 description 3
- 230000002159 abnormal effect Effects 0.000 description 1
- 230000005540 biological transmission Effects 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000000835 fiber Substances 0.000 description 1
- 230000009191 jumping Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000011664 signaling Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30069—Instruction skipping instructions, e.g. SKIP
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Telephonic Communication Services (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明实施例公开了一种关联对象追踪方法,包括:调用开源工具动态修改操作系统底层中用于实现关联对象的多个入口函数;获取当前对象,并在当前对象中加入强引用标识符;通过多个入口函数创建当前对象所对应的临时关联对象;从预设的关联对象映射表中查找与临时关联对象对应的键值,确定键值是否存在于用于存储关联对象的哈希存储表中;若存在,则确定当前对象中的强引用标识符是否传入临时关联对象中;若确定当前对象中的强引用标识符传入临时关联对象中,则确定临时关联对象为当前对象的强引用关联对象。本发明实施例还公开了一种关联对象追踪装置。采用本发明实施例,可以提高查询关联对象的效率,以及提高获取关联对象的准确性。
Description
技术领域
本发明涉及电子技术领域,尤其涉及一种关联对象追踪方法及装置。
背景技术
在移动设备操作系统iOS中,Object-C是一套面向对象的语言,具备面向对象的语言特性(封装、继承和多态),同时也具备静态语言的特性,又有动态特性(动态类型、动态绑定和动态加载)。为了提高使用Object-C语言编程效率,需要查询对象所对应的关联对象、并分析对象的引用关系属性。但是,现有技术采用的人工查询并分析对象关联的属性,导致效率低下,而且并不能准确地获取到强引用的关联对象。
发明内容
本发明实施例提供一种关联对象追踪方法及装置。可以提高查询关联对象的效率,以及提高获取关联对象的准确性。
本发明第一方面提供了一种关联对象追踪方法,包括:
调用开源工具动态修改操作系统底层中用于实现关联对象的多个入口函数;
获取当前对象,并在所述当前对象中加入强引用标识符;
通过所述多个入口函数创建所述当前对象所对应的临时关联对象;
从预设的关联对象映射表中查找与所述临时关联对象对应的键值,确定所述键值是否存在于用于存储关联对象的哈希存储表中;
若存在,则确定所述当前对象中的所述强引用标识符是否传入所述临时关联对象中;
若确定所述当前对象中的所述强引用标识符传入所述临时关联对象中,则确定所述临时关联对象为所述当前对象的强引用关联对象。
其中,所述通过所述多个入口函数创建所述当前对象所对应的临时关联对象之前,还包括:
确定所述当前对象是否存在关联对象。
其中,所述确定所述当前对象是否存在关联对象包括:
获取所述当前对象的结构体指针,并在所述结构体指针中查找目标变量的值;
根据所述目标变量的值,确定所述当前对象是否存在关联对象。
其中,所述通过所述多个入口函数创建所述当前对象所对应的临时关联对象包括:
获取所述当前对象所对应的关联对象值;
判断所述关联对象值是否为空;
若所述关联对象值不为空,则通过所述多个入口函数创建所述当前对象所对应的临时关联对象。
其中,所述获取当前对象包括:
获取所有对象,并将所述所有对象加入对象消息栈;
对所述对象消息栈中的所有对象进行出栈,获取所述当前对象。
其中,所述调用开源工具动态修改操作系统底层中用于实现关联对象的多个入口函数之前,还包括:
获取所述操作系统底层的符号表系统,所述符号表系统包括所述所有对象。
相应地,本发明第二方面提供了一种关联对象追踪装置,包括:
函数修改模块,用于调用开源工具动态修改操作系统底层中用于实现关联对象的多个入口函数;
对象获取模块,用于获取当前对象,并在所述当前对象中加入强引用标识符;
对象创建模块,用于通过所述多个入口函数创建所述当前对象所对应的临时关联对象;
对象确定模块,用于从预设的关联对象映射表中查找与所述临时关联对象对应的键值,确定所述键值是否存在于用于存储关联对象的哈希存储表中;
标识确定模块,用于若存在,则确定所述当前对象中的所述强引用标识符是否传入所述临时关联对象中;
关联确定模块,用于若确定所述当前对象中的所述强引用标识符传入所述临时关联对象中,则确定所述临时关联对象为所述当前对象的强引用关联对象。
其中,
所述对象确定模块,还用于确定所述当前对象是否存在关联对象。
其中,所述对象确定模块具体用于:
获取所述当前对象的结构体指针,并在所述结构体指针中查找目标变量的值;
根据所述目标变量的值,确定所述当前对象是否存在关联对象。
其中,所述对象创建模块具体用于:
获取所述当前对象所对应的关联对象值;
判断所述关联对象值是否为空;
若所述关联对象值不为空,则通过所述多个入口函数创建所述当前对象所对应的临时关联对象。
其中,所述对象获取模块具体用于:
获取所有对象,并将所述所有对象加入对象消息栈;
对所述对象消息栈中的所有对象进行出栈,获取所述当前对象。
其中,所述对象获取模块,还用于获取所述操作系统底层的符号表系统,所述符号表系统包括所述所有对象。
相应地,本发明第三方面提供了一种关联对象追踪装置,包括接口电路、存储器以及处理器,其中,存储器中存储一组程序代码,且处理器用于调用存储器中存储的程序代码,用于执行以下操作:
调用开源工具动态修改操作系统底层中用于实现关联对象的多个入口函数;
获取当前对象,并在所述当前对象中加入强引用标识符;
通过所述多个入口函数创建所述当前对象所对应的临时关联对象;
从预设的关联对象映射表中查找与所述临时关联对象对应的键值,确定所述键值是否存在于用于存储关联对象的哈希存储表中;
若存在,则确定所述当前对象中的所述强引用标识符是否传入所述临时关联对象中;
若确定所述当前对象中的所述强引用标识符传入所述临时关联对象中,则确定所述临时关联对象为所述当前对象的强引用关联对象。
本申请的又一方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有多条指令,所述指令适于由处理器加载并执行上述各方面所述的方法。
本申请的又一方面提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
实施本发明实施例,在本发明实施例中,通过调用开源工具动态修改操作系统底层中用于实现关联对象的多个入口函数,从而动态实现重定向该三个入口函数的实现方式;并在当前对象中加入强引用标识符,该强引用标识符实现了线程安全的强引用判断,然后遍历所有对象的关联对象,从而提高了获取强引用的关联对象效率以及准确性。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提出的一种关联对象追踪方法的流程示意图;
图2是本发明另一实施例提出的一种关联对象追踪方法的流程示意图;
图3是本发明实施例提出的一种关联对象装置的结构示意图;
图4是本发明另一实施例提出的一种关联对象装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参考图1,图1是本发明实施例提出的一种关联对象追踪方法流程示意图。如图所示,本发明实施例中的方法包括:
S101,调用开源工具动态修改操作系统底层中用于实现关联对象的多个入口函数。
具体实现中,可以在程序启动时,首先加载开源工具,该开源工具可以是fishhook,fishhook是一种动态修改链接Mach-O符号表的开源工具,其中,Mach-O是MachObject文件格式的缩写,一种可执行文件、目标代码、动态库或内核转储的文件格式。在加载开源工具成功之后,获取所述操作系统底层的符号表系统,所述符号表系统包括所述所有对象,所述符号表系统还包括数据类型、作用域以及内存地址等等。最后调用开源工具动态修改操作系统底层中用于实现关联对象的多个入口函数,从而动态实现重定向多个入口函数的实现方式。
其中,多个入口函数可以包括objc_setAssociatedObject,objc_removeAssociatedObject,objc_getAssociatedObject。其中,objc_setAssociatedObject用于给对象添加关联对象,如果传入nil则可以移除已有的关联对象;objc_removeAssociatedObjectt用于移除一个对象的所有关联对象;objc_getAssociatedObject用于获取关联对象。
S102,获取当前对象,并在所述当前对象中加入强引用标识符。
具体实现中,可以首先获取所有对象,并将所述所有对象加入对象消息栈;然后对所述对象消息栈中的所有对象进行出栈,获取所述当前对象。其中,强引用标识符可以为ASSOCIATION_SAFE。
可选的,在获取到当前对象之后,可以确定所述当前对象是否存在关联对象。进一步的,可以获取所述当前对象的结构体指针,并在所述结构体指针中查找目标变量的值;根据所述目标变量的值,确定所述当前对象是否存在关联对象。例如,可以首先获取A对象的isa_t结构体指针,然后在isa_t结构体指针中查找变量has_assoc的值,如果变量has_assoc的值是假,则证明对象A没有关联对象,然后删除该对象,如果变量has_assoc的值是真,则证明对象A有关联对象。
S103,通过所述多个入口函数创建所述当前对象所对应的临时关联对象。
具体实现中,可以获取所述当前对象所对应的关联对象值;判断所述关联对象值是否为空;若所述关联对象值不为空,则通过所述多个入口函数创建所述当前对象所对应的临时关联对象,例如,通过上述入口函数objc_setAssociatedObject创建所述当前对象所对应的临时关联对象,若所述关联对象值为空,则删除该关联对象。
S104,从预设的关联对象映射表中查找与所述临时关联对象对应的键值,确定所述键值是否存在于用于存储关联对象的哈希存储表中。
具体实现中,可以对关联对象进行retain操作来获取哈希存储表,retain操作是一种申请内存的方式,引用计数加1。其中,哈希存储表是根据键值直接进行访问的数据结构,关联对象映射表包括关联对象与键值的多个对应关系。若确定所述键值不存在于用于存储关联对象的哈希存储表中,则当前对象没有关联对象。
S105,若存在,则确定所述当前对象中的所述强引用标识符是否传入所述临时关联对象中。
具体实现中,可以判断所述临时关联对象中是否存在强引用标识符ASSOCIATION_SAFE,如果存在,则确定所述当前对象中的所述强引用标识符传入所述临时关联对象中,如果不存在,则确定所述当前对象中的所述强引用标识符未传入所述临时关联对象中,该临时关联对象不是当前对象的强引用关联对象,并删除该临时关联对象。
需要说明的是,如果对象A与对象B存在关联关系,则在进行函数调用时,会将对象A中的强引用标识符传入对象B,如果对象A与对象B不存在关联关系,则不会将对象A中的强引用标识符传入对象B。
S106,若确定所述当前对象中的所述强引用标识符传入所述临时关联对象中,则确定所述临时关联对象为所述当前对象的强引用关联对象,其中,强引用关联对象不能被释放,即使在内存空间不足时,虚拟机抛出OutOfMemoryError错误使程序异常终止,也不会随意回收具有强引用的对象。
可选的,在获取到当前对象所对应的关联对象之后,可以跳转到S102,继续从所述对象消息栈中获取其他对象进行分析。
在本发明实施例中,通过调用开源工具动态修改操作系统底层中用于实现关联对象的多个入口函数,从而动态实现重定向该三个入口函数的实现方式;并在当前对象中加入强引用标识符,该强引用标识符实现了线程安全的强引用判断,然后遍历所有对象的关联对象,从而提高了获取强引用的关联对象效率以及准确性。
请参考图2,图2是本发明另一实施例提出的一种关联对象追踪方法流程示意图。如图所示,本发明实施例中的方法包括:
S201,加载开源工具架构,获取操作系统底层的符号表系统。
其中,该开源工具可以是fishhook,fishhook是一种动态修改链接Mach-O符号表的开源工具,其中,Mach-O是Mach Object文件格式的缩写,一种可执行文件、目标代码、动态库或内核转储的文件格式,符号表系统包括所有对象。
S202,调用开源工具动态修改操作系统底层中用于实现关联对象的多个入口函数。
其中,多个入口函数可以包括objc_setAssociatedObject,objc_removeAssociatedObject,objc_getAssociatedObject。其中,objc_setAssociatedObject用于给对象添加关联对象,如果传入nil则可以移除已有的关联对象;objc_removeAssociatedObjectt用于移除一个对象的所有关联对象;objc_getAssociatedObject用于获取关联对象。
S203,获取所有对象,并将所有对象加入对象消息栈。
S204,对所述对象消息栈中的所有对象进行出栈,获取所述当前对象,并在所述当前对象中加入强引用标识符,其中,强引用标识符可以为ASSOCIATION_SAFE。
S205,获取所述当前对象的结构体指针,并在所述结构体指针中查找目标变量的值。
S206,根据所述目标变量的值,确定所述当前对象是否存在关联对象。
例如,可以首先获取A对象的isa_t结构体指针,然后在isa_t结构体指针中查找变量has_assoc的值,如果变量has_assoc的值是假,则证明对象A没有关联对象,然后删除该对象,如果变量has_assoc的值是真,则证明对象A有关联对象。
S207,若所述目标变量的值为假,则删除当前对象。
S208,若所述目标变量的值为真,则获取所述当前对象所对应的关联对象值。
S209,判断所述关联对象值是否为空。
S210,若所述关联对象值为空,则删除关联对象。
S211,若所述关联对象值不为空,则创建当前对象所对应的临时关联对象。
S212,从预设的关联对象映射表中查找与所述临时关联对象对应的键值。其中,关联对象映射表包括关联对象与键值的多个对应关系。
S213,确定键值是否存在于哈希存储表中。
具体的,可以对关联对象进行retain操作来获取哈希存储表,其中,retain操作是一种申请内存的方式,引用计数加1,哈希存储表是根据键值直接进行访问的数据结构。
S214,若所述键值未存在于哈希存储表中,则表明没有关联对象。
S215,若所述键值存在于哈希存储表中,确定当前对象中的强引用标识符是否传入临时关联对象中。
具体实现中,可以判断所述临时关联对象中是否存在强引用标识符ASSOCIATION_SAFE,如果存在,则确定所述当前对象中的所述强引用标识符传入所述临时关联对象中,如果不存在,则确定所述当前对象中的所述强引用标识符未传入所述临时关联对象中。
需要说明的是,如果对象A与对象B存在关联关系,则在进行函数调用时,会将对象A中的强引用标识符传入对象B,如果对象A与对象B不存在关联关系,则不会将对象A中的强引用标识符传入对象B。
S216,若当前对象中的强引用标识符未传入临时关联对象中,则删除关联对象。
S217,若当前对象中的强引用标识符传入临时关联对象中,则保存关联对象,并跳转到S204继续从所述对象消息栈中获取其他对象进行分析。
在本发明实施例中,通过调用开源工具动态修改操作系统底层中用于实现关联对象的多个入口函数,从而动态实现重定向该三个入口函数的实现方式;并在当前对象中加入强引用标识符,该强引用标识符实现了线程安全的强引用判断,然后遍历所有对象的关联对象,从而提高了获取强引用的关联对象效率以及准确性。
请参考图3,图3是本发明实施例提供的一种关联对象追踪装置的结构示意图。如图所示,本发明实施例中的装置包括:
函数修改模块301,用于调用开源工具动态修改操作系统底层中用于实现关联对象的多个入口函数。
具体实现中,可以在程序启动时,首先加载开源工具,该开源工具可以是fishhook,fishhook是一种动态修改链接Mach-O符号表的开源工具,其中,Mach-O是MachObject文件格式的缩写,一种可执行文件、目标代码、动态库或内核转储的文件格式。在加载开源工具成功之后,获取所述操作系统底层的符号表系统,所述符号表系统包括所述所有对象,所述符号表系统还包括数据类型、作用域以及内存地址等等。最后调用开源工具动态修改操作系统底层中用于实现关联对象的多个入口函数,从而动态实现重定向多个入口函数的实现方式。
其中,多个入口函数可以包括objc_setAssociatedObject,objc_removeAssociatedObject,objc_getAssociatedObject。其中,objc_setAssociatedObject用于给对象添加关联对象,如果传入nil则可以移除已有的关联对象;objc_removeAssociatedObjectt用于移除一个对象的所有关联对象;objc_getAssociatedObject用于获取关联对象。
对象获取模块302,用于获取当前对象,并在所述当前对象中加入强引用标识符。
具体实现中,可以首先获取所有对象,并将所述所有对象加入对象消息栈;然后对所述对象消息栈中的所有对象进行出栈,获取所述当前对象。其中,强引用标识符可以为ASSOCIATION_SAFE。
可选的,在获取到当前对象之后,可以确定所述当前对象是否存在关联对象。进一步的,可以获取所述当前对象的结构体指针,并在所述结构体指针中查找目标变量的值;根据所述目标变量的值,确定所述当前对象是否存在关联对象。例如,可以首先获取A对象的isa_t结构体指针,然后在isa_t结构体指针中查找变量has_assoc的值,如果变量has_assoc的值是假,则证明对象A没有关联对象,然后删除该对象,如果变量has_assoc的值是真,则证明对象A有关联对象。
对象创建模块303,用于通过所述多个入口函数创建所述当前对象所对应的临时关联对象。
具体实现中,可以获取所述当前对象所对应的关联对象值;判断所述关联对象值是否为空;若所述关联对象值不为空,则通过所述多个入口函数创建所述当前对象所对应的临时关联对象,例如,通过上述入口函数objc_setAssociatedObject创建所述当前对象所对应的临时关联对象,若所述关联对象值为空,则删除该关联对象。
对象确定模块304,用于从预设的关联对象映射表中查找与所述临时关联对象对应的键值,确定所述键值是否存在于用于存储关联对象的哈希存储表中。
具体实现中,可以对关联对象进行retain操作来获取哈希存储表,retain操作是一种申请内存的方式,引用计数加1。其中,哈希存储表是根据键值直接进行访问的数据结构,关联对象映射表包括关联对象与键值的多个对应关系。若确定所述键值不存在于用于存储关联对象的哈希存储表中,则当前对象没有关联对象。
标识确定模块305,用于若存在,则确定所述当前对象中的所述强引用标识符是否传入所述临时关联对象中。
具体实现中,可以判断所述临时关联对象中是否存在强引用标识符ASSOCIATION_SAFE,如果存在,则确定所述当前对象中的所述强引用标识符传入所述临时关联对象中,如果不存在,则确定所述当前对象中的所述强引用标识符未传入所述临时关联对象中,该临时关联对象不是当前对象的强引用关联对象,并删除该临时关联对象。
需要说明的是,如果对象A与对象B存在关联关系,则在进行函数调用时,会将对象A中的强引用标识符传入对象B,如果对象A与对象B不存在关联关系,则不会将对象A中的强引用标识符传入对象B。
关联确定模块306,用于若确定所述当前对象中的所述强引用标识符传入所述临时关联对象中,则确定所述临时关联对象为所述当前对象的强引用关联对象。其中,强引用关联对象不能被释放,即使在内存空间不足时,虚拟机抛出OutOfMemoryError错误使程序异常终止,也不会随意回收具有强引用的对象。
具体实现中,在获取到当前对象所对应的关联对象之后,可以跳转到对象获取模块302,继续从所述对象消息栈中获取其他对象进行分析。
在本发明实施例中,通过调用开源工具动态修改操作系统底层中用于实现关联对象的多个入口函数,从而动态实现重定向该三个入口函数的实现方式;并在当前对象中加入强引用标识符,该强引用标识符实现了线程安全的强引用判断,然后遍历所有对象的关联对象,从而提高了获取强引用的关联对象效率以及准确性。
请参考图4,图4是本发明另一实施例提出的一种关联对象追踪装置的结构示意图。如图所示,该装置可以包括:至少一个处理器401,例如CPU,至少一个通信接口402,至少一个存储器403,至少一个总线404。其中,总线404用于实现这些组件之间的连接通信。其中,本发明实施例中装置的通信接口402是有线发送端口,也可以为无线设备,例如包括天线装置,用于与其他节点设备进行信令或数据的通信。存储器403可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器。存储器403可选的还可以是至少一个位于远离前述处理器401的存储装置。存储器403中存储一组程序代码,且处理器401用于调用存储器中存储的程序代码,用于执行以下操作:
调用开源工具动态修改操作系统底层中用于实现关联对象的多个入口函数;
获取当前对象,并在所述当前对象中加入强引用标识符;
通过所述多个入口函数创建所述当前对象所对应的临时关联对象;
从预设的关联对象映射表中查找与所述临时关联对象对应的键值,确定所述键值是否存在于用于存储关联对象的哈希存储表中;
若存在,则确定所述当前对象中的所述强引用标识符是否传入所述临时关联对象中;
若确定所述当前对象中的所述强引用标识符传入所述临时关联对象中,则确定所述临时关联对象为所述当前对象的强引用关联对象。
其中,处理器401还用于执行如下操作步骤:
确定所述当前对象是否存在关联对象。
其中,处理器401还用于执行如下操作步骤:
获取所述当前对象的结构体指针,并在所述结构体指针中查找目标变量的值;
根据所述目标变量的值,确定所述当前对象是否存在关联对象。
其中,处理器401还用于执行如下操作步骤:
获取所述当前对象所对应的关联对象值;
判断所述关联对象值是否为空;
若所述关联对象值不为空,则通过所述多个入口函数创建所述当前对象所对应的临时关联对象。
其中,处理器401还用于执行如下操作步骤:
获取所有对象,并将所述所有对象加入对象消息栈;
对所述对象消息栈中的所有对象进行出栈,获取所述当前对象。
其中,处理器401还用于执行如下操作步骤:
获取所述操作系统底层的符号表系统,所述符号表系统包括所述所有对象。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本申请实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,对于前述的各个方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某一些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详细描述的部分,可以参见其他实施例的相关描述。
以上对本发明实施例所提供的内容下载方法及相关设备、系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (12)
1.一种关联对象追踪方法,其特征在于,所述方法包括:
调用开源工具动态修改操作系统底层中用于实现关联对象的多个入口函数;
获取当前对象,并在所述当前对象中加入强引用标识符;
获取所述当前对象所对应的关联对象值,若所述关联对象值不为空,则通过所述多个入口函数创建所述当前对象所对应的临时关联对象;
从预设的关联对象映射表中查找与所述临时关联对象对应的键值,确定所述键值是否存在于用于存储关联对象的哈希存储表中;
若存在,则确定所述当前对象中的所述强引用标识符是否传入所述临时关联对象中,其中若所述当前对象与所述临时关联对象存在关联关系,则在进行函数调用时会将当前对象中的强引用标识符传入所述临时关联对象;
若确定所述当前对象中的所述强引用标识符传入所述临时关联对象中,则确定所述临时关联对象为所述当前对象的强引用关联对象。
2.如权利要求1所述的方法,其特征在于,所述通过所述多个入口函数创建所述当前对象所对应的临时关联对象之前,还包括:
确定所述当前对象是否存在关联对象。
3.如权利要求2所述的方法,其特征在于,所述确定所述当前对象是否存在关联对象包括:
获取所述当前对象的结构体指针,并在所述结构体指针中查找目标变量的值;
根据所述目标变量的值,确定所述当前对象是否存在关联对象。
4.如权利要求1所述的方法,其特征在于,所述获取当前对象包括:
获取所有对象,并将所述所有对象加入对象消息栈;
对所述对象消息栈中的所有对象进行出栈,获取所述当前对象。
5.如权利要求4所述的方法,其特征在于,所述调用开源工具动态修改操作系统底层中用于实现关联对象的多个入口函数之前,还包括:
获取所述操作系统底层的符号表系统,所述符号表系统包括所述所有对象,所述所有对象包括所述当前对象。
6.一种关联对象追踪装置,其特征在于,所述装置包括:
函数修改模块,用于调用开源工具动态修改操作系统底层中用于实现关联对象的多个入口函数;
对象获取模块,用于获取当前对象,并在所述当前对象中加入强引用标识符;
对象创建模块,用于获取所述当前对象所对应的关联对象值,若所述关联对象值不为空,则通过所述多个入口函数创建所述当前对象所对应的临时关联对象;
对象确定模块,用于从预设的关联对象映射表中查找与所述临时关联对象对应的键值,确定所述键值是否存在于用于存储关联对象的哈希存储表中;
标识确定模块,用于若存在,则确定所述当前对象中的所述强引用标识符是否传入所述临时关联对象中,其中若所述当前对象与所述临时关联对象存在关联关系,则在进行函数调用时会将当前对象中的强引用标识符传入所述临时关联对象;
关联确定模块,用于若确定所述当前对象中的所述强引用标识符传入所述临时关联对象中,则确定所述临时关联对象为所述当前对象的强引用关联对象。
7.如权利要求6所述的装置,其特征在于,
所述对象确定模块,还用于确定所述当前对象是否存在关联对象。
8.如权利要求7所述的装置,其特征在于,所述对象确定模块具体用于:
获取所述当前对象的结构体指针,并在所述结构体指针中查找目标变量的值;
根据所述目标变量的值,确定所述当前对象是否存在关联对象。
9.如权利要求6所述的装置,其特征在于,所述对象获取模块具体用于:
获取所有对象,并将所述所有对象加入对象消息栈;
对所述对象消息栈中的所有对象进行出栈,获取所述当前对象。
10.如权利要求9所述的装置,其特征在于,所述对象获取模块,还用于获取所述操作系统底层的符号表系统,所述符号表系统包括所述所有对象,所述所有对象包括所述当前对象。
11.一种关联对象追踪装置,其特征在于,所述装置包括接口电路、存储器以及处理器,其中,存储器中存储一组程序代码,且处理器用于调用存储器中存储的程序代码,用于执行以下操作:
调用开源工具动态修改操作系统底层中用于实现关联对象的多个入口函数;
获取当前对象,并在所述当前对象中加入强引用标识符;
获取所述当前对象所对应的关联对象值,若所述关联对象值不为空,则通过所述多个入口函数创建所述当前对象所对应的临时关联对象;
从预设的关联对象映射表中查找与所述临时关联对象对应的键值,确定所述键值是否存在于用于存储关联对象的哈希存储表中;
若存在,则确定所述当前对象中的所述强引用标识符是否传入所述临时关联对象中,其中若所述当前对象与所述临时关联对象存在关联关系,则在进行函数调用时会将当前对象中的强引用标识符传入所述临时关联对象;
若确定所述当前对象中的所述强引用标识符传入所述临时关联对象中,则确定所述临时关联对象为所述当前对象的强引用关联对象。
12.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有多条指令,所述指令适于由处理器加载并执行如权利要求1-5任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710383370.1A CN108932263B (zh) | 2017-05-26 | 2017-05-26 | 一种关联对象追踪方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710383370.1A CN108932263B (zh) | 2017-05-26 | 2017-05-26 | 一种关联对象追踪方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108932263A CN108932263A (zh) | 2018-12-04 |
CN108932263B true CN108932263B (zh) | 2023-01-10 |
Family
ID=64451568
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710383370.1A Active CN108932263B (zh) | 2017-05-26 | 2017-05-26 | 一种关联对象追踪方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108932263B (zh) |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015006798A1 (en) * | 2013-07-15 | 2015-01-22 | Cocoon Data Holdings Limited | Secure data object generation and management |
CN104317795A (zh) * | 2014-08-28 | 2015-01-28 | 华为技术有限公司 | 一种二维过滤器的生成方法、查询方法及装置 |
CN105808399A (zh) * | 2016-03-14 | 2016-07-27 | 百度在线网络技术(北京)有限公司 | 一种远程调试的方法和装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8626795B2 (en) * | 2010-11-05 | 2014-01-07 | Apple Inc. | Dynamic data association |
-
2017
- 2017-05-26 CN CN201710383370.1A patent/CN108932263B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2015006798A1 (en) * | 2013-07-15 | 2015-01-22 | Cocoon Data Holdings Limited | Secure data object generation and management |
CN104317795A (zh) * | 2014-08-28 | 2015-01-28 | 华为技术有限公司 | 一种二维过滤器的生成方法、查询方法及装置 |
WO2016029664A1 (zh) * | 2014-08-28 | 2016-03-03 | 华为技术有限公司 | 一种二维过滤器的生成方法、查询方法及装置 |
CN105808399A (zh) * | 2016-03-14 | 2016-07-27 | 百度在线网络技术(北京)有限公司 | 一种远程调试的方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN108932263A (zh) | 2018-12-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109558525B (zh) | 一种测试数据集的生成方法、装置、设备和存储介质 | |
CN103902696A (zh) | 一种加载资源文件的方法及装置 | |
WO2020177429A1 (zh) | 在应用中嵌入代码的方法、装置及电子设备 | |
CN115562992A (zh) | 一种文件检测方法、装置、电子设备及存储介质 | |
US10241759B2 (en) | Detecting open source components built into mobile applications | |
CN111124480A (zh) | 应用程序包的生成方法、装置、电子设备及存储介质 | |
CN112612489B (zh) | 软件的升级包构建方法、装置和电子设备 | |
US9411618B2 (en) | Metadata-based class loading using a content repository | |
WO2019041891A1 (zh) | 升级包的生成方法及装置 | |
CN111045698A (zh) | 冗余图片的删除方法、装置、电子设备及存储介质 | |
CN112286706B (zh) | 安卓应用的应用信息远程快速获取方法及相关设备 | |
US9575750B2 (en) | Generic annotation seeker | |
CN111045746A (zh) | 代码扩展方法和框架 | |
CN110442353B (zh) | 一种安装包管理的方法、装置及电子设备 | |
CN108932263B (zh) | 一种关联对象追踪方法及装置 | |
CN115080114B (zh) | 应用程序的移植处理方法、装置和介质 | |
CN116647447A (zh) | 一种应用程序的热更新方法、装置、智能设备及存储介质 | |
CN112068814B (zh) | 可执行文件的生成方法、装置、系统及介质 | |
CN114625373A (zh) | 应用转换方法、装置、电子设备和存储介质 | |
CN114398073B (zh) | 基于rn的应用更新方法及装置 | |
CN113050950A (zh) | 应用程序开发方法、装置、电子设备及机器可读存储介质 | |
CN114579520B (zh) | 镜像数据处理方法、镜像数据加载方法及装置 | |
CN112835609A (zh) | 一种修改依赖包下载地址的方法和装置 | |
CN111562940B (zh) | 项目数据构建方法以及装置 | |
CN113709154B (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 |