我正在尝试调试我在应用程序中遇到的崩溃。堆栈跟踪指向具有以下格式的LDR指令(感谢反汇编程序):
LDR R3, [R0,#4]
我的问题是关于源组件。第二个参数中的#4是什么意思?我假设它是某种偏移量,但我没有找到支持LDR指令的文档。
答案 0 :(得分:8)
它从R0 + 4字节的地址加载R3。所以,是的,它是一个字节偏移量。 See this explanation of the addressing modes
答案 1 :(得分:2)
它将R0中的值加4,并将其用作将32位值加载到寄存器R3中的地址
答案 2 :(得分:1)
在GNU gas中,仅当不使用#
的ARMv7才需要哈希.syntax unified
例如,对于ARMv8 #
,您可以不使用aarch64-linux-gnu-as
来编写它:
LDR x0, [x0,4]
或者在.syntax unified
中使用arm-linux-gnueabihf-as
:
.syntax unified
LDR x0, [x0,4]
更多详细信息,请访问:Is the hash required for immediate values in ARM assembly?