Я пишу простую программу на 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), когда я использую eip, который предназначен для 32Если я получаю ошибку компиляции, значит ли это, что регистры IP ограничены для чтения?