CN109460255B - 内存地址的查询方法及装置 - Google Patents

内存地址的查询方法及装置 Download PDF

Info

Publication number
CN109460255B
CN109460255B CN201811343900.0A CN201811343900A CN109460255B CN 109460255 B CN109460255 B CN 109460255B CN 201811343900 A CN201811343900 A CN 201811343900A CN 109460255 B CN109460255 B CN 109460255B
Authority
CN
China
Prior art keywords
type
variable
query
memory address
memory
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
CN201811343900.0A
Other languages
English (en)
Other versions
CN109460255A (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.)
Beijing Qihoo Technology Co Ltd
Original Assignee
Beijing Qihoo 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 Beijing Qihoo Technology Co Ltd filed Critical Beijing Qihoo Technology Co Ltd
Priority to CN201811343900.0A priority Critical patent/CN109460255B/zh
Publication of CN109460255A publication Critical patent/CN109460255A/zh
Application granted granted Critical
Publication of CN109460255B publication Critical patent/CN109460255B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

本发明公开了一种内存地址的查询方法及装置。其中,该方法包括:获取查询请求中包含的查询变量的类型,判断所述查询变量的类型是否属于预设的自定义类型;若判断结果为是,根据预设的自定义脚本文件获取与所述查询变量的类型相对应的类型描述信息;根据所述与所述查询变量的类型相对应的类型描述信息,从内存布局信息中查询与所述查询变量相对应的变量内存地址。该方式拓宽了查询变量的类型,能够查询到多种多样的变量的内存地址,应用场景灵活多变,从而为程序的编译和调试提供了便利。

Description

