Как записать в регистры XMM в LLDB - PullRequest
4 голосов
/ 25 февраля 2020

Я пытаюсь читать и записывать значения из регистров в python, используя LLDB API. Для регистров общего назначения я использовал frame.register['register name'].value для чтения и записи значений регистров, что успешно работает для меня.

Однако, приближаясь к регистрам с плавающей запятой, я обнаружил, что это невозможно сделано больше, поскольку некоторые из регистров, такие как регистры XMM, не имеют атрибута value, например, frame.register['xmm0'].value вернет None.

Я изучил документацию по API LLDB и мог каким-то образом получить значение регистра, используя frame.register['xmm0'].GetData(), хотя он не возвращает строковый формат, такой как атрибут value. Однако я все еще не могу найти способ записи в регистры с использованием LLDB API. Я понимаю, что я мог бы сделать это в интерактивном режиме в CLI, используя register write xmm0 "{0x00 0x01 ... 0x0f}", как показано в https://www.mail-archive.com/lldb-dev@lists.llvm.org / msg03228. html, но я бы хотел сделать это в python, поскольку я пишу сценарий для выполнения этой задачи.

Итак, есть ли способ для меня записать в регистры XMM или вообще в регистры векторных типов с использованием LLDB API?

1 Ответ

5 голосов
/ 28 февраля 2020

Через несколько дней мне наконец удалось прочитать и записать в векторные регистры, используя 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}".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...