CN112596739B - 一种数据的处理方法和装置 - Google Patents
一种数据的处理方法和装置 Download PDFInfo
- Publication number
- CN112596739B CN112596739B CN202011497993.XA CN202011497993A CN112596739B CN 112596739 B CN112596739 B CN 112596739B CN 202011497993 A CN202011497993 A CN 202011497993A CN 112596739 B CN112596739 B CN 112596739B
- Authority
- CN
- China
- Prior art keywords
- function
- address
- symbol
- acquiring
- instruction
- 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
Images
Classifications
-
- 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)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Stored Programmes (AREA)
Abstract
本发明实施例提供了一种数据的处理方法及装置,通过获取应用程序的项目文件,以及项目文件对应的函数列表,若函数列表中存在OC函数,则获取与项目文件匹配的符号表,符号表中包括与OC函数对应的原始符号,对符号表进行反汇编,获得原始符号对应的汇编指令,接着根据原始符号对应的汇编指令,从符号表中选取针对OC函数的目标符号,并获取目标符号的地址信息,然后根据目标符号的地址信息,生成针对项目文件的类名表,通过对符号表中的内容进行反汇编,有效提高了函数定位的效率,保证了函数搜索的全面性,且通过反汇编得到目标符号,并通过目标符号的地址信息查找OC函数对应的类名称,实现对项目文件的全量搜索,保证搜索结果的全面、准确性。
Description
技术领域
本发明涉及数据处理技术领域,特别是涉及一种数据的处理方法和一种数据的处理装置。
背景技术
Xcode为苹果公司向开发人员提供的集成开发环境,可以用于开发macOS、iOS、WatchOS和tvOS的应用程序,其是具有统一的用户界面设计、编码、测试以及调试为一体的用户操作界面。在应用程序的项目开发过程中,当开发人员想要搜索项目中相关函数时,只能通过Xcode搜索框进行搜索,然而,在该搜索过程中,无法对项目进行全量搜索,搜索覆盖不够全面,容易出现漏检。
发明内容
本发明实施例是提供一种数据的处理方法、装置、电子设备以及计算机可读存储介质,以解决或部分解决在对项目文件的相关函数进行搜索过程中,无法进行全量搜索,搜索覆盖不够全面,容易出现漏检的问题。
本发明实施例公开了一种数据的处理方法,包括:
获取应用程序的项目文件,以及所述项目文件对应的函数列表;
若所述函数列表中存在OC函数,则获取与所述项目文件匹配的符号表,所述符号表中包括与所述OC函数对应的原始符号;
对所述符号表进行反汇编,获得所述原始符号对应的汇编指令;
根据所述原始符号对应的汇编指令,从所述符号表中选取针对所述OC函数的目标符号,并获取所述目标符号的地址信息;
根据所述目标符号的地址信息,生成针对所述项目文件的类名表。
可选地,所述地址信息包括起始地址以及编译地址,所述根据所述原始符号对应的汇编指令,从所述符号表中选取针对所述OC函数的目标符号,并获取所述目标符号的地址信息,包括:
分别获取各个所述原始符号的第一起始地址以及第一编译地址;
采用所述第一起始地址与所述第一编译地址,获取所述原始符号对应的汇编指令;
采用所述汇编指令,获取所述OC函数的函数地址;
将所述符号表中存在所述函数地址的OC函数所对应的原始符号,作为目标符号,并获取所述目标符号的第二起始地址以及第二编译地址。
可选地,所述汇编指令至少包括高位地址以及低位地址,所述采用所述汇编指令,获取所述OC函数的函数地址,包括:
获取针对所述汇编指令的指令区间;
若所述汇编指令的高位地址与低位地址之间的位数差落入所述指令区间,则采用所述汇编指令的高位地址与低位地址,生成所述OC函数的函数地址。
可选地,所述采用所述汇编指令,获取所述OC函数的函数地址,还包括:
若所述汇编指令的高位地址与低位地址之间的位数差落于所述指令区间外,则判定原始符号所对应的OC函数不存在函数地址。
可选地,所述通过所述OC函数的函数地址,从所述符号表中选取针对所述OC函数的目标符号,并获取所述目标符号的第二起始地址以及第二编译地址,包括:
将存在函数地址的原始符号作为目标符号,并获取所述目标符号的第二起始地址以及第二编译地址。
可选地,所述项目文件包括字符串表,所述根据所述目标符号的地址信息,生成针对所述项目文件的类名表,包括:
通过所述目标符号的第二起始地址以及第二编译地址,从所述字符串表中获取与所述OC函数对应的类名称;
采用各个所述OC函数对应的类名称,输出针对所述项目文件的类名表。
可选地,还包括:
获取针对所述类文件的Hook函数;
在所述项目文件编译的过程中,通过所述Hook函数获取类文件对应的动态库数据。
本发明实施例还公开了一种数据的处理装置,包括:
文件信息获取模块,用于获取应用程序的项目文件,以及所述项目文件对应的函数列表;
符号表获取模块,用于若所述函数列表中存在OC函数,则获取与所述项目文件匹配的符号表,所述符号表中包括与所述OC函数对应的原始符号;
反汇编模块,用于对所述符号表进行反汇编,获得所述原始符号对应的汇编指令;
地址信息获取模块,用于根据所述原始符号对应的汇编指令,从所述符号表中选取针对所述OC函数的目标符号,并获取所述目标符号的地址信息;
类名表生成模块,用于根据所述目标符号的地址信息,生成针对所述项目文件的类名表。
可选地,所述地址信息包括起始地址以及编译地址,所述地址信息获取模块包括:
第一地址信息获取子模块,用于分别获取各个所述原始符号的第一起始地址以及第一编译地址;
汇编指令获取子模块,用于采用所述第一起始地址与所述第一编译地址,获取所述原始符号对应的汇编指令;
函数地址获取子模块,用于采用所述汇编指令,获取所述OC函数的函数地址;
第二地址信息获取子模块,用于将所述符号表中存在所述函数地址的OC函数所对应的原始符号,作为目标符号,并获取所述目标符号的第二起始地址以及第二编译地址。
可选地,所述汇编指令至少包括高位地址以及低位地址,所述函数地址获取子模块具体用于:
获取针对所述汇编指令的指令区间;
若所述汇编指令的高位地址与低位地址之间的位数差落入所述指令区间,则采用所述汇编指令的高位地址与低位地址,生成所述OC函数的函数地址。
可选地,所述函数地址获取子模块具体还用于:
若所述汇编指令的高位地址与低位地址之间的位数差落于所述指令区间外,则判定原始符号所对应的OC函数不存在函数地址。
可选地,所述第二地址信息获取子模块具体用于:
将存在函数地址的原始符号作为目标符号,并获取所述目标符号的第二起始地址以及第二编译地址。
可选地,所述项目文件包括字符串表,所述类名表生成模块包括:
类名称获取子模块,用于通过所述目标符号的第二起始地址以及第二编译地址,从所述字符串表中获取与所述OC函数对应的类名称;
类名表生成子模块,用于采用各个所述OC函数对应的类名称,输出针对所述项目文件的类名表。
可选地,还包括:
Hook函数获取模块,用于获取针对所述类文件的Hook函数;
动态库数据获取模块,用于在所述项目文件编译的过程中,通过所述Hook函数获取类文件对应的动态库数据。
本发明实施例还公开了一种电子设备,包括:
一个或多个处理器;和
其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述电子设备执行如上所述的方法。
本发明实施例还公开了一种计算机可读存储介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行如上所述的方法。
本发明实施例包括以下优点:
在本发明实施例中,通过获取应用程序的项目文件,以及项目文件对应的函数列表,若函数列表中存在OC函数,则获取与项目文件匹配的符号表,符号表中包括与OC函数对应的原始符号,对符号表进行反汇编,获得原始符号对应的汇编指令,接着根据原始符号对应的汇编指令,从符号表中选取针对OC函数的目标符号,并获取目标符号的地址信息,然后根据目标符号的地址信息,生成针对项目文件的类名表,通过对符号表中的内容进行反汇编,有效提高了函数定位的效率,保证了函数搜索的全面性,且通过反汇编得到目标符号,并通过目标符号的地址信息查找OC函数对应的类名称,实现对项目文件的全量搜索,保证搜索结果的全面、准确性。
附图说明
图1是本发明实施例提供的一种数据的处理方法的步骤流程图;
图2是本发明实施例提供的另一种数据的处理方法的流程图;
图3是本发明实施例提供的一种数据的处理装置的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
Mach-O是一种文件格式,是macOS操作***上可执行文件的格式,类似于windows上的PE格式(Portable Executable),linux上的elf格式(Executable and LinkingFormat)。项目开发人员编写的C、C++、swift、OC,最终可以编译链接生成Mach-O可执行文件。
汇编语言(Assembly Language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。
Xcode是运行在操作***Mac OS X上的集成开发工具(IDE),由AppleInc开发。Xcode是开发macOS和iOS应用程序的最快捷的方式。Xcode具有统一的用户界面设计,编码、测试、调试都在一个简单的窗口内完成。
Hook技术又叫做钩子函数,***未调用相关函数之前,通过Hook函数可以先捕获函数对应的消息,Hook函数先得到控制权,此时Hook函数既可以加工处理(改变)该函数的执行行为,还可以强制结束消息的传递。
OC函数可以为Objective-C函数,其可以作为iOS操作***、iOS应用程序、iPad OS操作***、iPad OS应用程序、Mac OS X操作***以及Mac OSX上的应用程序等的编辑语言,通过检测项目文件中OC函数的类名称,可以有效对项目文件的函数完整性、功能等进行检测,保证项目文件的稳定性。
作为一种示例,当开发人员想要搜索项目工程文件中所有的目标OC函数调用的位置时,主要通过Xcode提供的搜索框输入函数名实现对目标OC函数的搜索;或通过添加Hook函数的方式进行OC函数替换,然后获取目标OC函数的堆栈信息,以便得到OC函数的相关内容。然而,在上述OC函数的搜索过程中,Xcode搜索框无法实现项目工程文件的全面覆盖,例如库中的.m文件并未对外暴露,无法搜索到该文件中的OC函数;并且,对于Hook函数,其比较依赖于运行,若搜索过程还未运行至搜索阶段,则容易出现漏检的情况。
因此,本发明实施例的核心发明点之一在于通过反汇编Mach-O文件中的符号表的内容,并通过地址匹配的方式查找到存在函数地址的目标符号,并通过目标符号的地址信息计算出字符串表中的内容,得到OC函数对应的类名称,即得到目标OC函数的调用类,从而通过对符号表中的内容进行反汇编,有效提高了函数定位的效率,保证了函数搜索的全面性,且通过目标符号的地址信息得到OC函数对应的类名称,实现对项目文件的全量搜索,保证搜索结果的全面、准确性。
参照图1,示出了本发明实施例提供的一种数据的处理方法的步骤流程图,具体可以包括如下步骤:
步骤101,获取应用程序的项目文件,以及所述项目文件对应的函数列表;
在本发明实施例中,项目文件可以为开发人员在macOS操作***的终端对应用程序进行开发后生成的可执行文件,即Mach-O文件。对于Mach-O文件,其提供了较强的扩展性,以及提高了符号表中信息的访问速度,当开发人员想要搜索Mach-O文件中的目标OC函数时,可以通过获取Mach-O文件对应的函数列表,以便判断函数列表中是否包含OC函数。
在Mach-O文件中,调用过的OC函数均可以存在于函数列表selrefs中,则可以通过获取函数列表selrefs,并通过遍历该列表,检测列表中是否存在OC函数的函数名称。可选地,在函数列表中可以记录项目文件中所有函数的函数名称,例如记录有OC函数的函数名称等。
步骤102,若所述函数列表中存在OC函数,则获取与所述项目文件匹配的符号表,所述符号表中包括与所述OC函数对应的原始符号;
在具体实现中,不同类型的函数可以采用不同的命名方式,例如对于OC函数、C函数以及C++函数等的命名可以不同,则通过遍历函数列表中所有的函数名称,查找函数列表中是否存在OC函数,例如,OC函数的函数名称可以包括函数名称+参数名称,C++函数则只包含函数名称,则根据不同的命名方式可以快速遍历函数列表,判断是否存在OC函数。
当函数列表中存在OC函数的函数名称,则可以获取与项目文件匹配的符号表,以便通过该符号表查找OC函数的函数地址,进而获取OC函数对应的类名称。其中,符号表可以为一种用于语言翻译器(例如编译器和解释器)中的数据结构,在符号表中,程序源代码中的每个标识符都和它的声明或使用信息绑定在一起,比如其数据类型、作用域以及内存地址。
此外,在符号表中可以包括与OC函数对应的原始符号,以及原始符号的汇编指令,还可以包括原始符号的符号名、类型、存储类别、作用域、可视性、符号变量的存储分配信息以及符号的其他属性等等。
步骤103,对所述符号表进行反汇编,获得所述原始符号对应的汇编指令;
在具体实现中,符号表的内容为采用机器语言进行编写的代码,则通过对符号表进行反汇编,实现将符号表中的内容由机器语言转换为汇编语言代码,从而得到目标符号表,在目标符号表中可以包括原始符号对应的汇编指令,通过对符号表进行反汇编可以有效提高函数定位的效率,保证了函数搜索的全面性,以及为后续查找OC函数的函数地址做准备。
步骤104,根据所述原始符号对应的汇编指令,从所述符号表中选取针对所述OC函数的目标符号,并获取所述目标符号的地址信息;
在本发明实施例中,可以通过遍历反汇编之后的符号表,获取每个原始符号对应的汇编指令,并根据原始符号对应的汇编指令,从符号表中选取针对OC函数的目标符号,然后获取目标符号的地址信息,以便通过目标符号的地址信息,获取OC函数对应的类名称。可选地,将汇编前的符号表作为第一符号表,将汇编后的符号表作为第二符号表,本发明对此不作限制。
在具体实现中,在第一符号表中,每个原始符号均可以对应起始地址以及编译地址,其中,起始地址可以为符号在第一符号表的开始位置,通过开始位置可以对符号进行位置定位,编译地址可以为符号在编译后的内存地址,通过内存地址可以获取符号对应的数据内容,从而可以分别获取每个原始符号的第一起始地址以及第一编译地址,接着采用各个原始符号所对应的第一起始地址进行定位以及通过第一编译地址进行数据获取,从汇编后的第二符号表中查找对应的汇编指令,例如,原始符号①的起始地址A与编译地址A1,则可以通过起始地址A与编译地址A1,在第二符号表中查找到原始符号①对应的汇编指令Ⅰ;原始符号②的起始地址B与编译地址B1,则可以通过起始地址B与编译地址B1,在第二符号表中查找到原始符号②对应的汇编指令Ⅱ等等。
当得到原始符号对应的汇编指令后,通过该汇编指令查找OC函数对应的函数地址,对于原始符号,其所对应的OC函数不一定在符号表中存在对应的函数地址,若OC函数在符号表中不存在对应的函数地址,则判定原始符号对应的OC函数在第二符号表中不存在函数地址,过滤该原始符号;若OC函数在符号表中存在对应的函数地址,则将符号表中存在函数地址的OC函数所对应的原始符号,作为目标符号,并获取目标符号在第一符号表中的第二起始地址以及第二编译地址,从而通过地址匹配的方式,找到存在函数地址的目标符号,以便通过目标符号的地址信息,获取OC函数对应的类名称,保证了函数查找结果的全面性、准确性。
具体的,原始符号的汇编指令可以包括OC函数的高位地址与低位地址,低位地址与高位地址分别用于对OC函数的写入起点以及写入终点,例如,OC函数的函数地址为0x3f08c06,其在汇编指令中可以表现为0x3f8000和0xc60,通过读取汇编指令中记录的OC函数的高位地址与低位地址,可以生成OC函数的函数地址。
可选地,由于不同的汇编指令之间存在相同的高位地址或地位地址,因此在生成OC函数的函数地址的过程中,可以获取针对汇编指令的指令区间,若汇编指令的高位地址与低位地址之间的位数差落入指令区间,则采用汇编指令的高位地址与低位地址,生成OC函数的函数地址;若汇编指令的高位地址与低位地址之间的地址位数差落于指令区间外,则可以表示该汇编指令所对应的函数地址不存在,OC函数不存在对应的函数地址,可以判定原始符号所对应的OC函数不存在函数地址,从而通过指令区间对地址位数差进行检测,可以有效过滤误差,提高函数检测的准确性,以及通过对符号表中的内容进行反汇编,选取与OC函数对应的目标符号,有效提高了函数定位的效率
通过对原始符号进行筛选,得到存在OC函数的函数地址的目标符号后,可以获取目标符号的第二起始地址以及第二编译地址,以便获取OC函数对应的类名称。
步骤105,根据所述目标符号的地址信息,生成针对所述项目文件的类名表。
在本发明实施例中,可以通过地址计算的方式获取与OC函数对应的类名称,具体的,可以通过目标符号中的第二起始地址和第二编译地址从项目文件对应的字符串表中查找与OC函数对应的类名称,从而通过目标符号的地址信息得到OC函数对应的类名称,实现对项目文件的全量搜索,保证搜索结果的全面、准确性。
在一种示例中,在开发应用程序的过程中,可以有若干个字符串表,每种语言或每个条件一个,其可以包含应用程序中所有字符串的ID、值和标题的列表等等,则得到目标符号的起始地址与编译地址之后,可以通过起始地址在字符串表中进行定位,并通过编译地址获取对应的类名称,从而通过地址匹配的方式找到目标符号对应的类名,即得到目标OC函数对应的调用类的名称。
当得到OC函数对应的类名称之后,可以将所有查找到的类名称保存为针对项目文件的类名表,在该类名表中,包含了存在函数地址的OC函数所对应的调用类的类名称、OC函数、符号以及符号对应的汇编指令等等,从而开发人员可以通过该文件对函数的调用进行检测,判断函数调用是否存在问题,例如,当需要对某一个OC函数的调用进行检测,则可以从类名表中获取该OC函数的内容,直接在项目工程文件中进行定位,实现对函数的检测,保证函数运算的完整性与稳定性。
在本发明的一种可选实施例中,由于Mach-O文件为二进制文件,但动态库是运行时链接的,其并不会出现在Mach-O文件中,因此可以通过获取针对类文件的Hook函数,并在项目文件编译的过程中,通过Hook函数获取类文件对应的动态库数据,从而通过Hook函数的方式获取动态库数据,提高数据获取的针对性,尤其是开发人员可以根据实际需求,对需要获取动态库数据的OC函数添加Hook函数,获取其运行时的动态库数据,避免数据获取出现遗漏,保证了数据获取的全面性。
需要说明的是,本发明实施例包括但不限于上述示例,可以理解的是,本领域技术人员在本发明的思想指导下,还可以根据实际需要进行设置,本发明对此不作限制。
在本发明实施例中,通过获取应用程序的项目文件,以及项目文件对应的函数列表,若函数列表中存在OC函数,则获取与项目文件匹配的符号表,符号表中包括与OC函数对应的原始符号,对符号表进行反汇编,获得原始符号对应的汇编指令,接着根据原始符号对应的汇编指令,从符号表中选取针对OC函数的目标符号,并获取目标符号的地址信息,然后根据目标符号的地址信息,生成针对项目文件的类名表,通过对符号表中的内容进行反汇编,有效提高了函数定位的效率,保证了函数搜索的全面性,且通过反汇编得到目标符号,并通过目标符号的地址信息查找OC函数对应的类名称,实现对项目文件的全量搜索,保证搜索结果的全面、准确性。
为了使本领域技术人员更好地理解本发明实施例的技术方案,下面通过一个示例进行说明。
参考图2,示出了本发明实施例提供的另一种数据的处理方法的流程图,通过遍历项目文件对应的符号表,得到符号1、符号2、符号3等等原始符号,通过反汇编指令对符号表进行反汇编,得到反汇编之后的符号表,并从该表中获取各个原始符号对应的汇编指令,如符号1指令、符号2指令、符号3指令等等,接着通过各个汇编指令记录的高位地址与低位地址,确定OC函数对应的函数地址,并将存在函数地址的OC函数对应的原始符号作为目标符号n,获取各个目标符号的起始地址与编译地址,然后从项目文件对应的字符串表中获取OC函数对应的类名称,并将所有的类名称以及对应的内容存储为类名表,通过对符号表中的内容进行反汇编,有效提高了函数定位的效率,保证了函数搜索的全面性,且通过反汇编得到目标符号,并通过目标符号的地址信息查找OC函数对应的类名称,实现对项目文件的全量搜索,保证搜索结果的全面、准确性。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
参照图3,示出了本发明实施例提供的一种数据的处理装置的结构框图,具体可以包括如下模块:
文件信息获取模块301,用于获取应用程序的项目文件,以及所述项目文件对应的函数列表;
符号表获取模块302,用于若所述函数列表中存在OC函数,则获取与所述项目文件匹配的符号表,所述符号表中包括与所述OC函数对应的原始符号;
反汇编模块303,用于对所述符号表进行反汇编,获得所述原始符号对应的汇编指令;
地址信息获取模块304,用于根据所述原始符号对应的汇编指令,从所述符号表中选取针对所述OC函数的目标符号,并获取所述目标符号的地址信息;
类名表生成模块305,用于根据所述目标符号的地址信息,生成针对所述项目文件的类名表。
在本发明的一种可选实施例中,所述地址信息包括起始地址以及编译地址,所述地址信息获取模块304包括:
第一地址信息获取子模块,用于分别获取各个所述原始符号的第一起始地址以及第一编译地址;
汇编指令获取子模块,用于采用所述第一起始地址与所述第一编译地址,获取所述原始符号对应的汇编指令;
函数地址获取子模块,用于采用所述汇编指令,获取所述OC函数的函数地址;
第二地址信息获取子模块,用于将所述符号表中存在所述函数地址的OC函数所对应的原始符号,作为目标符号,并获取所述目标符号的第二起始地址以及第二编译地址。
在本发明的一种可选实施例中,所述汇编指令至少包括高位地址以及低位地址,所述函数地址获取子模块具体用于:
获取针对所述汇编指令的指令区间;
若所述汇编指令的高位地址与低位地址之间的位数差落入所述指令区间,则采用所述汇编指令的高位地址与低位地址,生成所述OC函数的函数地址。
在本发明的一种可选实施例中,所述函数地址获取子模块具体还用于:
若所述汇编指令的高位地址与低位地址之间的位数差落于所述指令区间外,则判定原始符号所对应的OC函数不存在函数地址。
在本发明的一种可选实施例中,所述第二地址信息获取子模块具体用于:
将存在函数地址的原始符号作为目标符号,并获取所述目标符号的第二起始地址以及第二编译地址。
在本发明的一种可选实施例中,所述项目文件包括字符串表,所述类名表生成模块305包括:
类名称获取子模块,用于通过所述目标符号的第二起始地址以及第二编译地址,从所述字符串表中获取与所述OC函数对应的类名称;
类名表生成子模块,用于采用各个所述OC函数对应的类名称,输出针对所述项目文件的类名表。
在本发明的一种可选实施例中,还包括:
Hook函数获取模块,用于获取针对所述类文件的Hook函数;
动态库数据获取模块,用于在所述项目文件编译的过程中,通过所述Hook函数获取类文件对应的动态库数据。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本发明实施例还提供了一种电子设备,包括:
一个或多个处理器;和
其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述电子设备执行本发明实施例所述的方法。
本发明实施例还提供了一种计算机可读存储介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行本发明实施例所述的方法。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(***)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种数据的处理方法和一种数据的处理装置,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (9)
1.一种数据的处理方法,其特征在于,包括:
获取应用程序的项目文件,以及所述项目文件对应的函数列表;
若所述函数列表中存在OC函数,则获取与所述项目文件匹配的符号表,所述符号表中包括与所述OC函数对应的原始符号;
对所述符号表进行反汇编,获得所述原始符号对应的汇编指令;
根据所述原始符号对应的汇编指令,从所述符号表中选取针对所述OC函数的目标符号,并获取所述目标符号的地址信息;
根据所述目标符号的地址信息,生成针对所述项目文件的类名表;
其中,所述地址信息包括起始地址以及编译地址,所述根据所述原始符号对应的汇编指令,从所述符号表中选取针对所述OC函数的目标符号,并获取所述目标符号的地址信息,包括:
分别获取各个所述原始符号的第一起始地址以及第一编译地址;
采用所述第一起始地址与所述第一编译地址,获取所述原始符号对应的汇编指令;
采用所述汇编指令,获取所述OC函数的函数地址;
将所述符号表中存在所述函数地址的OC函数所对应的原始符号,作为目标符号,并获取所述目标符号的第二起始地址以及第二编译地址。
2.根据权利要求1所述的方法,其特征在于,所述汇编指令至少包括高位地址以及低位地址,所述采用所述汇编指令,获取所述OC函数的函数地址,包括:
获取针对所述汇编指令的指令区间;
若所述汇编指令的高位地址与低位地址之间的位数差落入所述指令区间,则采用所述汇编指令的高位地址与低位地址,生成所述OC函数的函数地址。
3.根据权利要求2所述的方法,其特征在于,所述采用所述汇编指令,获取所述OC函数的函数地址,还包括:
若所述汇编指令的高位地址与低位地址之间的位数差落于所述指令区间外,则判定原始符号所对应的OC函数不存在函数地址。
4.根据权利要求1或2或3所述的方法,其特征在于,所述采用所述汇编指令,获取所述OC函数的函数地址,包括:
将存在函数地址的原始符号作为目标符号,并获取所述目标符号的第二起始地址以及第二编译地址。
5.根据权利要求4所述的方法,其特征在于,所述项目文件包括字符串表,所述根据所述目标符号的地址信息,生成针对所述项目文件的类名表,包括:
通过所述目标符号的第二起始地址以及第二编译地址,从所述字符串表中获取与所述OC函数对应的类名称;
采用各个所述OC函数对应的类名称,输出针对所述项目文件的类名表。
6.根据权利要求1所述的方法,其特征在于,所述项目文件包括类文件,所述方法还包括:
获取针对所述类文件的Hook函数;
在所述项目文件编译的过程中,通过所述Hook函数获取类文件对应的动态库数据。
7.一种数据的处理装置,其特征在于,包括:
文件信息获取模块,用于获取应用程序的项目文件,以及所述项目文件对应的函数列表;
符号表获取模块,用于若所述函数列表中存在OC函数,则获取与所述项目文件匹配的符号表,所述符号表中包括与所述OC函数对应的原始符号;
反汇编模块,用于对所述符号表进行反汇编,获得所述原始符号对应的汇编指令;
地址信息获取模块,用于根据所述原始符号对应的汇编指令,从所述符号表中选取针对所述OC函数的目标符号,并获取所述目标符号的地址信息;
类名表生成模块,用于根据所述目标符号的地址信息,生成针对所述项目文件的类名表;
其中,所述地址信息包括起始地址以及编译地址,所述地址信息获取模块,包括:
第一地址信息获取子模块,用于分别获取各个所述原始符号的第一起始地址以及第一编译地址;
汇编指令获取子模块,用于采用所述第一起始地址与所述第一编译地址,获取所述原始符号对应的汇编指令;
函数地址获取子模块,用于采用所述汇编指令,获取所述OC函数的函数地址;
第二地址信息获取子模块,用于将所述符号表中存在所述函数地址的OC函数所对应的原始符号,作为目标符号,并获取所述目标符号的第二起始地址以及第二编译地址。
8.一种电子设备,其特征在于,包括:
一个或多个处理器;和
其上存储有指令的一个或多个机器可读介质,当由所述一个或多个处理器执行时,使得所述电子设备执行如权利要求1-6任一项所述的方法。
9.一种计算机可读存储介质,其上存储有指令,当由一个或多个处理器执行时,使得所述处理器执行如权利要求1-6任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011497993.XA CN112596739B (zh) | 2020-12-17 | 2020-12-17 | 一种数据的处理方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011497993.XA CN112596739B (zh) | 2020-12-17 | 2020-12-17 | 一种数据的处理方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112596739A CN112596739A (zh) | 2021-04-02 |
CN112596739B true CN112596739B (zh) | 2022-03-04 |
Family
ID=75199192
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011497993.XA Active CN112596739B (zh) | 2020-12-17 | 2020-12-17 | 一种数据的处理方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112596739B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113190235B (zh) * | 2021-05-27 | 2022-05-10 | 武汉斗鱼鱼乐网络科技有限公司 | 一种代码的分析方法、装置、电子终端及存储介质 |
CN113946347B (zh) * | 2021-09-29 | 2022-07-08 | 北京五八信息技术有限公司 | 函数调用的检测方法、装置、电子设备及可读介质 |
CN113946346B (zh) * | 2021-09-30 | 2022-08-09 | 北京五八信息技术有限公司 | 一种数据处理方法、装置、电子设备及存储介质 |
CN114020693B (zh) * | 2021-10-19 | 2022-07-08 | 北京五八信息技术有限公司 | 一种头文件地址的获取方法、装置、电子设备及存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108132790A (zh) * | 2017-12-22 | 2018-06-08 | 广州酷狗计算机科技有限公司 | 检测无用代码的方法、装置及计算机存储介质 |
CN109918083A (zh) * | 2019-03-07 | 2019-06-21 | 北京智游网安科技有限公司 | 一种基于应用编程的安全处理方法、智能终端及存储介质 |
CN110532774A (zh) * | 2019-07-24 | 2019-12-03 | 阿里巴巴集团控股有限公司 | 钩子检查方法、装置、服务器及可读存储介质 |
CN110879709A (zh) * | 2019-11-29 | 2020-03-13 | 五八有限公司 | 无用代码的检测方法、装置、终端设备及存储介质 |
CN111881455A (zh) * | 2020-07-27 | 2020-11-03 | 绿盟科技集团股份有限公司 | 一种固件安全分析的方法及装置 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7246267B2 (en) * | 2001-10-01 | 2007-07-17 | Tektronix, Inc. | Logic analyzer having a disassembler employing symbol table information for identifying op-codes |
CN109814939B (zh) * | 2017-11-20 | 2021-10-15 | 华为技术有限公司 | 一种动态加载方法、目标文件的制作方法及装置 |
-
2020
- 2020-12-17 CN CN202011497993.XA patent/CN112596739B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108132790A (zh) * | 2017-12-22 | 2018-06-08 | 广州酷狗计算机科技有限公司 | 检测无用代码的方法、装置及计算机存储介质 |
CN109918083A (zh) * | 2019-03-07 | 2019-06-21 | 北京智游网安科技有限公司 | 一种基于应用编程的安全处理方法、智能终端及存储介质 |
CN110532774A (zh) * | 2019-07-24 | 2019-12-03 | 阿里巴巴集团控股有限公司 | 钩子检查方法、装置、服务器及可读存储介质 |
CN110879709A (zh) * | 2019-11-29 | 2020-03-13 | 五八有限公司 | 无用代码的检测方法、装置、终端设备及存储介质 |
CN111881455A (zh) * | 2020-07-27 | 2020-11-03 | 绿盟科技集团股份有限公司 | 一种固件安全分析的方法及装置 |
Non-Patent Citations (1)
Title |
---|
Mach-O简介及实际应用;皮拉夫大王;《https://www.cnblogs.com/dengzhuli/p/9952202.html》;20181113;第1-12页 * |
Also Published As
Publication number | Publication date |
---|---|
CN112596739A (zh) | 2021-04-02 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112596739B (zh) | 一种数据的处理方法和装置 | |
US7296261B2 (en) | Method for determining the degree to which changed code has been exercised | |
CN112100072B (zh) | 应用程序代码的静态检测方法、装置、设备及介质 | |
EP3365772B1 (en) | Missing include suggestions for external files | |
US8266588B2 (en) | Creating projects in a rational application developer workspace | |
US11579856B2 (en) | Multi-chip compatible compiling method and device | |
CN107273176B (zh) | 一种适配硬件架构的编译方法及装置 | |
CN105183592B (zh) | 用于支持性能分析的方法和装置 | |
CN112799677B (zh) | 一种编译期的hook方法、装置、设备及存储介质 | |
US7730451B2 (en) | Source server | |
JP2018156133A (ja) | コンパイラプログラム、情報処理装置およびコンパイル方法 | |
CN112000367B (zh) | 一种二进制库文件版本兼容性识别方法和装置 | |
CN116501378B (zh) | 一种逆向工程还原源代码的实现方法、装置和电子设备 | |
US9122550B2 (en) | Method and device for program installation | |
CN116578282A (zh) | 代码生成方法、装置、电子设备及介质 | |
CN114791811B (zh) | 一种基于元函数模板的汇编器实现方法 | |
CN111240987A (zh) | 移植程序检测方法、装置、电子设备及计算机可读存储介质 | |
CN114817047A (zh) | 编译器测试方法、用例生成方法及装置、指令存储结构 | |
US7873949B2 (en) | In source code suppression of binary analysis | |
CN113946347B (zh) | 函数调用的检测方法、装置、电子设备及可读介质 | |
Linford et al. | Performance analysis of openshmem applications with tau commander | |
CN115730305A (zh) | 应用程序的检测方法、装置、非易失性存储介质及处理器 | |
JP5891976B2 (ja) | コンパイル実行・管理方法、装置、及びプログラム | |
JP2009258796A (ja) | プログラム開発装置及びプログラム開発方法 | |
JP4983027B2 (ja) | チェックプログラム及びチェック方法 |
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 |