内存地址的查询方法及装置
技术领域
本发明涉及计算机技术领域,具体涉及一种内存地址的查询方法及装置。
背景技术
程序在运行过程中,需要被加载到内存中,从而成为进程。由此可见,进程是正在运行的程序实体,并且包括这个运行的程序中占据的所有系统资源,比如CPU、寄存器、IO、内存、以及网络资源等。其中,内存属于进程运行过程中所需的一种重要资源,进程中的各个变量都需要在内存中分配对应的变量内存地址。
在对运行中的程序进行调试等诸多场合中,经常需要定位某一变量在内存中的变量内存地址。在现有技术中,能够通过内存搜索方式定位常规类型的变量在内存中的变量内存地址。例如,对于常见的整型类型或浮点型变量,能够直接基于变量的类型以及取值进行内存搜索。
但是,发明人在实现本发明的过程中发现,上述方式至少存在如下局限性:常规的内存搜索方式只能定位常规类型的变量的内存地址,无法识别自定义类型等扩展类型的变量,进而无法对这些扩展类型的变量进行内存定位,从而导致应用场景受限,为应用程序的编译和调试带来了诸多不便。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的内存地址的查询方法及装置。
根据本发明的一个方面,提供了内存地址的查询方法,包括:
获取查询请求中包含的查询变量的类型,判断所述查询变量的类型是否属于预设的自定义类型;
若判断结果为是,根据预设的自定义脚本文件获取与所述查询变量的类型相对应的类型描述信息;
根据所述与所述查询变量的类型相对应的类型描述信息,从内存布局信息中查询与所述查询变量相对应的变量内存地址。
根据本发明另一个方面,提供了内存地址的查询装置,包括:
判断模块,适于获取查询请求中包含的查询变量的类型,判断所述查询变量的类型是否属于预设的自定义类型;
获取模块,适于若判断结果为是,根据预设的自定义脚本文件获取与所述查询变量的类型相对应的类型描述信息;
查询模块,适于根据所述与所述查询变量的类型相对应的类型描述信息,从内存布局信息中查询与所述查询变量相对应的变量内存地址。
根据本发明的又一方面,提供了一种电子设备,包括:处理器、存储器、通信接口和通信总线,处理器、存储器和通信接口通过通信总线完成相互间的通信;
存储器用于存放至少一可执行指令,可执行指令使处理器执行上述内存地址的查询方法对应的操作。
根据本发明的再一方面,提供了一种计算机存储介质,存储介质中存储有至少一可执行指令,可执行指令使处理器执行如上述内存地址的查询方法对应的操作。
在本发明公开的内存地址的查询方法及装置中,当判断出查询变量的类型属于预设的自定义类型时,能够根据预设的自定义脚本文件获取与该查询变量的类型相对应的类型描述信息,进而根据该类型描述信息,从内存布局信息中查询与该查询变量相对应的变量内存地址。由此可见,在本发明的方式中,预先将自定义类型的变量所对应的类型描述信息存储到自定义脚本文件中,并在查询过程中结合该自定义脚本文件识别自定义类型的查询变量,从而对识别到的查询变量进行内存定位,从而拓宽了查询变量的类型,能够查询到多种多样的变量的内存地址,应用场景灵活多变,从而为程序的编译和调试提供了便利。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本发明一个实施例的内存地址的查询方法的流程示意图;
图2示出了本发明另一个实施例的内存地址的查询方法的流程示意图;
图3示出了本发明又一实施例的一种内存地址的查询装置的装置结构图;
图4示出了根据本发明实施例的一种电子设备的结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
图1示出了本发明一个实施例的内存地址的查询方法的流程示意图。如图1所示,该方法包括:
步骤S110:获取查询请求中包含的查询变量的类型,判断该查询变量的类型是否属于预设的自定义类型。
其中,查询变量的类型可以根据查询请求中包含的查询变量的类型标识确定,例如,本发明预先定义了各种类型的变量所对应的类型标识,通过在查询请求中包含对应的类型标识即可快速确定查询变量的类型。在判断查询变量的类型是否属于预设的自定义类型时,可以根据预设类型表进行判断。该预设类型表用于存储各种预设的自定义类型的类型名称和/或类型标识。其中,预设的自定义类型是指:除常规变量类型之外的、由用户在编程过程中自定义编写的变量类型。
步骤S120:若判断结果为是,根据预设的自定义脚本文件获取与该查询变量的类型相对应的类型描述信息。
其中,该预设的自定义脚本文件用于存储与各种预设的自定义类型相对应的类型描述信息。每种类型的类型描述信息用于定义该类型的变量的变量特征。例如,以结构体类型的变量而言,其对应的类型描述信息用于定义结构体类型中包含的所有变量的变量数量以及变量类型,以便对该结构体类型的变量的特征进行描述。由此可见,类型描述信息相当于是针对自定义类型进行声明的声明文件,以便为该自定义类型赋予相应的类型定义。
步骤S130:根据与该查询变量的类型相对应的类型描述信息,从内存布局信息中查询与该查询变量相对应的变量内存地址。
其中,内存布局信息用于存储内存空间所包含的各个内存地址及其对应的存储对象。该内存布局信息可以是针对于预设程序的内存布局信息,也可以是系统中的所有程序的内存布局信息,本发明对此不做限定。由于类型描述信息能够定义要查询的变量的类型特征,相应地,基于该类型描述信息所描述的类型特征,即可从内存布局信息中存储的各个存储对象中确定与该类型描述信息所描述的类型特征匹配的存储对象,并将该匹配的存储对象的内存地址确定为与该查询变量相对应的变量内存地址。
在本发明公开的内存地址的查询方法中,当判断出查询变量的类型属于预设的自定义类型时,能够根据预设的自定义脚本文件获取与该查询变量的类型相对应的类型描述信息,进而根据该类型描述信息,从内存布局信息中查询与该查询变量相对应的变量内存地址。由此可见,在本发明的方式中,预先将自定义类型的变量所对应的类型描述信息存储到自定义脚本文件中,并在查询过程中结合该自定义脚本文件识别自定义类型的查询变量,从而对识别到的查询变量进行内存定位,从而拓宽了查询变量的类型,能够查询到多种多样的变量的内存地址,应用场景灵活多变,从而为程序的编译和调试提供了便利。
图2示出了本发明另一个实施例的内存地址的查询方法的流程示意图。
如图2所示,该方法包括:
步骤S200:预先生成预设的自定义脚本文件,并在该预设的自定义脚本文件中存储与各种预设的自定义类型相对应的类型描述信息。
其中,该预设的自定义脚本文件可以为Lua脚本文件,Lua脚本文件具有轻量小巧的优势,不占用过多的系统资源,也不会对系统运行造成任何影响。该预设的自定义脚本文件用于存储与各种预设的自定义类型相对应的类型描述信息。其中,预设的自定义类型包括以下中的至少一个:结构体类型、共用体类型、枚举类型、以及类类型。其中,很多编程语言,例如C++语言,都允许用户根据需要自己声明一些变量类型,这些由用户自己声明的变量类型即为自定义类型。其中,结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,叫做结构。在C语言中,结构体(struct)指的是一种数据结构,是C语言中聚合数据类型的一类。结构体可以被声明为变量、指针或数组等,用以实现较复杂的数据结构。在本实施例中,将结构体声明为变量,即构成一个结构体类型的自定义类型变量。所谓共用体类型是指:用同一段内存存放不同类型的变量,也就是使用覆盖技术,后一个数据覆盖前面的数据,使几个不同的变量共享同一段内存的结构成为共用体。类类型的变量(也叫静态变量)是类中独立于方法之外的变量,用static修饰。
其中,每种自定义类型所对应的类型描述信息用于描述该自定义类型的类型特征以及类型定义,用于对该自定义类型进行声明。通常,类型描述信息包括以下中的至少一个:变量字长信息、和/或变量类型信息。其中,变量字长信息用于描述变量的字节长度,该特征能够描述变量的长度特征,从而便于从多个角度全面准确地定位到该变量。例如,以结构体类型为例,其类型描述信息中需要包含结构体的名称以及结构体中包含的至少一个成员(如变量),其中每个成员需要具有类型信息等具体信息。
步骤S210:根据查询请求中包含的查询变量的类型标识,获取查询请求中包含的查询变量的类型,判断该查询变量的类型是否属于预设的自定义类型。
其中,查询变量的类型可以根据查询请求中包含的查询变量的类型标识确定,例如,本发明预先定义了各种类型的变量所对应的类型标识,通过在查询请求中包含对应的类型标识即可快速确定查询变量的类型。在判断查询变量的类型是否属于预设的自定义类型时,可以根据预设类型表进行判断。该预设类型表用于存储各种预设的自定义类型的类型名称和/或类型标识。其中,预设的自定义类型是指:除常规变量类型之外的、由用户在编程过程中自定义编写的变量类型。例如,常规变量包括:int类型(整型类型)或者float类型(浮点类型),char类型和/或其他非自定义扩展的数据类型。在本实施例中,为了便于快速查询常规变量,也可以借助该预设的自定义脚本文件存储常规变量的类型以及对应的取值范围。除常规变量之外的,由用户自己声明的变量类型则为预设的自定义类型。
步骤S220:若判断结果为是,通过预设的脚本解析器对该预设的自定义脚本文件进行解析,得到自定义脚本解析结果。
由于自定义脚本文件采用Lua语言编写,而Lua语言作为高级语言不能直接被计算机识别,因此,为了使计算机能够识别Lua语言,在本实施例中,进一步设置了用于对自定义脚本文件进行解析的脚本解析器,通过该脚本解析器,能够将Lua语言解析为能够被计算机识别的机器语言,从而得到以机器语言形式存在的自定义脚本解析结果。
步骤S230:根据自定义脚本解析结果获取与查询变量的类型相对应的类型描述信息。
由于自定义脚本解析结果中包含与各种自定义类型相对应的类型描述信息,因此,根据查询变量的类型能够从自定义脚本解析结果中获取到与该查询变量的类型相对应的类型描述信息。例如,当查询变量的类型为结构体类型时,需要从自定义脚本解析结果中提取结构体类型所对应的类型描述信息。
步骤S240:根据与该查询变量的类型相对应的类型描述信息,从内存布局信息中查询与该查询变量相对应的变量内存地址。
具体实施时,根据与查询变量的类型相对应的类型描述信息,从内存布局信息中查询与查询变量相对应的目标内存地址。其中,与查询变量相对应的目标内存地址中的存储对象与查询变量的类型所对应的类型描述信息匹配。若查询到的目标内存地址仅为一个,则直接将该目标内存地址确定为与该查询变量相对应的变量内存地址。若查询到的目标内存地址为多个,则需要进一步通过以下方式对多个目标内存地址进行筛选,以确定与该查询变量相对应的变量内存地址:修改该查询变量的变量值,判断各个目标内存地址对应的存储数值(即存储对象的对象值)是否发生变化,根据判断结果从多个目标内存地址中选择一个目标内存地址作为与查询变量相对应的变量内存地址。例如,当查询变量为结构体变量时,根据结构体变量的类型描述信息,从内存布局信息中查询与该结构体变量相对应的目标内存地址。当目标内存地址为多个时,对该结构体变量的当前取值进行修改,查看各个目标内存地址中包含的存储对象的对象值是否发生变化,将未发生变化的目标内存地址删除,当发生变化的目标内存地址超过一个时,再次修改结构体变量的当前取值,并查看剩余的目标内存地址中包含的存储对象的对象值是否发生变化,将未发生变化的目标内存地址删除,直至保留的目标内存地址的数量不大于一时,将该保留的目标内存地址确定为与该查询变量相对应的变量内存地址。由此可见,在本实施例中,考虑到可能出现多个内存地址均存储有相同数值的变量的情况,因此,为了在该种情况下提升判断结果的准确性,进一步通过多次修改变量值,并观察修改后的各个目标内存地址是否随之变化的方式来准确确定内存地址。
另外,为了进一步提升查询的速度及精确性,本实施例中的查询请求中还可以进一步包含:查询变量所对应的应用标识、和/或查询变量的变量属性信息。相应地,在本步骤中,结合查询请求中的应用标识和/或变量属性信息,确定与该查询变量相对应的内存布局信息,从与该查询变量相对应的内存布局信息中查询与查询变量相对应的变量内存地址。例如,通过查询变量所对应的应用标识能够从整个系统所对应的内存布局信息中进一步确定与该应用标识相对应的内存布局信息,进而将查询范围缩小到该应用标识所对应的内存布局信息中,以便达到提升查询速度的目的。又如,通过查询变量的变量属性信息可以确定变量的附加特征,例如变量字长信息,从而能够从内存布局信息中快速筛查出与该变量字长信息相匹配的内容,进而提升查询精度。由此可见,查询变量的变量属性信息用于对查询变量的属性进行进一步地限定,凡是有利于全面描述该查询变量的特征的属性均可作为变量属性信息。在传统方式中,无法定义查询变量的附加属性,因此,针对查询变量的一个取值往往会查询到多个结果,而本实施例中通过增加变量的字长信息,能够从字长维度快速筛除不符合字长长度的结果。
由此可见,通过本实施例中的方式,能够借助自定义脚本文件预先定义并查询自定义类型的变量,拓宽了查询范围。其中,该预设的自定义脚本文件还能够根据接收到的脚本更新请求进行更新;其中,该脚本更新请求包括:用于向自定义脚本文件中增加自定义类型及其对应的类型描述信息的增加类更新请求、用于向自定义脚本文件中删除自定义类型及其对应的类型描述信息的删除类更新请求、以及用于修改自定义脚本文件中已存储的自定义类型及其对应的类型描述信息的修改类更新请求。通过对自定义脚本文件进行更新,能够实时地将自定义的变量类型增加到自定义脚本文件中,以便于针对实时新增的自定义类型变量进行查询,从而为用户提供了便利。
综上可知,本发明能够根据用户希望搜索的数据类型进行自定义的扩展,进而能够在内存中搜索到自定义的结构体或者数据类型,方便精准定位某个变量在内存中的位置,从而实现修改该变量的目的。具体实施时,本发明中的方式首先判断需要搜索的数据类型,如果为常见的int类型或者float类型,char类型以及其他非自定义扩展的数据类型,只需在自定义脚本中指定类型以及相对应的值后即可进行搜索。如果搜索的数据类型是自定义的,那么自定义脚本中需要预先存储该数据类型的定义,比如搜索程序中某个结构体,那么自定义脚本中需要声明该结构体所有的变量类型信息,然后本发明通过对自定义脚本文件进行解析,并根据解析结果对内存中的数据类型进行多次匹配,从而达到精确定位的效果。并且,由于本发明能够进一步设置字长等属性信息,因而能够准确定位结果。
图3示出了本发明又一实施例提供的一种内存地址的查询装置的装置结构图。如图3所示,本装置包括:
判断模块31,适于获取查询请求中包含的查询变量的类型,判断所述查询变量的类型是否属于预设的自定义类型;
获取模块32,适于若判断结果为是,根据预设的自定义脚本文件获取与所述查询变量的类型相对应的类型描述信息;
查询模块33,适于根据所述与所述查询变量的类型相对应的类型描述信息,从内存布局信息中查询与所述查询变量相对应的变量内存地址。
可选地,所述装置包括:
生成模块30,适于预先生成所述预设的自定义脚本文件,并在所述预设的自定义脚本文件中存储与各种预设的自定义类型相对应的类型描述信息;
其中,所述类型描述信息包括以下中的至少一个:变量字长信息、和/或变量类型信息。
可选地,所述预设的自定义脚本文件能够根据接收到的脚本更新请求进行更新;其中,所述脚本更新请求包括:用于向所述自定义脚本文件中增加自定义类型及其对应的类型描述信息的增加类更新请求、用于向所述自定义脚本文件中删除自定义类型及其对应的类型描述信息的删除类更新请求、以及用于修改所述自定义脚本文件中已存储的自定义类型及其对应的类型描述信息的修改类更新请求。
可选地,所述获取模块32具体适于:
通过预设的脚本解析器对所述预设的自定义脚本文件进行解析,得到自定义脚本解析结果;
根据所述自定义脚本解析结果获取与所述查询变量的类型相对应的类型描述信息。
可选地,所述判断模块31具体适于:根据所述查询请求中包含的查询变量的类型标识,获取所述查询请求中包含的查询变量的类型;
且所述预设的自定义类型包括以下中的至少一个:结构体类型、共用体类型、枚举类型、以及类类型。
可选地,所述查询模块33具体适于:
根据所述与所述查询变量的类型相对应的类型描述信息,从所述内存布局信息中查询与所述查询变量相对应的目标内存地址;
当查询到的目标内存地址为多个时,修改所述查询变量的变量值,判断各个目标内存地址对应的存储数值是否发生变化,根据判断结果从多个目标内存地址中选择一个目标内存地址作为与所述查询变量相对应的变量内存地址。
可选地,所述查询请求中进一步包含:查询变量所对应的应用标识、和/或查询变量的变量属性信息;则所述查询模块具体适于:
结合所述应用标识和/或变量属性信息,确定与所述查询变量相对应的内存布局信息,从所述与所述查询变量相对应的内存布局信息中查询与所述查询变量相对应的变量内存地址。
可选地,所述自定义脚本文件为Lua脚本文件。
上述各个模块的具体结构和工作原理可参照方法实施例中相应步骤的描述,此处不再赘述。
本申请实施例提供了一种非易失性计算机存储介质,计算机存储介质存储有至少一可执行指令,该计算机可执行指令可执行上述任意方法实施例中的内存地址的查询方法。
图4示出了根据本发明实施例的一种电子设备的结构示意图,本发明具体实施例并不对电子设备的具体实现做限定。
如图4所示,该电子设备可以包括:处理器(processor)402、通信接口(Communications Interface)404、存储器(memory)406、以及通信总线408。
其中:
处理器402、通信接口404、以及存储器406通过通信总线408完成相互间的通信。
通信接口404,用于与其它设备比如客户端或其它服务器等的网元通信。
处理器402,用于执行程序410,具体可以执行上述内存地址的查询方法实施例中的相关步骤。
具体地,程序410可以包括程序代码,该程序代码包括计算机操作指令。
处理器402可能是中央处理器CPU,或者是特定集成电路ASIC(ApplicationSpecific Integrated Circuit),或者是被配置成实施本发明实施例的一个或多个集成电路。电子设备包括的一个或多个处理器,可以是同一类型的处理器,如一个或多个CPU;也可以是不同类型的处理器,如一个或多个CPU以及一个或多个ASIC。
存储器406,用于存放程序410。存储器406可能包含高速RAM存储器,也可能还包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。
程序410具体可以用于使得处理器402执行上述方法实施例中的各项操作。
在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的内存地址的查询装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

