访问寄存器不使用内联汇编用gcc [英] Accessing a register without using inline assembly with gcc

查看:278
本文介绍了访问寄存器不使用内联汇编用gcc的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想不写行内assembly.The的原因,我想这样做阅读栈指针寄存器的值,因为我想栈指针寄存器的值赋给数组的元素,我觉得它繁琐的访问数组使用内联汇编。所以,我想要做这样的事情。

I want to read the stack pointer register value without writing inline assembly.The reason I want to do this is because I want to assign the stack pointer register value to an element of an array and I find it cumbersome to access an array using inline assembly. So I would want to do something like that.

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?

Is there anything like that possible with 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   }

拍摄的的变量指定寄存器中的文档。

这篇关于访问寄存器不使用内联汇编用gcc的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