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++游戏开发关注(猴子技术宅)。

      本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

      如若转载,请注明出处:https://www.ssfiction.com/c-cyuyankaifa/545303.html

      发表评论

      电子邮件地址不会被公开。 必填项已用*标注