如何获取堆栈指针的值?(MIPS GCC)

如何获取堆栈指针的值?(MIPS GCC),c,gcc,assembly,mips,inline-assembly,C,Gcc,Assembly,Mips,Inline Assembly,我正在尝试获取调用堆栈,由于某些原因,以下代码返回了错误的堆栈指针: unsigned int stack_pointer = 0; __asm("la $26, %[spAddr]\n\t" "or $27, $0, $sp\n\t" "sw $27, 0($26)\n\t" "nop"::[spAddr] "m" (stack_pointer));

我正在尝试获取调用堆栈,由于某些原因,以下代码返回了错误的堆栈指针:

        unsigned int stack_pointer = 0;
        __asm("la  $26,  %[spAddr]\n\t"
              "or  $27,  $0,  $sp\n\t"
              "sw  $27,  0($26)\n\t"
              "nop"::[spAddr] "m" (stack_pointer));
        return stack_pointer;

这里缺少什么?

要获取堆栈指针,请使用适当的输出约束,如下所示:

register unsigned sp asm("29");
asm("" : "=r" (sp));
请注意,mips使用寄存器作为返回地址,但非叶函数当然可能将其存储在堆栈上

但是,要实现回溯,您可以使用中所述的内置
\uuuuu builtin\u return\u address
\uuuuuu builtin\u extract\u return\u addr


另外,如果glibc可用,它已经有了
backtrace
功能,请参阅。

您没有声明任何输出参数(在第一个冒号之后声明)。你希望在哪里归还东西?看。