私は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に対話的にこれを行うことができるということを理解しregister write xmm0 "{0x00 0x01 ... 0x0f}"
に示すように、 https://www.mail-archive.com/[email protected]/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}"
フォーマット。