Связь между указателем программы / инструкции (RIP) и указателем базы / кадра (RBP) в 64-битной Linux - PullRequest
2 голосов
/ 07 июля 2010

Мне нужна помощь в получении указателей инструкций ( RIP ) стека вызовов на компьютере Linux 64 бит .я могу пройти через стек, используя ptrace, и получить все значения указателя кадра / базы ( RBP ).но поскольку я хочу значения IP, какова арифметическая и концептуальная связь между RIP и RBP. Я предполагаю, что значение RIP хранится в местоположении (RBP + 8) и может считывать его, используя ptrace PEEKDATA .мое предположение верно?

1 Ответ

2 голосов
/ 10 июля 2010

Любой адрес возврата, помещенный в стек, даст вам %rip, начинающийся после возврата текущей выполняемой функции, а не %rip текущей выполняемой функции.Вы должны быть в состоянии получить текущую %rip точно так же, как GDB:

  • В идеале ваша платформа поддерживает аргумент PTRACE_GETREGS или PTRACE_GETREGSET.Ваша man-страница и заголовочный файл должны пройти отсюда до конца.
  • Если это не удастся, вы сможете использовать аргумент PTRACE_PEEKUSER с соответствующим смещением для захвата регистра из области пользователя.

Вы можете посмотреть подробности gorey в gdb/amd64-linux-nat.c в дереве исходных текстов GDB.

...