我正在写一个简单的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寄存器被限制读取?