在ARM中读取堆栈指针值

时间:2019-07-15 00:21:49

标签: c assembly arm inline-assembly

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

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

但是执行此代码后,os在屏幕上显示“ Segmentation fault”消息,并终止程序。有人可以给我建议解决问题吗?

1 个答案:

答案 0 :(得分:1)

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

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

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

您要执行的操作:将堆栈指针复制到32位寄存器。

您所做的:将堆栈指针本身存储到地址0。==>分段错误。

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