c/c++语言开发共享如何读取寄存器:RAX,RBX,RCX,RDX,RSP。 C或C ++中的RBP,RSI,RDI?

让我们说我想在双核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" ); 

然后只打印出raxrbx ? 干杯

    使用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中。

    您可以使用约束abcdSD (后两者用于%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

      (0)
      上一篇 2021年1月12日
      下一篇 2021年1月12日

      精彩推荐