eip/ripの取得方法メモ

インラインアセンブラでmovqとかで直接読み出せないので,call命令を使う.
参考「OSDev.org

#include <iostream>

int main(int argc, char **argv)
{
     unsigned long rip = 0;

     __asm__ __volatile__ ("call 1f\n\t"
		       "1: pop %0;\n\t"
                       :"=r"(rip));

     std::cout << "rip is " << std::hex << std::showbase << rip << std::endl;

     return 0;
}