如何使用内联汇编访问堆栈基指针(rbp)?

时间:2014-03-20 17:32:55

标签: assembly inline-assembly icc

我的要求是通过使用内联汇编来抵消rbp来访问函数调用参数。但我找不到合适的操作数约束来指定x86中的基指针。我使用的是英特尔编译器,但它的文档说明它支持GCC样式的内联汇编。所以基于GCC的例子就足够了。

2 个答案:

答案 0 :(得分:4)

您可以尝试:

#include <stdio.h>
#include <inttypes.h>

int
main(int argc, char **argv)
{
 uint64_t n;

 __asm__ __volatile__(
   "movq %%rbp, %0\n\t"
   : "=r"(n)
 );

 printf("rbp = 0x%" PRIx64 "\n", n);
 return 0;
}

答案 1 :(得分:4)

我知道你要求内联汇编,但请注意,在gcc上你也可以使用__builtin_frame_address,这既可以让你免于内联汇编(yikes)的需要,并且可以提供比直接汇编更多的帧级别。

看这里 - http://gcc.gnu.org/onlinedocs/gcc/Return-Address.html