CN112232027A - 一种符号翻译方法、装置、设备和计算机可读存储介质 - Google Patents

一种符号翻译方法、装置、设备和计算机可读存储介质 Download PDF

Info

Publication number
CN112232027A
CN112232027A CN202011120493.4A CN202011120493A CN112232027A CN 112232027 A CN112232027 A CN 112232027A CN 202011120493 A CN202011120493 A CN 202011120493A CN 112232027 A CN112232027 A CN 112232027A
Authority
CN
China
Prior art keywords
function
calling
symbol
link register
predefined
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.)
Pending
Application number
CN202011120493.4A
Other languages
English (en)
Inventor
李峰
张晓生
王俊俊
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Tencent Technology Shenzhen Co Ltd
Original Assignee
Tencent Technology Shenzhen Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Tencent Technology Shenzhen Co Ltd filed Critical Tencent Technology Shenzhen Co Ltd
Priority to CN202011120493.4A priority Critical patent/CN112232027A/zh
Publication of CN112232027A publication Critical patent/CN112232027A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/126Character encoding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本申请涉及人工智能领域,提供了一种符号翻译方法、装置、设备和计算机可读存储介质。所述方法包括:当应用程序通过预设入口函数调用第一对象方法时,拦截所述预设入口函数;将预设入口函数替换为新建函数;在新建函数中调用原系统函数之前,通过向第一预定义函数传入第二对象的指针、第二对象对应的第二对象方法名以及当前链接寄存器,调用第一预定义函数;通过调用原系统函数和第二对象对应的第二对象方法,并根据返回的链接寄存器的值,获取第一对象方法对应的函数符号。相比于现有技术,本申请提供的技术方案结合了人工智能技术,使得在应用程序崩溃时,亦能够实现符号翻译。

Description

