我正在尝试追查一些先前存在的 ARM 汇编代码中的异常。有问题的行是:
ldr x0, [x21, x19, lsl #3]
上式的结果是x0
具有无效的内存地址,后续代码会尝试使用该地址。
我知道它lsl
正在执行左移 3,但我不确定它实际上在执行什么操作。我以前没有见过移位左侧的值。转移通常是指要转移的值、转移的距离以及转移的方向。如果上面的行同时使用 x21 和 x19,它们在班次中如何使用?寄存器之一是低32位,另一个是高32位吗?
x19
当前为 0x0
x21
当前为大于 0x0 的值
我无法更改上面的行,但我可以更改 x19 和 x21 的值。任何解释这一点的帮助将不胜感激。
我追踪了汇编代码,找到了所有寄存器的值,并在互联网上搜索了如何解码有问题的行