让我们说我想在双核x64 CPU上读取这些寄存器的值(以及它的全部内容)。 我怎样才能做到这一点? 我可以简单地写一下:
uint64_t rax = 0, rbx = 0; __asm__ __volatile__ ( /* read value from rbx into rbx */ "movq %%rdx, %0;n" /* read value from rax into rax*/ "movq %%rax, %1;n" /* output args */ : "=r" (rbx), "=r" (rax) : /* no input */ /* clear both rdx and rax */ : "%rdx", "%rax" );
然后只打印出rax
和rbx
? 干杯
使用gcc执行此操作的正确方法是使用寄存器约束:
uint64_t rax = 0, rbx = 0; __asm__("" : "=a"(rax), "=b"(rbx) ::); /* make rax and rbx take on the current values in those registers */
请注意,您不需要任何实际指令 – 约束告诉gcc在不执行任何操作后,值rax将位于rax中,rbx的值将位于rbx中。
您可以使用约束a
, b
, c
, d
, S
和D
(后两者用于%rsi和%rdi)。 您还可以将Yz用于%xmm0。 不幸的是,似乎没有其他特定寄存器的限制。
以上就是c/c++开发分享如何读取寄存器:RAX,RBX,RCX,RDX,RSP。 C或C ++中的RBP,RSI,RDI?相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/c-cdevelopment/545303.html