一种符号翻译方法、装置、设备和计算机可读存储介质
技术领域
本申请涉及计算机软件领域,特别涉及一种符号翻译方法、装置、设备和计算机可读存储介质。
背景技术
应用,例如移动终端的App的崩溃(crash),通常是指因为执行了某些不被允许的操作,这个操作触发系统抛出异常而该异常又没有被及时处理,导致该应用被杀掉的现象。为了定位崩溃这一异常,需要获取到栈帧(frame)的返回地址,而栈帧的返回地址是十六进制的内存数据,需要将其转化为可读的符号即符号翻译。
现有的符号翻译方法是确认堆栈地址所属镜像文件,然后,通过该镜像文件的符号表,查询到函数调用地址对应的符号名即完成符号翻译。然而,在真机调试或应用使用Release模式时,为了优化方案,是将某些符号表存储到磁盘上的dSYM文件中,无法在运行时解析,因而无法执行上述现有的符号翻译方法。
发明内容
本申请实施例提供了一种符号翻译方法、装置、设备和计算机可读存储介质,以在真机调试或应用使用Release模式时亦能够实现符号翻译。该技术方案如下:
一方面,提供了一种符号翻译方法,该方法包括:
当应用程序通过预设入口函数调用第一对象方法时,拦截所述预设入口函数;
将所述预设入口函数替换为新建函数;
在所述新建函数中调用原系统函数之前,通过向第一预定义函数传入第二对象的指针、所述第二对象对应的第二对象方法名以及当前链接寄存器,调用所述第一预定义函数;
通过调用原系统函数和所述第二对象对应的第二对象方法,并根据返回的所述链接寄存器的值,获取所述第一对象方法对应的函数符号。
一方面,提供了一种符号翻译装置,该装置包括:
拦截模块,用于当应用程序通过预设入口函数调用第一对象方法时,拦截所述预设入口函数;
替换模块,用于将所述预设入口函数替换为新建函数;
第一调用模块,用于在所述新建函数中调用原系统函数之前,通过向第一预定义函数传入第二对象的指针、所述第二对象对应的第二对象方法名以及当前链接寄存器,调用所述第一预定义函数;
函数符号获取模块,用于通过调用原系统函数和所述第二对象对应的第二对象方法,并根据返回的所述链接寄存器的值,获取所述第一对象方法对应的函数符号。
一方面,提供了一种计算机设备,该计算设备包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,该计算机程序代码由该一个或多个处理器加载并执行以实现该符号翻译方法所执行的操作。
一方面,提供了一种计算机可读存储介质,该计算机可读存储介质存储有计算机程序由处理器加载并执行以实现该符号翻译方法所执行的操作。
从上述本申请提供的技术方案可知,由于可通过拦截预设入口函数将链接寄存器的值映射得到函数符号,而链接寄存器属于内存的某个存储单元,其属于动态保存的值,因此,与现有技术在真机调试或应用使用Release模式时,将某些符号表存储到磁盘上的dSYM文件而无法实现符号翻译相比,本申请提供的技术方案使得在应用程序崩溃时,亦能够实现符号翻译。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的符号翻译方法的流程图;
图2是本申请实施例提供的符号翻译的装置的应用场景示意图;
图3是本申请实施例提供的基于链接寄存器的方法栈回溯示意;
图4是本申请实施例提供的符号翻译装置的结构示意图;
图5是本申请实施例提供的计算机设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
本申请实施例基于计算机设备作为执行主体来进行介绍。此处的计算机设备可以是服务器,也可以是终端,其中,服务器可以是独立的物理服务器,也可以是多个物理服务器构成的服务器集群或者分布式系统,还可以是提供云服务、云数据库、云计算、云函数、云存储、网络服务、云通信、中间件服务、域名服务、安全服务、CDN、以及大数据和人工智能平台等基础云计算服务的云服务器,而终端可以是智能手机、平板电脑、笔记本电脑、台式计算机、智能音箱、智能手表等,但并不局限于此。上述终端以及服务器可以通过有线或无线通信方式进行直接或间接地连接,本申请在此不做限制。
本申请实施例实施的载体即云服务器,其具体是指在广域网或局域网内将硬件、软件、网络等系列资源统一起来,实现数据的计算、储存、处理和共享的一种托管技术的服务器,其中,云技术基于云计算商业模式应用的网络技术、信息技术、整合技术、管理平台技术、应用技术等的总称,可以组成资源池,按需所用,灵活便利。云技术需要大量的计算、存储资源,如视频网站、图片类网站和更多的门户网站。伴随着互联网行业的高度发展和应用,每个物品都存在自己的识别标志,都需要传输到后台系统进行逻辑处理,不同程度级别的数据将会分开处理,各类行业数据皆需要强大的系统后盾,通过云计算来实现。
如前所述,云技术需要大量的数据资源以及基于大量数据资源的计算能力,这必然涉及大数据和人工智能云服务等作为支撑基础,其中的大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产,而随着云技术时代的来临,大数据也吸引了越来越多的关注,大数据需要特殊的技术,以有效地处理大量的容忍经过时间内的数据,适用于大数据的技术包括大规模并行处理数据库、数据挖掘、分布式文件系统、分布式数据库、云计算平台、互联网和可扩展的存储系统。
另一方面,人工智能(Artificial Intelligence,AI)与上述的大数据和/或云技术相结合,产生了人工智能云服务即AIaaS(AI as a Service)。AIaaS是目前主流的一种人工智能平台的服务方式,具体而言,AIaaS平台将几类常见的AI服务进行拆分,并在云端提供独立或者打包的服务。AI是利用数字计算机或者数字计算机控制的机器模拟、延伸和扩展人的智能,感知环境、获取知识并使用知识获得最佳结果的理论、方法、技术及应用系统。换言之,人工智能是计算机科学的一个综合技术,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器;另外,AI也就是研究各种智能机器的设计原理与实现方法,使机器具有感知、推理与决策的功能,涉及领域广泛,既有硬件层面的技术也有软件层面的技术,其中,软件层面的技术主要包括计算机视觉技术、语音处理技术、自然语言处理技术以及机器学习/深度学习等几大方向。AIaaS类似于开了一个AI主题商城:所有的开发者都可以通过API接口的方式来接入使用平台提供的一种或者是多种人工智能服务,部分资深的开发者还可以使用平台提供的AI框架和AI基础设施来部署和运维自已专属的云人工智能服务。
请参阅图1,图1为本申请实施例提供的符号翻译的装置的应用场景示意图。该系统可以包括至少一个终端1000,至少一个服务器2000,至少一个数据库3000,以及网络4000。用户持有的终端1000可以通过网络4000连接到不同服务器。终端1000是具有计算硬件的任何设备,该计算硬件能够支持和执行对应的产品。另外,终端1000具有用于感测和获得用户通过在一个或者多个触控显示屏的多个点执行的触摸或者滑动操作的输入的一个或者多个多触敏屏幕。另外,当系统包括多个终端1000、多个服务器2000、多个网络4000时,不同的终端1000可以通过不同的网络4000、通过不同的服务器2000相互连接。网络4000可以是无线网络或者有线网络,比如无线网络为无线局域网(WLAN)、局域网(LAN)、蜂窝网络、2G网络、3G网络、4G网络、5G网络等。另外,不同的终端1000之间也可以使用自身的蓝牙网络或者热点网络连接到其他终端或者连接到服务器等。例如,多个用户可以通过不同的终端1000在线从而通过适当网络连接并且相互同步,以支持多个用户同时操作。另外,该系统可以包括多个数据库3000,多个数据库3000耦合到不同的服务器2000,并且可以将相关信息在不同用户在线进行操作时连续地存储于数据库3000中。
现有的符号翻译方法,是先确认堆栈地址所属镜像文件,然后,通过该镜像文件的符号表,查询到函数调用地址对应的符号名即完成符号翻译。然而,在真机调试或应用使用Release模式时,为了优化方案,是将某些符号表存储到磁盘上的dSYM文件中,无法在运行时解析,因而无法执行上述现有的符号翻译方法。鉴于此,本申请提供一种符号翻译方法,以解决现有提取文本关键词时精度不高的问题。参见图2,是本申请实施例提供的一种符号翻译方法,该方法主要包括以下步骤S201至S204,详细说明如下:
步骤S201:当应用程序通过预设入口函数调用第一对象方法时,拦截预设入口函数。
本申请的技术方案可以苹果操作系统iOS为例来进行说明。基于iOS系统的应用开发所使用的Objective-C,是一种通过提供类定义、方法以及属性的动态语言,其所有的方法调用经过编译器处理都会转化为objc_msgSend系列的函数的调用,即所有方法调用都会归结到统一的入口。因此,在本申请实施例中,预设入口函数可以是objc_msgSend。当应用程序通过预设入口函数objc_msgSend调用任一对象方法时,可通过钩子(hook)函数将该预设入口函数进行拦截,其中,钩子函数通过跳转或者修改函数表来实现在系统或第三方函数调用前执行到设定的函数,或通过重新绑定二进制动态符号地址的方式完成预设入口函数的替换。假设定义了Demo这个类,其实例化的对象包括A和B,对象A和对象B对应的对象方法分别为A.test-a()和B.test-b()。在后续的说明中,将对象A称为第一对象,其对应的对象方法A.test-a()称为第一对象方法,将对象B称为第二对象,其对应的对象方法B.test-a()称为第二对象方法。当应用程序通过预设入口函数调用第一对象方法A.test-a()时,拦截预设入口函数objc_msgSend。
步骤S202:将预设入口函数替换为新建函数。
在本发明实施例中,当通过上述描述的钩子函数捕捉到预设入口函数后,将该预设入口函数将要调用的整个程序进程在系统挂起,并将预设入口函数替换为新建函数,其中,新建函数是自定义的实现new_objc_msgSend,钩子函数可通过重新绑定二进制动态符号地址的方式完成。如此,每一次对象方法的调用都会进入new_objc_msgSend的实现中。
步骤S203:在新建函数中调用原系统函数之前,通过向第一预定义函数传入第二对象的指针、第二对象对应的第二对象方法名以及当前链接寄存器,调用第一预定义函数。
在本申请实施例中,第一预定义函数是在新建函数中被调用,并且,是位于原系统函数之前被新建函数调用。通常而言,使用钩子“勾住”预设函数(例如,上述实施例的原系统函数objc_msgSend)的目的,就是欲记录方法的上下文信息,例如度量慢函数的时间,则需要其方法名、所属类以及其上层调用方法和历史堆栈等,或者,自定义对一些事件的记录、处理等。在本申请实施例中,可以通过自定义一个函数即第一预定义函数pre_objc_msgSend来实现,伪代码如下:
Figure BDA0002731851870000071
上述第一预定义函数pre_objc_msgSend中,参数self、SEL_cmd和lr分别表示第二对象的指针、所述第二对象对应的第二对象方法名以及当前链接寄存器。
如前所述,是通过第一预定义函数pre_objc_msgSend来实现在调用原系统函数objc_msgSend之前,自定义对一些事件的记录、处理等。由于本申请实施例中,除了需要获知第一对象方法名对应第一函数符号之外,还需要得到第二对象方法名对应第二函数符号。这可以通过在调用第一预定义函数在调用第一预定义函数之后,在第一预定义函数中实现,即,在第一预定义函数中,将第二对象的标识和第二对象方法名组成第二函数符号,保存链接寄存器的值与第二函数符号的对应关系。
在上述对第一预定义函数的调用过程中,还可以在调用第一预定义函数之前,通过调用保存函数记录上下文,在调用第一预定义函数之后,通过调用加载函数恢复上下文。
步骤S204:通过调用原系统函数和第二对象对应的第二对象方法,并根据返回的链接寄存器的值,获取第一对象方法对应的函数符号。
由于第一对象方法和第二对象方法的调用具有任意性,即,第一对象方法是被应用程序调用的任意一个方法,第二对象方法是被第一对象方法调用的任意一个方法,因此,在应用程序发生崩溃(crash)时,找到调用和被调用的方法对应的函数符号是定位问题的第一步要完成的工作。在iOS中,任意一个方法对另一方法的调用,都会归结为原系统函数objc_msgSend的调用与被调用。
作为本申请一个实施例,通过调用原系统函数和第二对象对应的第二对象方法,并根据返回的链接寄存器的值,获取第一对象方法对应的函数符号可以是:通过调用第二对象方法,得到返回的链接寄存器的值,将返回的寄存器的值映射为第一方法对象对应的函数符号,其中,返回的链接寄存器的值为调用第二对象方法完成之后将要执行的下一条指令的地址。此处需要说明的是,iOS是OS真机是使用ARM64汇编进行编写,ARM64有32个长度为64bit的通用寄存器:x0~x30和sp,可以只使用其中的32bit:w0~w30,其中,前8个寄存器x0~x7用于函数调用时传参,同时,x0寄存器也可以作为函数返回值的寄存器。x8寄存器用于间接寻址(当函数返回的内容大于16Bytes时,该返回内容会被放入到内存中,然后将该内存地址存入x8寄存器)。几个特殊寄存器含义解释如下:
sp寄存器:指向当前栈帧的栈顶(低地址),可以通过移动sp的位置为栈分配或释放内存空间;
x29号寄存器:通常作为fp寄存器,指向当前栈帧的栈底(高地址);
x30号寄存器:通常作为链接寄存器(lr),其主要是保存子程序的返回地址,或者当异常发生时,用于保存异常的返回地址;
pc即程序计数器:指向下一条指令。
此处要特别说明的是,链接寄存器(lr)的值为调用一个对象方法完成之后将要执行的下一条指令的地址,换言之,lr总是指向方法调用结束阶段返回的上层方法的地址。例如,三个方法A、B和C之间存在调用关系为A调用B,B调用C,其通过方法栈回溯示意如附图3所示。从附图3可知,方法B的调用结束后,其返回的链接寄存器对指向方法A的链接寄存器。
如前所述,由于返回的链接寄存器的值为调用第二对象方法完成之后将要执行的下一条指令的地址,因此,将返回的寄存器的值映射为第一方法对象对应的函数符号具体可以是:在发生应用程序的崩溃(crash)以后,通过系统API会得到一个lr的顺序列表,通过返回的寄存器的值,去匹配整个lr的顺序列表,在整个lr的顺序列表中,若匹配到一个lr,则该lr的上一个地址其对应的函数符号即第一方法对象对应的函数符号。
在本申请一个实施例中,通过调用第二对象方法,得到返回的链接寄存器的值可以是:调用原系统函数,在原系统函数中调用第二对象方法,返回链接寄存器的值。
如前所述,链接寄存器(lr)主要用于保存子程序的返回地址,或者当异常发生时,用于保存异常的返回地址。换言之,链接寄存器记录函数调用完成时的返回地址。然而,经历了多次其他方法的调用,链接寄存器的值是否正确不得而知,因此,在新建函数new_objc_msgSend方法的最后,需要将链接寄存器的值进行恢复,即,在新建函数中调用原系统函数之后,调用第二预定义函数,以还原链接寄存器的值。
如调用第一预定义函数时可以对上下文进行记录和恢复类似,在本申请实施例中,在上述对第二预定义函数的调用过程中,还可以在调用第二预定义函数之前,通过调用保存函数记录上下文,在调用第二预定义函数之后,通过调用加载函数恢复上下文。
从上述附图1示例的技术方案可知,由于可通过拦截预设入口函数将链接寄存器的值映射得到函数符号,而链接寄存器属于内存的某个存储单元,其属于动态保存的值,因此,与现有技术在真机调试或应用使用Release模式时,将某些符号表存储到磁盘上的dSYM文件而无法实现符号翻译相比,本申请提供的技术方案使得在应用程序崩溃时,亦能够实现符号翻译。
请参阅附图4,是本申请实施例提供的一种符号翻译装置的结构示意图,该装置可以集成在终端等计算机设备中,该装置包括拦截模块401、替换模块402、第一调用模块403和函数符号获取模块404,其中:
拦截模块401,用于当应用程序通过预设入口函数调用第一对象方法时,拦截预设入口函数;
替换模块402,用于将预设入口函数替换为新建函数;
第一调用模块403,用于在新建函数中调用原系统函数之前,通过向第一预定义函数传入第二对象的指针、第二对象对应的第二对象方法名以及当前链接寄存器,调用第一预定义函数;
函数符号获取模块404,用于通过调用原系统函数和第二对象对应的第二对象方法,并根据返回的链接寄存器的值,获取第一对象方法对应的函数符号。
在一种可能实现方式中,函数符号获取模块404还可以包括主题第一调用单元单元和映射单元,其中:
第一调用单元,用于通过调用第二对象方法,得到返回的所述链接寄存器的值,其中,返回的链接寄存器的值为调用第二对象方法完成之后将要执行的下一条指令的地址;
映射单元,用于将返回的寄存器的值映射为第一方法对象对应的函数符号。
在一种可能实现方式中,上述实施例的第一调用单元还可以包括第二调用单元、第三调用单元和返回单元,其中:
第二调用单元,用于调用原系统函数;
第三调用单元,用于在原系统函数中调用第二对象方法;
返回单元,用于返回链接寄存器的值。
上述附图4示例的装置还可以包括组合模块和保存模块,其中:
组合模块,用于在第一预定义函数中,将第二对象的标识和第二对象方法名组成第二函数符号;
保存模块,用于保存链接寄存器的值与第二函数符号的对应关系。
在一种可能实现方式中,附图4示例的装置还可以包括第二调用模块,用于在新建函数中调用原系统函数之后,调用第二预定义函数,以还原链接寄存器的值。
在一种可能实现方式中,附图4示例的装置还可以包括第三调用模块和第四调用模块,其中:
第三调用模块,用于在调用第二预定义函数之前,通过调用保存函数记录上下文;
第四调用模块,用于在调用第二预定义函数之后,通过调用加载函数恢复上下文。
在一种可能实现方式中,附图4示例的装置还可以包括第五调用模块和第六调用模块,其中:
第五调用模块,用于在调用第一预定义函数之前,通过调用保存函数记录上下文;
第六调用模块,用于在调用第一预定义函数之后,通过调用加载函数恢复上下文。
需要说明的是,上述实施例提供的符号翻译装置在提取文本关键词时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的符号翻译装置与符号翻译方法实施例属于同一构思,其具体实现过程以及技术效果详见方法实施例,此处不再赘述。
本申请实施例还提供一种计算机设备,该计算机设备可以为终端或者服务器等设备,如图5所示,其示出了本申请实施例所涉及的计算机设备的结构示意图,具体来讲:
该计算机设备可以包括一个或者一个以上处理核心的处理器501、一个或一个以上计算机可读存储介质的存储器502、电源503和输入单元504等部件。本领域技术人员可以理解,图5中示出的计算机设备结构并不构成对计算机设备的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
处理器501是该计算机设备的控制中心,利用各种接口和线路连接整个计算机设备的各个部分,通过运行或执行存储在存储器502内的软件程序和/或模块,以及调用存储在存储器502内的数据,执行计算机设备的各种功能和处理数据,从而对计算机设备进行整体监控。可选的,处理器501可包括一个或多个处理核心;优选的,处理器501可集成应用处理器和调制解调处理器,其中,应用处理器主要处理操作系统、用户界面和应用程序等,调制解调处理器主要处理无线通信。可以理解的是,上述调制解调处理器也可以不集成到处理器501中。
存储器502可用于存储软件程序以及模块,处理器501通过运行存储在存储器502的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器502可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据计算机设备的使用所创建的数据等。此外,存储器502可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器502还可以包括存储器控制器,以提供处理器501对存储器502的访问。
计算机设备还包括给各个部件供电的电源503,可选地,电源503可以通过电源管理系统与处理器501逻辑相连,从而通过电源管理系统实现管理充电、放电、以及功耗管理等功能。电源503还可以包括一个或一个以上的直流或交流电源、再充电系统、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。
该计算机设备还可包括输入单元504,该输入单元504可用于接收输入的数字或字符信息,以及产生与用户设置以及功能控制有关的键盘、鼠标、操作杆、光学或者轨迹球信号输入。
尽管未示出,计算机设备还可以包括显示单元等,在此不再赘述。具体在本实施例中,计算机设备中的处理器501会按照如下的指令,将一个或一个以上的应用程序的进程对应的可执行文件加载到存储器502中,并由处理器501来运行存储在存储器502中的应用程序,从而实现各种功能,如下:当应用程序通过预设入口函数调用第一对象方法时,拦截所述预设入口函数;将预设入口函数替换为新建函数;在新建函数中调用原系统函数之前,通过向第一预定义函数传入第二对象的指针、第二对象对应的第二对象方法名以及当前链接寄存器,调用第一预定义函数;通过调用原系统函数和第二对象对应的第二对象方法,并根据返回的链接寄存器的值,获取第一对象方法对应的函数符号。
以上个操作的具体实施例可参见前面的实施例,在此不再赘述。
由以上可知,由于可通过拦截预设入口函数将链接寄存器的值映射得到函数符号,而链接寄存器属于内存的某个存储单元,其属于动态保存的值,因此,与现有技术在真机调试或应用使用Release模式时,将某些符号表存储到磁盘上的dSYM文件而无法实现符号翻译相比,本申请提供的技术方案使得在应用程序崩溃时,亦能够实现符号翻译。
本领域普通技术人员可以理解,上述实施例的各种方法中的全部或部分步骤可以通过指令来完成,或通过指令控制相关的硬件来完成,该指令可以存储于一计算机可读存储介质中,并由处理器进行加载和执行。
为此,本申请实施例提供一种计算机可读存储介质,其中存储有多条指令,该指令能够被处理器进行加载,以执行本申请实施例所提供的任一种符号翻译方法中的步骤。例如,该指令可以执行如下步骤:当应用程序通过预设入口函数调用第一对象方法时,拦截所述预设入口函数;将预设入口函数替换为新建函数;在新建函数中调用原系统函数之前,通过向第一预定义函数传入第二对象的指针、第二对象对应的第二对象方法名以及当前链接寄存器,调用第一预定义函数;通过调用原系统函数和第二对象对应的第二对象方法,并根据返回的链接寄存器的值,获取第一对象方法对应的函数符号。
以上各个操作的具体实施方式可参见前面的实施例,在此不再赘述。
其中,该计算机可读存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取记忆体(RAM,Random Access Memory)、磁盘或光盘等。
由于该计算机可读存储介质中所存储的指令,可以执行本申请实施例所提供的任一种符号翻译方法中的步骤,因此,可以实现本申请实施例所提供的任一种符号翻译方法所能实现的有益效果,详见前面的实施例,在此不再赘述。
以上对本申请实施例所提供的一种符号翻译方法、装置、设备和计算机可读存储介质进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上,本说明书内容不应理解为对本申请的限制。

