在 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
我正在尝试将 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