CN108446113B - 类名称获取方法、装置及电子设备 - Google Patents

类名称获取方法、装置及电子设备 Download PDF

Info

Publication number
CN108446113B
CN108446113B CN201810263949.9A CN201810263949A CN108446113B CN 108446113 B CN108446113 B CN 108446113B CN 201810263949 A CN201810263949 A CN 201810263949A CN 108446113 B CN108446113 B CN 108446113B
Authority
CN
China
Prior art keywords
address
class
obtaining
field
virtual function
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
Application number
CN201810263949.9A
Other languages
English (en)
Other versions
CN108446113A (zh
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.)
Wuhan Douyu Network Technology Co Ltd
Original Assignee
Wuhan Douyu Network Technology 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 Wuhan Douyu Network Technology Co Ltd filed Critical Wuhan Douyu Network Technology Co Ltd
Priority to CN201810263949.9A priority Critical patent/CN108446113B/zh
Publication of CN108446113A publication Critical patent/CN108446113A/zh
Application granted granted Critical
Publication of CN108446113B publication Critical patent/CN108446113B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages

Abstract

本发明提供的类名称获取方法、装置及电子设备,涉及应用开发技术领域。其中,类名称获取方法包括:获取待处理的类对象的虚函数表的表地址,并根据该表地址得到对应的对象地址,其中,所述对象地址指向对应的RTTICompleteObjectLocator结构;根据所述对象地址查找到对应的RTTICompleteObjectLocator结构,并获取该RTTICompleteObjectLocator结构中的pTypeDescriptor字段;根据所述pTypeDescriptor字段按照预设规则进行查找,以得到所述类对象的类名称。通过上述方法,可以改善现有技术中存在的类名称获取不便的问题。

Description

