我的要求是通过使用内联汇编来抵消rbp来访问函数调用参数。但我找不到合适的操作数约束来指定x86中的基指针。我使用的是英特尔编译器,但它的文档说明它支持GCC样式的内联汇编。所以基于GCC的例子就足够了。
答案 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)的需要,并且可以提供比直接汇编更多的帧级别。