我正在尝试使用 LLDB API 从 python 中的寄存器读取和写入值。
对于通用寄存器,我一直在使用frame.register['register name'].value
读取和写入寄存器值,这对我来说很成功。
然而,当我接近浮点寄存器时,我发现这不能再完成了,因为某些寄存器(例如 XMM 寄存器)没有value
属性
例如frame.register['xmm0'].value
会回来None
.
我查看了 LLDB API 文档,我可以使用以下方式获取寄存器值frame.register['xmm0'].GetData()
,虽然它不返回像这样的字符串格式value
属性。
但是,我仍然无法找到使用 LLDB API 写入寄存器的方法。我知道我可以使用 CLI 在 CLI 中交互地执行此操作register write xmm0 "{0x00 0x01 ... 0x0f}"
,如图所示https://www.mail-archive.com/[电子邮件受保护]/msg03228.html https://www.mail-archive.com/lldb-dev@lists.llvm.org/msg03228.html,但我希望能够在 python 中执行此操作,因为我正在编写一个脚本来执行此任务。
那么,有没有办法让我使用 LLDB API 写入 XMM 寄存器,或者一般情况下的向量类型寄存器?
几天后,我终于成功使用 LLDB API 读写向量寄存器。
XMM寄存器有一个属性summary
,也可以使用以下方法获得SBValue.GetSummary()
,该属性以以下形式返回 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}"
format.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)