c - 在 ARM 中读取堆栈指针值



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

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

但是执行此代码后,操作系统在屏幕上打印"分段错误"消息并终止程序。 任何人都可以给我解决问题的建议吗?

您甚至不应该触摸内联程序集中的堆栈指针。这是一个禁忌!!

你不应该一开始就这样做。只需将其留给编译器即可。

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

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

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

STR sp, [%0]nt替换为mov %0, spnt

最新更新