0

在 gdb 的Values From Inferior 文档中,有第二个构造函数用于在 python 中创建对象。它指出:

功能:Value.__init__ (val, type)

    构造函数的第二种形式gdb.Value返回一个gdb.Value类型type,其中值内容取自 指定的 Python 缓冲区对象val。Python 缓冲区对象中的字节数必须大于或等于类型的大小。

我的问题是,如何创建可以传递给构造函数的缓冲区对象?例如,如果我想创建一个字符串(是的,我知道第一个 Value 构造函数可以做到这一点,但这是一个示例),我编写了以下函数:

  def make_str(self, str):
    str += '\0'
    s = bytearray(str.encode())
    return gdb.Value(s, gdb.lookup_type('char').array(len(str)))

但是,当我尝试使用它时,我收到了消息:

Python Exception <class 'ValueError'> Size of type is larger than that of buffer object.: 

我将如何制作一个可以传递给 Value 构造函数的缓冲区对象?我需要做什么来生成一个 Value 对象?

4

1 回答 1

0

嗯。似乎是一个错误,因为这有效:

  def make_str(self, str):
    str += '\0'
    s = bytearray(str.encode())
    return gdb.Value(s, gdb.lookup_type('char').array(len(s)-1))

这很奇怪,我原以为数组长度是字符串的长度,而不是少一个。

于 2021-12-01T02:02:48.593 回答