有什么办法可以通过给定的对象地址访问gdb中的python对象?

ganle hu

例如,我知道一个类似于“ 0x7f0fdd25d7d0”的地址,它表示具有已知python类类型的python对象。无论如何,要获取对象字段的值?

蒙施

gdb文档中:

您可以使用命令x(用于“检查”)以几种格式中的任何一种来检查内存,而与程序的数据类型无关。

x/nfu addr
x addr
x

使用x命令检查内存。

nfu是所有可选参数,用于指定要显示多少内存以及如何格式化内存;addr是一个表达式,提供您要开始显示内存的地址。如果您使用默认值nfu,则无需键入斜杠/几个命令为addr设置了方便的默认值。

n,重复次数

重复计数是一个十进制整数;默认值为1。它指定要显示的内存量(按单位计数u)。

f,显示格式

显示格式是打印,s(以零结尾的字符串)或i(机器指令)使用的格式之一x最初的默认值为(十六进制)。每次使用x或print时,默认值都会更改。

u,单位大小单位大小是以下任意一项

b 个字节。

h 半字(两个字节)。

w字(四个字节)。这是初始默认值。

g 巨字(八个字节)。

每次使用指定单位大小时x,该大小将在您下次使用时成为默认单位x(对于si格式,单位大小将被忽略,通常不会写入。)

addr,起始显示地址