Claims (10)

1.一种符号翻译方法,其特征在于,所述方法包括:
当应用程序通过预设入口函数调用第一对象方法时,拦截所述预设入口函数;
将所述预设入口函数替换为新建函数;
在所述新建函数中调用原系统函数之前,通过向第一预定义函数传入第二对象的指针、所述第二对象对应的第二对象方法名以及当前链接寄存器,调用所述第一预定义函数;
通过调用原系统函数和所述第二对象对应的第二对象方法,并根据返回的所述链接寄存器的值,获取所述第一对象方法对应的函数符号。
2.如权利要求1所述符号翻译方法,其特征在于,所述通过调用原系统函数和所述第二对象对应的第二对象方法,并根据返回的所述链接寄存器的值,获取所述第一对象方法对应的函数符号,包括:
通过调用所述第二对象方法,得到返回的所述链接寄存器的值,所述返回的链接寄存器的值为调用所述第二对象方法完成之后将要执行的下一条指令的地址;
将所述返回的寄存器的值映射为所述第一方法对象对应的函数符号。
3.如权利要求2所述符号翻译方法,其特征在于,所述通过调用所述第二对象方法,得到返回的所述链接寄存器的值,包括:
调用所述原系统函数;
在所述原系统函数中调用所述第二对象方法;
返回所述链接寄存器的值。
4.如权利要求1至3任意一项所述符号翻译方法,其特征在于,所述调用所述第一预定义函数之后,还包括:
在所述第一预定义函数中,将所述第二对象的标识和所述第二对象方法名组成第二函数符号;
保存所述链接寄存器的值与所述第二函数符号的对应关系。
5.如权利要求1至3任意一项所述符号翻译方法,其特征在于,所述方法还包括:
在所述新建函数中调用原系统函数之后,调用第二预定义函数,以还原所述链接寄存器的值。
6.如权利要求5所述符号翻译方法,其特征在于,所述方法还包括:
在调用所述第二预定义函数之前,通过调用保存函数记录上下文;
在调用所述第二预定义函数之后,通过调用加载函数恢复上下文。
7.如权利要求1至3任意一项所述符号翻译方法,其特征在于,所述方法还包括:
在调用所述第一预定义函数之前,通过调用保存函数记录上下文;
在调用所述第一预定义函数之后,通过调用加载函数恢复上下文。
8.一种符号翻译装置,其特征在于,所述装置包括:
拦截模块,用于当应用程序通过预设入口函数调用第一对象方法时,拦截所述预设入口函数;
替换模块,用于将所述预设入口函数替换为新建函数;
第一调用模块,用于在所述新建函数中调用原系统函数之前,通过向第一预定义函数传入第二对象的指针、所述第二对象对应的第二对象方法名以及当前链接寄存器,调用所述第一预定义函数;
函数符号获取模块,用于通过调用原系统函数和所述第二对象对应的第二对象方法,并根据返回的所述链接寄存器的值,获取所述第一对象方法对应的函数符号。
9.一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至7任意一项所述方法的步骤。
10.一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7任意一项所述方法的步骤。
CN202011120493.4A 2020-10-19 2020-10-19 一种符号翻译方法、装置、设备和计算机可读存储介质 Pending CN112232027A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011120493.4A CN112232027A (zh) 2020-10-19 2020-10-19 一种符号翻译方法、装置、设备和计算机可读存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011120493.4A CN112232027A (zh) 2020-10-19 2020-10-19 一种符号翻译方法、装置、设备和计算机可读存储介质

