在 ARM 中读取堆栈指针值

Reading stack pointer value in ARM

我正在尝试将 SP 寄存器的值存储到 C 中的一个变量中,这是我的代码:

int address = 0;
asm volatile ("STR sp, [%0]\n\t"
     : "=r" ( address)
     );

但执行此代码后,os 在屏幕上打印 "Segmentation fault" 消息并终止程序。谁能给我一个解决问题的建议?

在内联汇编中,您甚至不应该触摸堆栈指针。这是禁忌!!!

你一开始不应该这样做。交给编译器吧。

如果您没有更改堆栈指针或向堆栈写入任何内容,它可能会起作用,您只是使用了错误的指令。

您想做什么:将堆栈指针复制到 32 位寄存器。

你做了什么:将堆栈指针本身存储到地址 0。==> 段错误。

STR sp, [%0]\n\t替换为mov %0, sp\n\t