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...
给定内存地址,我想从 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...