如何在 LLDB 中写入 XMM 寄存器
How to write into XMM Registers in LLDB
我正在尝试使用 LLDB API 从 python 中的寄存器读取和写入值。
对于通用寄存器,我一直在使用 frame.register['register name'].value
来读取和写入寄存器值,这对我来说很成功。
然而,当我接近浮点寄存器时,我发现这不能再完成了,因为一些寄存器,比如 XMM 寄存器没有 value
属性
例如 frame.register['xmm0'].value
会 return None
。
我查看了 LLDB API 文档,我可以使用 frame.register['xmm0'].GetData()
以某种方式获取寄存器值,尽管它 return 不是像 value
属性。
但是,我仍然无法找到使用 LLDB API 写入寄存器的方法。我知道我可以使用 register write xmm0 "{0x00 0x01 ... 0x0f}"
在 CLI 中以交互方式执行此操作,如中所示
https://www.mail-archive.com/lldb-dev@lists.llvm.org/msg03228.html,但我希望能够在 python 中完成,因为我正在编写脚本来执行此任务。
那么,有没有办法让我写入 XMM 寄存器,或者通常使用 LLDB 的矢量类型寄存器 API?
几天后,我终于设法使用 LLDB API 读写向量寄存器。
XMM寄存器有一个属性summary
,也可以使用SBValue.GetSummary()
获得,这个属性returns XMM寄存器内部值的字符串,形式为(0x00 0x01 .... 0x0f)
字符串格式。
要修改XMM寄存器,因为XMM寄存器没有属性value
,lldb.frame.register['register name'].value
就没用了,但还有另一种更新寄存器值的方法,使用lldb.frame.registers[0].GetChildMemberWithName('xmm0').SetValueFromCString(value, self.error)
。值对象必须是字符串格式,仍然遵循 "{0x00 0x01 ... 0x0f}"
格式。
我正在尝试使用 LLDB API 从 python 中的寄存器读取和写入值。
对于通用寄存器,我一直在使用 frame.register['register name'].value
来读取和写入寄存器值,这对我来说很成功。
然而,当我接近浮点寄存器时,我发现这不能再完成了,因为一些寄存器,比如 XMM 寄存器没有 value
属性
例如 frame.register['xmm0'].value
会 return None
。
我查看了 LLDB API 文档,我可以使用 frame.register['xmm0'].GetData()
以某种方式获取寄存器值,尽管它 return 不是像 value
属性。
但是,我仍然无法找到使用 LLDB API 写入寄存器的方法。我知道我可以使用 register write xmm0 "{0x00 0x01 ... 0x0f}"
在 CLI 中以交互方式执行此操作,如中所示
https://www.mail-archive.com/lldb-dev@lists.llvm.org/msg03228.html,但我希望能够在 python 中完成,因为我正在编写脚本来执行此任务。
那么,有没有办法让我写入 XMM 寄存器,或者通常使用 LLDB 的矢量类型寄存器 API?
几天后,我终于设法使用 LLDB API 读写向量寄存器。
XMM寄存器有一个属性summary
,也可以使用SBValue.GetSummary()
获得,这个属性returns XMM寄存器内部值的字符串,形式为(0x00 0x01 .... 0x0f)
字符串格式。
要修改XMM寄存器,因为XMM寄存器没有属性value
,lldb.frame.register['register name'].value
就没用了,但还有另一种更新寄存器值的方法,使用lldb.frame.registers[0].GetChildMemberWithName('xmm0').SetValueFromCString(value, self.error)
。值对象必须是字符串格式,仍然遵循 "{0x00 0x01 ... 0x0f}"
格式。