Любой адрес возврата, помещенный в стек, даст вам %rip
, начинающийся после возврата текущей выполняемой функции, а не %rip
текущей выполняемой функции.Вы должны быть в состоянии получить текущую %rip
точно так же, как GDB:
- В идеале ваша платформа поддерживает аргумент
PTRACE_GETREGS
или PTRACE_GETREGSET
.Ваша man-страница и заголовочный файл должны пройти отсюда до конца. - Если это не удастся, вы сможете использовать аргумент
PTRACE_PEEKUSER
с соответствующим смещением для захвата регистра из области пользователя.
Вы можете посмотреть подробности gorey в gdb/amd64-linux-nat.c
в дереве исходных текстов GDB.