小编San*_*p P的帖子

如何在Linux 64位上从C编写简单的内联asm指令?

我正在写一个简单的c程序,我的要求是从程序的某些功能打印RIP(指令指针).我不想使用ptrace.

我尝试使用内联asm的一件事是: asm("movl %% rip,%0;":"= r"(val)) 这应该将我的rip寄存器值复制到变量val,但是我得到了编译错误.

如果我使用ebp/esp作为32位机器的基指针和堆栈指针,我不会得到任何编译错误,我的val有一些十六进制数分配.

我在这里几个问题:

1)因为我的机器是63位,上面的指令怎么能读取32位寄存器?

2)为什么我无法读取64位的任何寄存器,是否有任何问题b'caz的'r'

3)当我使用32位的eip我得到编译错误时,是否意味着IP寄存器被限制读取?

x86 assembly x86-64 cpu-registers

4
推荐指数
2
解决办法
5128
查看次数

标签 统计

assembly ×1

cpu-registers ×1

x86 ×1

x86-64 ×1