lldb表达式评估中的内联汇编?

时间:2016-03-30 07:23:33

标签: lldb

我尝试在LLDB的表达式中使用内联汇编,但它似乎不起作用。作为玩具示例,我在ARM上运行:

(lldb) expr  __asm__ __volatile__("mov r0, 4");
(lldb) register read
General Purpose Registers:
        r0 = 0x00000003

实际上我需要访问特殊的CP15 c13软件线程ID寄存器,并且无法在LLDB中找到其他方式 - 所以这里的想法将不胜感激。我想过用

expr  __asm__ __volatile__("MRC p15, 0, r0, c13, c0, 3");

它运行,但对r0的内容没有影响。 非常感谢!

1 个答案:

答案 0 :(得分:2)

写入寄存器的表达式实际上不会改变寄存器状态。在运行表达式之前,lldb保存寄存器状态,然后运行表达式,然后在完成后恢复寄存器状态。几乎在所有情况下,您都不希望对寄存器进行任何更改,以便运行一些复杂的表达式,以便在程序继续时继承,或者它只会崩溃。

如果您需要明确更改注册状态,则必须使用register read

我知道这不是你练习的重点,这个评论更多的是解释为什么这种方法不起作用。