如何在 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寄存器没有属性valuelldb.frame.register['register name'].value就没用了,但还有另一种更新寄存器值的方法,使用lldb.frame.registers[0].GetChildMemberWithName('xmm0').SetValueFromCString(value, self.error)。值对象必须是字符串格式,仍然遵循 "{0x00 0x01 ... 0x0f}" 格式。