Publications (1)

Publication Number Publication Date
CN112232027A true CN112232027A (zh) 2021-01-15

Family

ID=74118956

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011120493.4A Pending CN112232027A (zh) 2020-10-19 2020-10-19 一种符号翻译方法、装置、设备和计算机可读存储介质

Country Status (1)

Country Link
CN (1) CN112232027A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113641422A (zh) * 2021-08-18 2021-11-12 北京沃东天骏信息技术有限公司 文件生成方法、装置、电子设备和计算机可读介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1477505A (zh) * 2002-08-24 2004-02-25 深圳市中兴通讯股份有限公司 嵌入式操作系统中异常故障定位方法
CN101539883A (zh) * 2009-05-05 2009-09-23 北京和利时系统工程有限公司 嵌入式系统的错误追踪方法和装置
JP2010287101A (ja) * 2009-06-12 2010-12-24 Oki Semiconductor Co Ltd ソフトウエアデバッグ装置及び方法
CN106919462A (zh) * 2015-12-25 2017-07-04 华为技术有限公司 一种生成处理器故障记录的方法及装置
CN109783161A (zh) * 2018-12-11 2019-05-21 北京三快在线科技有限公司 iOS系统中应用程序的运行信息确定方法、装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1477505A (zh) * 2002-08-24 2004-02-25 深圳市中兴通讯股份有限公司 嵌入式操作系统中异常故障定位方法
CN101539883A (zh) * 2009-05-05 2009-09-23 北京和利时系统工程有限公司 嵌入式系统的错误追踪方法和装置
JP2010287101A (ja) * 2009-06-12 2010-12-24 Oki Semiconductor Co Ltd ソフトウエアデバッグ装置及び方法
CN106919462A (zh) * 2015-12-25 2017-07-04 华为技术有限公司 一种生成处理器故障记录的方法及装置
CN109783161A (zh) * 2018-12-11 2019-05-21 北京三快在线科技有限公司 iOS系统中应用程序的运行信息确定方法、装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113641422A (zh) * 2021-08-18 2021-11-12 北京沃东天骏信息技术有限公司 文件生成方法、装置、电子设备和计算机可读介质