Claims (18)

1.一种内存地址的查询方法,包括:
获取查询请求中包含的查询变量的类型,判断所述查询变量的类型是否属于预设的自定义类型;
若判断结果为是,根据预设的自定义脚本文件获取与所述查询变量的类型相对应的类型描述信息;
根据所述与所述查询变量的类型相对应的类型描述信息,从内存布局信息中查询与所述查询变量相对应的变量内存地址;
其中,所述类型描述信息用于定义该类型的变量的变量特征,所述内存布局信息用于存储内存空间所包含的各个内存地址及其对应的存储对象;
所述从内存布局信息中查询与所述查询变量相对应的变量内存地址的步骤,包括:
从所述内存布局信息中存储的各个存储对象中确定与所述类型描述信息描述的类型特征匹配的存储对象;
将所述存储对象的内存地址确定为所述查询变量相对应的变量内存地址。
2.根据权利要求1所述的方法,其中,所述方法执行之前,进一步包括:
预先生成所述预设的自定义脚本文件,并在所述预设的自定义脚本文件中存储与各种预设的自定义类型相对应的类型描述信息;
其中,所述类型描述信息包括以下中的至少一个:变量字长信息、和/或变量类型信息。
3.根据权利要求2所述的方法,其中,所述预设的自定义脚本文件能够根据接收到的脚本更新请求进行更新;其中,所述脚本更新请求包括:用于向所述自定义脚本文件中增加自定义类型及其对应的类型描述信息的增加类更新请求、用于向所述自定义脚本文件中删除自定义类型及其对应的类型描述信息的删除类更新请求、以及用于修改所述自定义脚本文件中已存储的自定义类型及其对应的类型描述信息的修改类更新请求。
4.根据权利要求1-3任一所述的方法,其中,所述根据预设的自定义脚本文件获取与所述查询变量的类型相对应的类型描述信息具体包括:
通过预设的脚本解析器对所述预设的自定义脚本文件进行解析,得到自定义脚本解析结果;
根据所述自定义脚本解析结果获取与所述查询变量的类型相对应的类型描述信息。
5.根据权利要求4任一所述的方法,其中,所述获取查询请求中包含的查询变量的类型具体包括:根据所述查询请求中包含的查询变量的类型标识,获取所述查询请求中包含的查询变量的类型;
且所述预设的自定义类型包括以下中的至少一个:结构体类型、共用体类型、枚举类型、以及类类型。
6.根据权利要求5所述的方法,其中,所述根据所述与所述查询变量的类型相对应的类型描述信息,从内存布局信息中查询与所述查询变量相对应的变量内存地址具体包括:
根据所述与所述查询变量的类型相对应的类型描述信息,从所述内存布局信息中查询与所述查询变量相对应的目标内存地址;
当查询到的目标内存地址为多个时,修改所述查询变量的变量值,判断各个目标内存地址对应的存储数值是否发生变化,根据判断结果从多个目标内存地址中选择一个目标内存地址作为与所述查询变量相对应的变量内存地址。
7.根据权利要求6所述的方法,其中,所述查询请求中进一步包含:查询变量所对应的应用标识、和/或查询变量的变量属性信息;则所述根据所述与所述查询变量的类型相对应的类型描述信息,从内存布局信息中查询与所述查询变量相对应的变量内存地址具体包括:
结合所述应用标识和/或变量属性信息,确定与所述查询变量相对应的内存布局信息,从所述与所述查询变量相对应的内存布局信息中查询与所述查询变量相对应的变量内存地址。
8.根据权利要求7所述的方法,其中,所述自定义脚本文件为Lua脚本文件。
9.一种内存地址的查询装置,包括:
判断模块,适于获取查询请求中包含的查询变量的类型,判断所述查询变量的类型是否属于预设的自定义类型;
获取模块,适于若判断结果为是,根据预设的自定义脚本文件获取与所述查询变量的类型相对应的类型描述信息;
查询模块,适于根据所述与所述查询变量的类型相对应的类型描述信息,从内存布局信息中查询与所述查询变量相对应的变量内存地址;
所述类型描述信息用于定义该类型的变量的变量特征,所述内存布局信息用于存储内存空间所包含的各个内存地址及其对应的存储对象;
所述查询模块,还适于从所述内存布局信息中存储的各个存储对象中确定与所述类型描述信息描述的类型特征匹配的存储对象;将所述存储对象的内存地址确定为所述查询变量相对应的变量内存地址。
10.根据权利要求9所述的装置,其中,所述装置包括:
生成模块,适于预先生成所述预设的自定义脚本文件,并在所述预设的自定义脚本文件中存储与各种预设的自定义类型相对应的类型描述信息;
其中,所述类型描述信息包括以下中的至少一个:变量字长信息、和/或变量类型信息。
11.根据权利要求10所述的装置,其中,所述预设的自定义脚本文件能够根据接收到的脚本更新请求进行更新;其中,所述脚本更新请求包括:用于向所述自定义脚本文件中增加自定义类型及其对应的类型描述信息的增加类更新请求、用于向所述自定义脚本文件中删除自定义类型及其对应的类型描述信息的删除类更新请求、以及用于修改所述自定义脚本文件中已存储的自定义类型及其对应的类型描述信息的修改类更新请求。
12.根据权利要求9-11任一所述的装置,其中,所述获取模块具体适于:
通过预设的脚本解析器对所述预设的自定义脚本文件进行解析,得到自定义脚本解析结果;
根据所述自定义脚本解析结果获取与所述查询变量的类型相对应的类型描述信息。
13.根据权利要求12所述的装置,其中,所述判断模块具体适于:根据所述查询请求中包含的查询变量的类型标识,获取所述查询请求中包含的查询变量的类型;
且所述预设的自定义类型包括以下中的至少一个:结构体类型、共用体类型、枚举类型、以及类类型。
14.根据权利要求13所述的装置,其中,所述查询模块具体适于:
根据所述与所述查询变量的类型相对应的类型描述信息,从所述内存布局信息中查询与所述查询变量相对应的目标内存地址;
当查询到的目标内存地址为多个时,修改所述查询变量的变量值,判断各个目标内存地址对应的存储数值是否发生变化,根据判断结果从多个目标内存地址中选择一个目标内存地址作为与所述查询变量相对应的变量内存地址。
15.根据权利要求14所述的装置,其中,所述查询请求中进一步包含:查询变量所对应的应用标识、和/或查询变量的变量属性信息;则所述查询模块具体适于:
结合所述应用标识和/或变量属性信息,确定与所述查询变量相对应的内存布局信息,从所述与所述查询变量相对应的内存布局信息中查询与所述查询变量相对应的变量内存地址。
16.根据权利要求15所述的装置,其中,所述自定义脚本文件为Lua脚本文件。
17.一种电子设备,包括:处理器、存储器、通信接口和通信总线,所述处理器、所述存储器和所述通信接口通过所述通信总线完成相互间的通信;
所述存储器用于存放至少一可执行指令,所述可执行指令使所述处理器执行如权利要求1-8中任一项所述的内存地址的查询方法对应的操作。
18.一种计算机存储介质,所述存储介质中存储有至少一可执行指令,所述可执行指令使处理器执行如权利要求1-8中任一项所述的内存地址的查询方法对应的操作。
CN201811343900.0A 2018-11-13 2018-11-13 内存地址的查询方法及装置 Active CN109460255B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811343900.0A CN109460255B (zh) 2018-11-13 2018-11-13 内存地址的查询方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811343900.0A CN109460255B (zh) 2018-11-13 2018-11-13 内存地址的查询方法及装置

