问题描述
我想读取堆栈指针寄存器值而不写入内联汇编.我要这样做的原因是因为我想将堆栈指针寄存器值分配给数组的元素,并且发现访问数组很麻烦使用内联装配.所以我想做这样的事情.
register "rsp" long rsp_alias; <--- How do I achieve something like that in gcc? long current_rsp_value[NUM_OF_THREADS]; current_rsp_value[tid] = rsp_alias;
GCC有什么可能吗?
推荐答案
有一个快捷方式:
register long rsp asm ("rsp");
演示:
#include<stdio.h> void foo(void) { register long rsp asm ("rsp"); printf("RSP: %lx\n", rsp); } int main() { register long rsp asm ("rsp"); printf("RSP: %lx\n", rsp); foo(); return 0; }
给出:
$ gdb ./a.out GNU gdb (Gentoo 7.2 p1) 7.2 ... Reading symbols from /home/user/tmp/a.out...done. (gdb) break foo Breakpoint 1 at 0x400538: file t.c, line 7. (gdb) r Starting program: /home/user/tmp/a.out RSP: 7fffffffdb90 Breakpoint 1, foo () at t.c:7 7 printf("RSP: %lx\n", rsp); (gdb) info registers .... rsp 0x7fffffffdb80 0x7fffffffdb80 .... (gdb) n RSP: 7fffffffdb80 8 }
取自 em> 文档.
其他推荐答案
register const long rsp_alias asm volatile("rsp");