Similar Documents

Publication Publication Date Title
US10291704B2 (en) Networked solutions integration using a cloud business object broker
CN112257135B (zh) 一种基于多线程的模型加载方法、装置、存储介质及终端
US11526475B2 (en) Code generator platform for data transformation
WO2023065707A1 (zh) 一种页面显示方法及装置
CN107329991A (zh) 一种列表页访问和展示方法及其系统
CN107463422A (zh) 代码部署方法及装置、电子设备
CN113204353A (zh) 一种大数据平台组件部署方法及装置
US20240289104A1 (en) Deployment of a computing environment
CN112232027A (zh) 一种符号翻译方法、装置、设备和计算机可读存储介质
CN113282850A (zh) 资源标签管理方法、装置、电子设备、系统及存储介质
CN110958138B (zh) 一种容器扩容方法及装置
CN113590304A (zh) 一种业务数据处理方法、装置、计算机设备及存储介质
CN109582476B (zh) 数据处理方法、装置及系统
CN115237889A (zh) 数据库切换方法及装置、存储介质、计算机设备
CN112783860B (zh) 构造镜像数据库的方法、装置、存储介质及计算机设备
CN112691382B (zh) 资源处理方法、装置及计算机可读存储介质
CN113296913A (zh) 基于单集群的数据处理方法、装置、设备及存储介质
CN117579480B (zh) 一种云际分布式资源数据模型拓展和标注方法和系统
CN115629770A (zh) 一种软件部署方法、装置、存储介质和计算机设备
US20220261227A1 (en) Code Generation Tool for Cloud-Native High-Performance Computing
CN115934662A (zh) 文件共享方法、装置、电子设备和存储介质
CN115495215A (zh) 一种gpu共享方法、装置、设备及介质
CN116383295A (zh) 数据处理方法、装置、电子设备和计算机可读存储介质
WO2023219692A1 (en) Externally-initiated runtime type extension
CN111966507A (zh) 基于web的事件响应方法、装置、计算机设备和存储介质

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