类名称获取方法、装置及电子设备
技术领域
本发明应用开发技术领域,具体而言,涉及一种类名称获取方法、装置及电子设备。
背景技术
随着智能设备的应用范围的不断扩大,应用于各类智能设备的应用软件也得到了广泛的关注。其中,在应用软件的开发过程中,开发人员可能需要根据一个对象的实例获取该对象所在类的名称。经发明人研究发现,在现有的技术中获取类名称的方式存在不便的问题。
发明内容
有鉴于此,本发明的目的在于提供一种类名称获取方法、装置及电子设备,以改善现有技术中类名称获取不便的问题。
为实现上述目的,本发明实施例采用如下技术方案:
一种类名称获取方法,包括:
获取待处理的类对象的虚函数表的表地址,并根据该表地址得到对应的对象地址,其中,所述对象地址指向对应的RTTICompleteObjectLocator结构;
根据所述对象地址查找到对应的RTTICompleteObjectLocator结构,并获取该RTTICompleteObjectLocator结构中的pTypeDescriptor字段;
根据所述pTypeDescriptor字段按照预设规则进行查找,以得到所述类对象的类名称。
在本发明实施例较佳的选择中,在上述类名称获取方法中,所述获取待处理的类对象的虚函数表的表地址,并根据该表地址得到对应的对象地址的步骤包括:
获取待处理的类对象的起始地址;
根据所述起始地址得到对应的虚函数表的表地址,其中,该表地址为所述起始地址中第一个4字节的整型值;
对所述表地址进行地址偏移处理以得到对应的对象地址。
在本发明实施例较佳的选择中,在上述类名称获取方法中,所述根据所述pTypeDescriptor字段按照预设规则进行查找,以得到所述类对象的类名称的步骤包括:
在所述pTypeDescriptor字段中找到name字段;
获取位于所述name字段位置的字符串,以得到所述类对象的类名称。
在本发明实施例较佳的选择中,在上述类名称获取方法中,在执行获取待处理的类对象的虚函数表的表地址的步骤之前,所述方法还包括:
判断待处理的类对象中是否存在虚函数表;
若不存在所述虚函数表,则判定获取类名称失败,若存在所述虚函数表,则执行获取待处理的类对象的虚函数表的表地址的步骤。
在本发明实施例较佳的选择中,在上述类名称获取方法中,在执行根据所述对象地址查找到对应的RTTICompleteObjectLocator结构的步骤之前,所述方法还包括:
判断是否有启用运行时信息,其中,所述运行时信息包括RTTICompleteObjectLocator结构的信息;
若未启用运行时信息,则判定获取类名称失败,若有启用运行时信息,则执行根据所述对象地址查找到对应的RTTICompleteObjectLocator结构的步骤。
本发明实施例还提供了一种类名称获取装置,包括:
地址获取模块,用于获取待处理的类对象的虚函数表的表地址,并根据该表地址得到对应的对象地址,其中,所述对象地址指向对应的RTTICompleteObjectLocator结构;
字段获取模块,用于根据所述对象地址查找到对应的RTTICompleteObjectLocator结构,并获取该RTTICompleteObjectLocator结构中的pTypeDescriptor字段;
类名称获取模块,用于根据所述pTypeDescriptor字段按照预设规则进行查找,以得到所述类对象的类名称。
在本发明实施例较佳的选择中,在上述类名称获取装置中,所述地址获取模块包括:
起始地址获取子模块,用于获取待处理的类对象的起始地址;
表地址获取子模块,用于根据所述起始地址得到对应的虚函数表的表地址,其中,该表地址为所述起始地址中第一个4字节的整型值;
对象地址获取子模块,用于对所述表地址进行地址偏移处理以得到对应的对象地址。
在本发明实施例较佳的选择中,在上述类名称获取装置中,所述类名称获取模块包括:
字段获取子模块,用于在所述pTypeDescriptor字段中找到name字段;
类名称获取子模块,用于获取位于所述name字段位置的字符串,以得到所述类对象的类名称。
本发明实施例还提供了一种电子设备,包括存储器、处理器和类名称获取装置,所述类名称获取装置包括一个或多个存储于所述存储器中并由所述处理器执行的软件功能模块,其中,所述软件功能模块包括:
地址获取模块,用于获取待处理的类对象的虚函数表的表地址,并根据该表地址得到对应的对象地址,其中,所述对象地址指向对应的RTTICompleteObjectLocator结构;
字段获取模块,用于根据所述对象地址查找到对应的RTTICompleteObjectLocator结构,并获取该RTTICompleteObjectLocator结构中的pTypeDescriptor字段;
类名称获取模块,用于根据所述pTypeDescriptor字段按照预设规则进行查找,以得到所述类对象的类名称。
本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述类名称获取方法的步骤。
本发明提供的类名称获取方法、装置及电子设备,基于虚函数表可以查找到对应的RTTICompleteObjectLocator结构,并通过RTTICompleteObjectLocator结构,可以快速、有效地获取到待处理的类对象的类名称,从而改善现有技术中存在的获取类对象的类名称不便的问题,极大地提高了开发人员的开发效率。
进一步地,通过在执行获取虚函数表的表地址的步骤或执行查找RTTICompleteObjectLocator结构的步骤之前,对是否存在虚函数表或是否有启用运行时信息进行判断,并在没有时判定获取类名称失败,可以避免直接执行上述获取或查找步骤而导致处理器执行该步骤存在资源浪费的问题。
为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。
附图说明
图1为本发明实施例提供的电子设备的结构框图。
图2为本发明实施例提供的类名称获取方法的流程示意图。
图3为图2中步骤S110的流程示意图。
图4为图2中步骤S130的流程示意图。
图5为本发明实施例提供的类名称获取方法的另一流程示意图。
图6为本发明实施例提供的类名称获取方法的另一流程示意图。
图7为本发明实施例提供的类名称获取装置的结构框图。
图8为本发明实施例提供的地址获取模块的结构框图。
图9为本发明实施例提供的类名称获取模块的结构框图。
图10为本发明实施例提供的类名称获取装置的另一结构框图。
图11为本发明实施例提供的类名称获取装置的另一结构框图。
图标:10-电子设备;12-存储器;14-处理器;100-类名称获取装置;110-地址获取模块;111-起始地址获取子模块;113-表地址获取子模块;115-对象地址获取子模块;120-字段获取模块;130-类名称获取模块;131-字段获取子模块;133-类名称获取子模块;150-虚函数表判断模块;160-第一获取失败判定模块;180-运行时信息判断模块;190-第二获取失败判定模块。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例只是本发明的一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。
因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为只是或暗示相对重要性。
在通过C++语言进行应用软件的开发过程中,可能需要根据一个对象的实例,获取该对象所在类的名称。通过发明人的长期研究,发现应用软件对应的计算机程序在编译启用了运行时信息的C++可执行文件中,编译器可向该可执行文件内部添加一些其它信息。
并且,可以得知在前述信息中包括有RTTICompleteObjectLocator结构。进一步地,通过该RTTICompleteObjectLocator结构进行分析,可以从中获取到对应类对象的名称。
如图1所示,本发明实施例基于上述研究发现提供了一种电子设备10,包括存储器12、处理器14和类名称获取装置100。
所述存储器12和处理器14之间直接或间接地电性连接,以实现数据的传输或交互。例如,这些元件相互之间可通过一条或多条通讯总线或信号线实现电性连接。所述类名称获取装置100包括至少一个可以软件或固件(firmware)的形式存储于所述存储器12中的软件功能模块。所述处理器14用于执行所述存储器12中存储的可执行的计算机程序,例如,所述类名称获取装置100所包括的软件功能模块及计算机程序等,以实现类名称获取方法。
其中,所述存储器12可以是,但不限于,随机存取存储器(Random Access Memory,RAM),只读存储器(Read Only Memory,ROM),可编程只读存储器(Programmable Read-OnlyMemory,PROM),可擦除只读存储器(Erasable Programmable Read-Only Memory,EPROM),电可擦除只读存储器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。其中,存储器12用于存储程序,所述处理器14在接收到执行指令后,执行所述程序。
所述处理器14可能是一种集成电路芯片,具有信号的处理能力。上述的处理器14可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(DSP)、专用集成电路(ASIC)、现场可编程门阵列(FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
可以理解,图1所示的结构仅为示意,所述电子设备10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。图1中所示的各组件可以采用硬件、软件或其组合实现。
可选地,所述电子设备10的具体类型不受限制,例如,可以是,但不限于,智能手机、个人电脑(personal computer,PC)、平板电脑、个人数字助理(personal digitalassistant,PDA)、移动上网设备(mobile Internet device,MID)、web(网站)服务器、数据服务器、电脑、移动上网设备(mobile Internet device,MID)等具有处理功能的设备。
结合图2,本发明实施例还提供一种可应用于上述电子设备10的类名称获取方法。其中,所述方法有关的流程所定义的方法步骤可以由所述处理器14实现。下面将对图2所示的具体流程进行详细阐述。
步骤S110,获取待处理的类对象的虚函数表的表地址,并根据该表地址得到对应的对象地址。
在本实施例中,考虑到在C++语言中,若一个类具有虚函数,则该类具有一个虚函数表。并且,该虚函数表与对应的RTTICompleteObjectLocator结构在地址上具有一定的关系。因此,可以通过获取虚函数表的表地址以获取对应的对象地址。其中,所述对象地址指向对应的RTTICompleteObjectLocator结构。
步骤S120,根据所述对象地址查找到对应的RTTICompleteObjectLocator结构,并获取该RTTICompleteObjectLocator结构中的pTypeDescriptor字段。
在本实施例中,由于所述对象地址指向对应的RTTICompleteObjectLocator结构,也就是说,所述RTTICompleteObjectLocator结构的地址为所述对象地址。因此,可以通过所述对象地址查找到对应的RTTICompleteObjectLocator结构。
其中,所述RTTICompleteObjectLocator结构包括5个字段,依次分别是,signature签名字段、offset字段、cdsffset字段、pTypeDescriptor字段以及pClassHierarchyDescriptor字段。
步骤S130,根据所述pTypeDescriptor字段按照预设规则进行查找,以得到所述类对象的类名称。
在本实施例中,所述pTypeDescriptor字段指向TypeDescriptor结构。通过获取所述TypeDescriptor结构所代表的类的名称,可以获取到所述类对象的类名称。
可选地,执行不受S110以获取对象地址的方式不受限制,根据所述类对象与所述虚函数的对应关系不同以及所述对象地址与所述表地址的对应关系不同可以有不同的选择。在本实施例中,结合图3,步骤S110可以包括步骤S111、步骤S113以及步骤S115。
步骤S111,获取待处理的类对象的起始地址。
步骤S113,根据所述起始地址得到对应的虚函数表的表地址。
在本实施例中,考虑到所述虚函数表可以位于所述类对象的起始地址位置,并且,所述表地址为所述起始地址中第一个4字节的整型值,因此,可以通过所述起始地址得到所述表地址。
步骤S115,对所述表地址进行地址偏移处理以得到对应的对象地址。
在C++程序语言中,所述对象地址与所述表地址一般会存在一个固定的偏移量,因此,可以通过该偏移量对所述表地址进行地址偏移处理以得到所述对象地址。其中,所述偏移量可以为4,也就是说对象地址等于表地址减4。
可选地,执行步骤S130以得到类名称的方式不受限制,可以根据实际应用中pTypeDescriptor结构的结构类型进行设置。在本实施例中,考虑到所述pTypeDescriptor结构中一般包括3个字段,依次分别是pVFTable字段、spare字段以及name字段,结合图4,步骤S130可以包括步骤S131和步骤S133。
步骤S131,在所述pTypeDescriptor字段中找到name字段。
在本实施例中,考虑到所述name字段指向TypeDescriptor结构中所代表的类的名称,因此,可以基于所述pTypeDescriptor字段查找到TypeDescriptor结构,并在所述TypeDescriptor结构中查找到所述name字段。
步骤S133,获取位于所述name字段位置的字符串,以得到所述类对象的类名称。
在本实施例中,考虑到位于所述name字段位置的字符串保存有所述类对象的类名称,因此,可以通过获取位于所述name字段位置的字符串,以得到所述类对象的类名称。
进一步地,考虑到在C++语言中,一个类也有可能不具有虚函数表,因此,若直接执行步骤S110,难以有效地获取到虚函数表的表地址,可能会导致处理器14存在资源浪费以及进行死循环的问题,因此,在本实施例中,结合图5,在执行步骤S110之前,所述类名称获取方法还可以包括步骤S150和步骤S160。
步骤S150,判断待处理的类对象中是否存在虚函数表。
步骤S160,若不存在所述虚函数表,则判定获取类名称失败,若存在所述虚函数表,则执行步骤S110。
在本实施例中,在基于不存在虚函数表判定获取类名称失败时,可以及时终止处理器14进行程序的执行,进而避免造成资源浪费或进入死循环的问题。并且,还可以生成对应的通知信息,以通知开发人员。
基于与上述相同的考虑,若在程序的编译过程中未开启运行时信息,则在执行步骤S120时,难以根据所述对象地址查找到对应的RTTICompleteObjectLocator结构,并进一步地导致处理器14存在资源浪费或进入死循环的问题,在本实施例中,结合图6,为避免上述问题,在执行步骤S120之前,所述类名称获取方法还可以包括步骤S180和步骤S190。
步骤S180,判断是否有启用运行时信息。
步骤S190,若未启用运行时信息,则判定获取类名称失败,若有启用运行时信息,则执行步骤S120。
在本实施例中,所述运行时信息包括RTTICompleteObjectLocator结构的信息。在基于未启用运行时信息判定获取类名称失败时,可以及时终止处理器14进行程序的执行,进而避免造成资源浪费或进入死循环的问题。并且,还可以生成对应的通知信息,以通知开发人员。
结合图7,本发明实施例还提供一种可应用于上述电子设备10的类名称获取装置100。其中,所述类名称获取装置100可以包括地址获取模块110、字段获取模块120以及类名称获取模块130。
所述地址获取模块110,用于获取待处理的类对象的虚函数表的表地址,并根据该表地址得到对应的对象地址,其中,所述对象地址指向对应的RTTICompleteObjectLocator结构。在本实施例中,所述地址获取模块110可用于执行图2所示的步骤S110,关于所述地址获取模块110的具体描述可以参照前文对步骤S110的描述。
所述字段获取模块120,用于根据所述对象地址查找到对应的RTTICompleteObjectLocator结构,并获取该RTTICompleteObjectLocator结构中的pTypeDescriptor字段。在本实施例中,所述字段获取模块120可用于执行图2所示的步骤S120,关于所述字段获取模块120的具体描述可以参照前文对步骤S120的描述。
所述类名称获取模块130,用于根据所述pTypeDescriptor字段按照预设规则进行查找,以得到所述类对象的类名称。在本实施例中,所述类名称获取模块130可用于执行图2所示的步骤S130,关于所述类名称获取模块130的具体描述可以参照前文对步骤S130的描述。
进一步地,在本实施例中,结合图8,所述地址获取模块110可以包括起始地址获取子模块111、表地址获取子模块113以及对象地址获取子模块115。
所述起始地址获取子模块111,用于获取待处理的类对象的起始地址。在本实施例中,所述起始地址获取子模块111可用于执行图3所示的步骤S111,关于所述起始地址获取子模块111的具体描述可以参照前文对步骤S111的描述。
所述表地址获取子模块113,用于根据所述起始地址得到对应的虚函数表的表地址,其中,该表地址为所述起始地址中第一个4字节的整型值。所述表地址获取子模块113可用于执行图3所示的步骤S113,关于所述表地址获取子模块113的具体描述可以参照前文对步骤S113的描述。
所述对象地址获取子模块115,用于对所述表地址进行地址偏移处理以得到对应的对象地址。所述对象地址获取子模块115可用于执行图3所示的步骤S115,关于所述对象地址获取子模块115的具体描述可以参照前文对步骤S115的描述。
进一步地,在本实施例中,结合图9,所述类名称获取模块130可以包括字段获取子模块131和类名称获取子模块133。
所述字段获取子模块131,用于在所述pTypeDescriptor字段中找到name字段。所述字段获取子模块131可用于执行图4所示的步骤S131,关于所述字段获取子模块131的具体描述可以参照前文对步骤S131的描述。
所述类名称获取子模块133,用于获取位于所述name字段位置的字符串,以得到所述类对象的类名称。所述类名称获取子模块133可用于执行图4所示的步骤S133,关于所述类名称获取子模块133的具体描述可以参照前文对步骤S133的描述。
进一步地,在本实施例中,结合图10,所述类名称获取装置100还可以包括虚函数表判断模块150和第一获取失败判定模块160。
所述虚函数表判断模块150,用于判断待处理的类对象中是否存在虚函数表。所述虚函数表判断模块150可用于执行图5所示的步骤S150,关于所述虚函数表判断模块150的具体描述可以参照前文对步骤S150的描述。
所述第一获取失败判定模块160,用于在不存在所述虚函数表时,判定获取类名称失败,并在存在所述虚函数表时,执行获取待处理的类对象的虚函数表的表地址的步骤。所述第一获取失败判定模块160可用于执行图5所示的步骤S160,关于所述第一获取失败判定模块160的具体描述可以参照前文对步骤S160的描述。
进一步地,在本实施例中,结合图11,所述类名称获取装置100还可以包括运行时信息判断模块180和第二获取失败判定模块190。
所述运行时信息判断模块180,用于判断是否有启用运行时信息,其中,所述运行时信息包括RTTICompleteObjectLocator结构的信息。所述运行时信息判断模块180可用于执行图6所示的步骤S180,关于所述运行时信息判断模块180的具体描述可以参照前文对步骤S180的描述。
所述第二获取失败判定模块190,用于在未启用运行时信息时,判定获取类名称失败,并在有启用运行时信息,执行根据所述对象地址查找到对应的RTTICompleteObjectLocator结构的步骤。所述第二获取失败判定模块190可用于执行图6所示的步骤S190,关于所述第二获取失败判定模块190的具体描述可以参照前文对步骤S190的描述。
本发明实施例还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器14执行时实现上述类名称获取方法的步骤。
综上所述,本发明提供的类名称获取方法、装置及电子设备10,基于虚函数表可以查找到对应的RTTICompleteObjectLocator结构,并通过RTTICompleteObjectLocator结构,可以快速、有效地获取到待处理的类对象的类名称,从而改善现有技术中存在的获取类对象的类名称不便的问题,极大地提高了开发人员的开发效率。其次,通过在执行获取虚函数表的表地址的步骤或执行查找RTTICompleteObjectLocator结构的步骤之前,对是否存在虚函数表或是否有启用运行时信息进行判断,并在没有时判定获取类名称失败,可以避免直接执行上述获取或查找步骤而导致处理器14执行该步骤存在资源浪费的问题。
在本发明实施例所提供的几个实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置和方法实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的装置、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。
所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,电子设备,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (8)

1.一种类名称获取方法,其特征在于,包括:
判断待处理的类对象中是否存在虚函数表;
若存在所述虚函数表,则获取待处理的类对象的虚函数表的表地址,并根据该表地址得到对应的对象地址,其中,所述对象地址指向对应的RTTICompleteObjectLocator结构;
判断是否有启用运行时信息,其中,所述运行时信息包括RTTICompleteObjectLocator结构的信息;
若有启用运行时信息,则根据所述对象地址查找到对应的RTTICompleteObjectLocator结构,并获取该RTTICompleteObjectLocator结构中的pTypeDescriptor字段;
根据所述pTypeDescriptor字段按照预设规则进行查找,以得到所述类对象的类名称。
2.根据权利要求1所述的类名称获取方法,其特征在于,所述获取待处理的类对象的虚函数表的表地址,并根据该表地址得到对应的对象地址的步骤包括:
获取待处理的类对象的起始地址;
根据所述起始地址得到对应的虚函数表的表地址,其中,该表地址为所述起始地址中第一个4字节的整型值;
对所述表地址进行地址偏移处理以得到对应的对象地址。
3.根据权利要求1所述的类名称获取方法,其特征在于,所述根据所述pTypeDescriptor字段按照预设规则进行查找,以得到所述类对象的类名称的步骤包括:
在所述pTypeDescriptor字段中找到name字段;
获取位于所述name字段位置的字符串,以得到所述类对象的类名称。
4.一种类名称获取装置,其特征在于,包括:
虚函数表判别模块,用于判断待处理的类对象中是否存在虚函数表;
地址获取模块,用于当所述虚函数表判别模块判断所述待处理的类对象中存在虚函数表时,获取待处理的类对象的虚函数表的表地址,并根据该表地址得到对应的对象地址,其中,所述对象地址指向对应的RTTICompleteObjectLocator结构;
运行时信息判别模块,用于判断是否有启用运行时信息,其中,运行时信息包括RTTICompleteObjectLocator结构的信息;
字段获取模块,用于当所述运行时信息判别模块判断有启动运行时信息时,根据所述对象地址查找到对应的RTTICompleteObjectLocator结构,并获取该RTTICompleteObjectLocator结构中的pTypeDescriptor字段;
类名称获取模块,用于根据所述pTypeDescriptor字段按照预设规则进行查找,以得到所述类对象的类名称。
5.根据权利要求4所述的类名称获取装置,其特征在于,所述地址获取模块包括:
起始地址获取子模块,用于获取待处理的类对象的起始地址;
表地址获取子模块,用于根据所述起始地址得到对应的虚函数表的表地址,其中,该表地址为所述起始地址中第一个4字节的整型值;
对象地址获取子模块,用于对所述表地址进行地址偏移处理以得到对应的对象地址。
6.根据权利要求4所述的类名称获取装置,其特征在于,所述类名称获取模块包括:
字段获取子模块,用于在所述pTypeDescriptor字段中找到name字段;
类名称获取子模块,用于获取位于所述name字段位置的字符串,以得到所述类对象的类名称。
7.一种电子设备,其特征在于,包括存储器、处理器和类名称获取装置,所述类名称获取装置包括一个或多个存储于所述存储器中并由所述处理器执行的软件功能模块,其中,所述软件功能模块包括:
虚函数表判断模块,用于判断待处理的类对象中是否存在虚函数表;
地址获取模块,用于当所述虚函数表判断模块判断所述待处理的类对象中存在虚函数表时,获取待处理的类对象的虚函数表的表地址,并根据该表地址得到对应的对象地址,其中,所述对象地址指向对应的RTTICompleteObjectLocator结构;
运行时信息判断模块,用于判断是否有启用运行时信息,其中,运行时信息包括RTTICompleteObjectLocator结构的信息;
字段获取模块,用于当所述运行时信息判断模块判断有启动运行时信息时,根据所述对象地址查找到对应的RTTICompleteObjectLocator结构,并获取该RTTICompleteObjectLocator结构中的pTypeDescriptor字段;
类名称获取模块,用于根据所述pTypeDescriptor字段按照预设规则进行查找,以得到所述类对象的类名称。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现权利要求1-3任意一项所述方法的步骤。
CN201810263949.9A 2018-03-28 2018-03-28 类名称获取方法、装置及电子设备 Active CN108446113B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810263949.9A CN108446113B (zh) 2018-03-28 2018-03-28 类名称获取方法、装置及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810263949.9A CN108446113B (zh) 2018-03-28 2018-03-28 类名称获取方法、装置及电子设备

Publications (2)

Publication Number Publication Date
CN108446113A CN108446113A (zh) 2018-08-24
CN108446113B true CN108446113B (zh) 2021-06-15

Family

ID=63197567

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810263949.9A Active CN108446113B (zh) 2018-03-28 2018-03-28 类名称获取方法、装置及电子设备

Country Status (1)

Country Link
CN (1) CN108446113B (zh)

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9910680B2 (en) * 2014-04-22 2018-03-06 Oracle International Corporation Decomposing a generic class into layers

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
C++中RTTI机制剖析;pi9nc;《CSDN,https://blog.csdn.net/pi9nc/article/details/21742355》;20140321;第1-3页 *
RTTI实现详解;yes-hyh;《CSDN,https://blog.csdn.net/heyuhang112/article/details/41982929》;20141217;第1-6页 *

Also Published As

Publication number Publication date
CN108446113A (zh) 2018-08-24

Similar Documents

Publication Publication Date Title
CN106897072B (zh) 业务工程调用方法、装置及电子设备
US10481964B2 (en) Monitoring activity of software development kits using stack trace analysis
CN112434061B (zh) 支持循环依赖的任务调度方法和系统
CN107066519B (zh) 一种任务检测方法及装置
CN108334515B (zh) 一种处理崩溃文件中堆栈地址的方法、装置及系统
CN107391101B (zh) 一种信息处理方法及装置
CN107015904B (zh) 堆栈的保护方法及装置
CN108038665B (zh) 业务规则管理方法、装置、设备及计算机可读存储介质
CN111367595A (zh) 数据处理方法、程序运行方法、装置及处理设备
KR20230130089A (ko) 취약한 소프트웨어 패키지의 선택 및 발견을 위한 시스템및 방법
CN109992501B (zh) 小程序的可用性检查、可用小程序列表生成方法和装置
CN113641873B (zh) 数据处理方法、装置、电子设备及可读存储介质
CN105354490B (zh) 一种处理被劫持浏览器的方法及设备
CN112579146A (zh) 接口变化的检测方法及装置
CN106156050B (zh) 一种数据处理方法及装置
CN108446113B (zh) 类名称获取方法、装置及电子设备
CN105243134B (zh) 一种处理被劫持浏览器的方法及设备
CN111125721A (zh) 一种进程启动的控制方法、计算机设备和可读存储介质
CN111488144A (zh) 一种数据处理方法以及设备
CN108268775B (zh) 一种Web漏洞检测方法、装置、电子设备及存储介质
JP2014130546A (ja) ファイル管理プログラム、ファイル管理装置およびファイル管理方法
CN107145375B (zh) 内核加载方法、装置、系统、用户终端及存储介质
CN112115175B (zh) 云服务产品处理方法和装置、电子设备及存储介质
CN108573155B (zh) 检测漏洞影响范围的方法、装置、电子设备及存储介质
CN111273940B (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