addr是您希望GDB开始显示内存的地址。该表达式不必具有指针值(尽管可以);它始终被解释为内存字节的整数地址。有关表达式的更多信息,请参见表达式。的默认值addr通常是在检查的最后一个地址之后-但是其他几个命令也设置了默认地址:info断点(到列出的最后一个断点的地址),info行(到一行的起始地址)和print (如果使用它来显示内存中的值)。例如,x/3uh 0x54320请求显示三个h内存半字(),格式为无符号十进制整数(u),从地址0x54320开始。在堆栈指针上方x/4xw $sp打印w内存的四个单词()(此处,$sp; 参见十六进制(x)中的“寄存器”部分

由于表示单位尺寸的字母与指定输出格式的字母完全不同,因此您不必记住单位尺寸或格式是第一个。任一个命令都可以。输出规格4xw4wx含义完全相同。(但是,计数n必须排在最前面;`wx4'不起作用。)

即使格式为s的单位大小u被忽略i,您仍可能要使用计数n;例如,3i指定您要查看三个机器指令,包括任何操作数。反汇编命令提供了一种检查机器指令的替代方法。请参阅源代码和机器代码部分。

x参数的所有默认值旨在简化每次您使用x时以最少的规格继续扫描内存的情况。例如,您使用检查了三个机器说明后x/3i addr,可以使用just检查接下来的七个机器说明x/7如果使用RET重复x命令,则重复计数n将再次使用;其他参数默认为x的连续使用。

x命令打印的地址和内容不会保存在值历史记录中,因为它们太多了,它们会妨碍您的操作。而是,GDB使这些值可作为方便变量$ _和$的值供表达式随后使用使用x命令后,最后检查的地址可用于方便变量$ _中的表达式中。经检查,该地址的内容可在便捷变量$中获得

如果x命令具有重复计数,则保存的地址和内容来自最后打印的存储单元;如果在输出的最后一行上打印了多个单位,则此地址与最后打印的地址不同。

来源ftp : //ftp.gnu.org/old-gnu/Manuals/gdb/html_chapter/gdb_9.html#SEC56

有关以下内容的更多文档gdb

23.2.2.4 Python中的类型

gdb使用类gdb.Type表示劣等类型。

gdb模块中提供了以下与类型相关的功能:

—函数:gdb.lookup_type(名称[,块])此函数通过其名称查找类型,该名称必须是字符串。

如果给出块,则在该范围内查找名称。否则,将在全局范围内进行搜索。

通常,此函数将返回gdb.Type的实例。如果找不到命名的类型,它将引发异常。

如果类型是结构或类类型或枚举类型,则可以使用Python字典语法访问该类型的字段。例如,如果some_type是具有结构类型的gdb.Type实例,则可以使用以下命令访问其foo字段:

 bar = some_type['foo'] 

bar将是gdb.Field对象;有关gdb.Field类的描述,请参见下面Type.fields方法的描述。

Type的实例具有以下属性:

—变量:Type.code此类型的类型代码。类型代码将是下面定义的TYPE_CODE_常量之一。

—变量:Type.name此类型的名称。如果此类型没有名称,则返回None。

—变量:Type.sizeof此类的大小,以目标字符单位为单位。通常,目标的char类型将是8位字节。但是,在某些不常见的平台上,此类型的大小可能有所不同。

—变量:Type.tag此类型的标签名称。标记名称是在C和C ++中struct,union或enum之后的名称;并非所有语言都有这个概念。如果此类型没有标签名称,则返回None。

提供以下方法:

—功能:Type.fields()对于结构和联合类型,此方法返回字段。范围类型有两个字段,最小值和最大值。枚举类型每个枚举常量具有一个字段。函数和方法类型的每个参数都有一个字段。C ++类的基本类型也表示为字段。如果类型没有字段,或者不属于这些类别之一,则将返回一个空序列。

每个字段都是一个gdb.Field对象,具有一些预定义的属性:

bitpos此属性不适用于枚举或静态(如C ++或Java)字段。该值是从包含类型的开头开始的位置(以位为单位)。enumval此属性仅可用于枚举字段,其值是枚举成员的整数表示形式。name字段名称,对于匿名字段则为None。人工的如果字段是人工的,则为True,通常意味着它是由编译器而不是用户提供的。始终提供此属性,如果该字段不是人工的,则为False。is_base_class如果该字段表示C ++结构的基类,则为True。始终提供此属性,如果字段不是作为字段参数的类型的基类,或者该类型不是C ++类,则为False。bitssize如果该字段是压缩字段或者是位字段,那么它将具有一个非零值,该值是字段的大小(以位为单位)。否则,它将为零;否则为0。在这种情况下,字段的大小由其类型给定。type字段的类型。这通常是Type的实例,但在某些情况下可以为None。parent_type包含此字段的类型。这是gdb.Type—函数:Type.array(n1 [,n2])返回一个新的gdb.Type对象,该对象表示此类型的数组。如果给定一个参数,则它是数组的包含上限。在这种情况下,下限为零。如果给定两个参数,则第一个参数是数组的下限,第二个参数是数组的上限。数组的长度不能为负,但范围可以为负。

—函数:Type.vector(n1 [,n2])返回一个新的gdb.Type对象,该对象表示此类型的向量。如果给定一个参数,则它是向量的包含上限。在这种情况下,下限为零。如果给定两个参数,则第一个参数是向量的下限,第二个参数是向量的上限。向量的长度不能为负,但范围可以为负。

数组与向量之间的区别在于,数组的行为类似于C:在表达式中使用时,它们会衰减为指向第一个元素的指针,而向量则被视为第一类值。

—函数:Type.const()返回一个新的gdb.Type对象,该对象表示此类型的const限定变体。

—函数:Type.volatile()返回一个新的gdb.Type对象,该对象表示此类型的volatile限定的变体。

—函数:Type.unqualified()返回一个新的gdb.Type对象,该对象表示此类型的不合格变体。也就是说,结果既不是常量也不是易失的。

—函数:Type.range()返回一个Python Tuple对象,该对象包含两个元素:参数类型的下限和该类型的上限。如果类型不具有范围,则gdb将引发gdb.error异常(请参阅异常处理)。

—函数:Type.reference()返回一个新的gdb.Type对象,该对象表示对此类型的引用。

—函数:Type.pointer()返回一个新的gdb.Type对象,该对象表示此类型的指针。

—函数:Type.strip_typedefs()在删除所有类型的typedef后,返回一个表示真实类型的新gdb.Type

—函数:Type.target()返回一个新的gdb.Type对象,该对象表示此类型的目标类型。

对于指针类型,目标类型是指向对象的类型。对于数组类型(意味着类似C的数组),目标类型是数组元素的类型。对于函数或方法类型,目标类型是返回值的类型。对于复杂类型,目标类型是元素的类型。对于typedef,目标类型是别名类型。

如果类型没有目标,则此方法将引发异常。

—函数:Type.template_argument(n [,block])如果此gdb.Type是模板的实例化,则将返回一个新的gdb.Value或gdb.Type,它表示第n个模板参数的值(索引起始于0)。

如果此gdb.Type不是模板类型,或者该类型的模板参数少于n个,则将引发异常。通常,只有C ++代码将具有模板类型。

如果给出块,则在该范围内查找名称。否则,将在全局范围内进行搜索。

—函数:Type.optimized_out()返回此类型的gdb.Value实例,其值已被优化掉。这允许帧装饰器指示未知的参数或局部变量的值。

每种类型都有一个代码,指示该类型属于什么类别。可用的类型类别由gdb模块中定义的常量表示:

gdb.TYPE_CODE_PTR类型是一个指针。

gdb.TYPE_CODE_ARRAY类型是一个数组。

gdb.TYPE_CODE_STRUCT类型是结构。

gdb.TYPE_CODE_UNION类型是联合。

gdb.TYPE_CODE_ENUM类型是枚举。

gdb.TYPE_CODE_FLAGS位标志类型,用于状态寄存器之类的东西。

gdb.TYPE_CODE_FUNC类型是一个函数。

gdb.TYPE_CODE_INT该类型是整数类型。

gdb.TYPE_CODE_FLT浮点类型。

gdb.TYPE_CODE_VOID特殊类型void。

gdb.TYPE_CODE_SET Pascal集类型。

gdb.TYPE_CODE_RANGE范围类型,即带边界的整数类型。

gdb.TYPE_CODE_STRING字符串类型。请注意,这仅适用于具有语言定义的字符串类型的某些语言。C字符串不以这种方式表示。

gdb.TYPE_CODE_BITSTRING一串位。不推荐使用。

gdb.TYPE_CODE_ERROR类型未知或错误。

gdb.TYPE_CODE_METHOD一种方法类型,可以在C ++或Java中找到。

gdb.TYPE_CODE_METHODPTR指向成员函数的指针。

gdb.TYPE_CODE_MEMBERPTR指向成员的指针。

gdb.TYPE_CODE_REF引用类型。

gdb.TYPE_CODE_CHAR字符类型。

gdb.TYPE_CODE_BOOL布尔类型。

gdb.TYPE_CODE_COMPLEX一个复杂的浮点类型。

gdb.TYPE_CODE_TYPEDEF某种其他类型的typedef。

gdb.TYPE_CODE_NAMESPACE C ++名称空间。

gdb.TYPE_CODE_DECFLOAT十进制浮点类型。

gdb.TYPE_CODE_INTERNAL_FUNCTION gdb内部的函数。这是用于表示便利功能的类型。gdb.types Python模块提供了对类型的进一步支持(请参阅gdb.types)。

来源https : //sourceware.org/gdb/onlinedocs/gdb/Types-In-Python.html

有关的:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么有两种魔术方法可以访问Python中的对象属性?

来自分类Dev

通过对象属性访问Python对象列表

来自分类Dev

如何通过给定的密钥来检索沙发床中的所有文档?

来自分类Dev

我如何访问给定索引的对象列表中的对象属性?

来自分类Dev

通过给定元素添加数组中的所有相关元素

来自分类Dev

有什么办法可以在Java中创建动态@ServerEndpoint地址吗?

来自分类Dev

有什么可以保证在JavaScript中访问对象属性的时间恒定吗?

来自分类Dev

有没有一种方法可以访问对象中的对象?

来自分类Dev

在Python中的对象中访问python对象

来自分类Dev

有什么办法可以在Rust中获得`struct`的地址吗?

来自分类Dev

php-通过给定键从对象数组中删除元素

来自分类Dev

在JS中,如何访问任何给定对象的给定属性路径?

来自分类Dev

通过类中特定对象的名称访问所有变量

来自分类Dev

有什么办法可以通过Windows cmd运行python脚本并在cmd中显示python操作和绘图

来自分类Dev

有什么方法可以访问tensorflow_hub.KerasLayer对象中的图层吗?

来自分类Dev

有什么办法可以从其属性中获取对象?

来自分类Dev

有什么办法可以在WPF中的两个STA线程之间使用对象?

来自分类Dev

在Mongoose中通过给定_id从数组中删除对象

来自分类Dev

如果可以通过任何其他方法访问该对象,那么对同步块中的对象进行锁定有什么用?

来自分类Dev

在指针句柄中访问对象的地址

来自分类Dev

如何访问给定索引的对象列表中的对象属性?

来自分类Dev

通过给定元素将数组中的所有相关元素相加

来自分类Dev

有什么办法可以优化下面的程序,在哪个程序中我尝试通过给定的输入参数旋转数组

来自分类Dev

在Python中通过列表全面搜索访问对象

来自分类Dev

有什么办法可以阻止java破坏对象

来自分类Dev

有什么方法可以访问 react-native 中的对象属性数组?

来自分类Dev

通过给定的一个获取另一个 JSON 对象属性

来自分类Dev

有没有办法从 Python 中的两个不同对象访问同一个对象?

来自分类Dev

为什么 GDB 会更改给定地址中的内容?

Related 相关文章

  1. 1

    为什么有两种魔术方法可以访问Python中的对象属性?

  2. 2

    通过对象属性访问Python对象列表

  3. 3

    如何通过给定的密钥来检索沙发床中的所有文档?

  4. 4

    我如何访问给定索引的对象列表中的对象属性?

  5. 5

    通过给定元素添加数组中的所有相关元素

  6. 6

    有什么办法可以在Java中创建动态@ServerEndpoint地址吗?

  7. 7

    有什么可以保证在JavaScript中访问对象属性的时间恒定吗?

  8. 8

    有没有一种方法可以访问对象中的对象?

  9. 9

    在Python中的对象中访问python对象

  10. 10

    有什么办法可以在Rust中获得`struct`的地址吗?

  11. 11

    php-通过给定键从对象数组中删除元素

  12. 12

    在JS中,如何访问任何给定对象的给定属性路径?

  13. 13

    通过类中特定对象的名称访问所有变量

  14. 14

    有什么办法可以通过Windows cmd运行python脚本并在cmd中显示python操作和绘图

  15. 15

    有什么方法可以访问tensorflow_hub.KerasLayer对象中的图层吗?

  16. 16

    有什么办法可以从其属性中获取对象?

  17. 17

    有什么办法可以在WPF中的两个STA线程之间使用对象?

  18. 18

    在Mongoose中通过给定_id从数组中删除对象

  19. 19

    如果可以通过任何其他方法访问该对象,那么对同步块中的对象进行锁定有什么用?

  20. 20

    在指针句柄中访问对象的地址

  21. 21

    如何访问给定索引的对象列表中的对象属性?

  22. 22

    通过给定元素将数组中的所有相关元素相加

  23. 23

    有什么办法可以优化下面的程序,在哪个程序中我尝试通过给定的输入参数旋转数组

  24. 24

    在Python中通过列表全面搜索访问对象

  25. 25

    有什么办法可以阻止java破坏对象

  26. 26

    有什么方法可以访问 react-native 中的对象属性数组?

  27. 27

    通过给定的一个获取另一个 JSON 对象属性

  28. 28

    有没有办法从 Python 中的两个不同对象访问同一个对象?

  29. 29

    为什么 GDB 会更改给定地址中的内容?

热门标签

归档