Publications (2)

Publication Number Publication Date
CN109460255A CN109460255A (zh) 2019-03-12
CN109460255B true CN109460255B (zh) 2022-12-02

Family

ID=65610189

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811343900.0A Active CN109460255B (zh) 2018-11-13 2018-11-13 内存地址的查询方法及装置

Country Status (1)

Country Link
CN (1) CN109460255B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112612530B (zh) * 2019-09-18 2022-05-17 华为技术有限公司 类查询方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101256532A (zh) * 2008-04-07 2008-09-03 中兴通讯股份有限公司 一种嵌入式系统中变量实时查看的方法
CN107992344A (zh) * 2016-10-25 2018-05-04 腾讯科技(深圳)有限公司 一种协程实现方法及装置

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101256532A (zh) * 2008-04-07 2008-09-03 中兴通讯股份有限公司 一种嵌入式系统中变量实时查看的方法
CN107992344A (zh) * 2016-10-25 2018-05-04 腾讯科技(深圳)有限公司 一种协程实现方法及装置

Also Published As

Publication number Publication date
CN109460255A (zh) 2019-03-12

Similar Documents

Publication Publication Date Title
CN109976761B (zh) 软件开发工具包的生成方法、装置及终端设备
CN108628751B (zh) 一种无用依赖项检测方法及装置
KR102154757B1 (ko) 콜경로 파인더
CN106502745B (zh) 一种函数调用方法和装置
CN107563201B (zh) 基于机器学习的关联样本查找方法、装置及服务器
US8352913B2 (en) Generating and resolving component names in an integrated development environment
CN106843842B (zh) 一种应用程序配置文件的更新方法及装置
WO2018040270A1 (zh) 在Windows系统中加载Linux系统ELF文件的方法及装置
CN110287696A (zh) 一种反弹shell进程的检测方法、装置和设备
CN108399125B (zh) 自动化测试方法、装置、计算机设备和存储介质
CN107577943B (zh) 基于机器学习的样本预测方法、装置及服务器
CN111694992B (zh) 一种数据处理方法和装置
CN114756872A (zh) 基于go语言的注入式污点数据跟踪方法、装置和电子装置
CN109460255B (zh) 内存地址的查询方法及装置
CN111241040A (zh) 信息获取方法、装置、电子设备及计算机存储介质
CN113157477B (zh) 内存泄漏的归因方法、装置、电子设备和存储介质
CN110502443A (zh) 冗余代码检测方法、检测模块、电子设备及计算机存储介质
CN110706035B (zh) 一种更新效果的评价方法、装置、存储介质及电子设备
WO2017054731A1 (zh) 处理被劫持浏览器的方法及设备
CN111124545A (zh) 应用程序启动方法、装置、电子设备及存储介质
CN106708516B (zh) 一种实现so文件调用外部函数的方法和装置
CN110968500A (zh) 一种测试用例的执行方法及装置
CN109408063B (zh) 基于虚拟机的指令插桩方法及装置
CN108874468B (zh) 应用程序的加载方法、装置、计算机设备及存储介质
CN112445468A (zh) Typescript类型文件生成方法、装置、设备及计算机可读存储介质

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