Assembly 与ARM LDR指令关联的散列(#)值是什么意思?

Assembly 与ARM LDR指令关联的散列(#)值是什么意思?,assembly,arm,Assembly,Arm,我正在尝试调试应用程序中遇到的崩溃。堆栈跟踪指向具有以下格式的LDR指令(感谢反汇编程序): 我的问题是关于源组件的。第二个参数中的#4是什么意思?我假设它是某种偏移量,但我还没有找到支持LDR指令的文档。它从地址以R0+4字节的形式加载R3。所以,是的,它是一个字节偏移量 它将R0中的值加上4,并使用它作为地址将32位值加载到GNU gas中的寄存器R3中,只有在不使用时,ARMv7才需要哈希。语法统一 例如,对于ARMv8aarch64 linux gnu,您可以在不使用#的情况下编写它:

我正在尝试调试应用程序中遇到的崩溃。堆栈跟踪指向具有以下格式的LDR指令(感谢反汇编程序):


我的问题是关于源组件的。第二个参数中的#4是什么意思?我假设它是某种偏移量,但我还没有找到支持LDR指令的文档。

它从地址以R0+4字节的形式加载R3。所以,是的,它是一个字节偏移量

它将R0中的值加上4,并使用它作为地址将32位值加载到GNU gas中的寄存器R3中,只有在不使用
时,ARMv7才需要哈希
。语法统一

例如,对于ARMv8
aarch64 linux gnu,您可以在不使用
#
的情况下编写它:

LDR x0, [x0,4]
.syntax unified
LDR x0, [x0,4]
或者如果在
arm linux gnueabihf as
中使用
.syntax unified

LDR x0, [x0,4]
.syntax unified
LDR x0, [x0,4]

更多详细信息,请访问:

对于真正全面的报道,请务必明智地阅读——这是一本好书,非常古老,但仍然可能是最好的ARM学习辅助工具。通常在ARM汇编程序中,#用于表示即时值。