lldb 脚本:如何从文字地址获取 lldb.SBValue

lldb script: How to get lldb.SBValue from literal address

给定内存地址,我想从 lldb 脚本打印它的内容。

我尝试了不同的方法来获取给定地址的 SBValue,但 none 对我有用,即

buffer = lldb.SBData()
buffer.CreateDataFromCString(lldb.eByteOrderBig, 10, "0x00007fffe45e3000")

但是当我去查询对象时,它什么也没显示。

我也试过在lldb中将地址赋值给一个方便的变量,然后使用FindVariable(),但是这个变量是空的

expr auto $buffer =  function_returning_address();
>>> buffer = lldb.frame.FindVariable("$buffer")

但这里的变量又没有名称、类型等。我也尝试过 SBValue.SetValueFromCString()

>>> buffer.SetValueFromCString("0x00007fffe45e3000", error)
False
>>> print error
error: Could not get value: No value

我没有找到很多关于 Google 的文档,我刚开始使用 lldb 脚本,欢迎任何建议。

谢谢。

有两种方法可以做到这一点。如果你想要原始数据,你可以要求你的 SBProcess 使用 SBProcess.ReadMemory 将内存读取为 Python 字节数组。如果您想将该地址的数据显示为某种类型的实例,您可以使用 SBTarget.CreateValueFromAddress。要找到要传递给它的类型,请使用 SBTarget.FindFirstType...