Могу ли я получить RIP-адрес в C? - PullRequest
0 голосов
/ 08 апреля 2019

В основном я пытаюсь получить адреса RSP, RBP и RIP в указатели.

Код:

#include <stdio.h>

int main()
{
    char buf[500];
    int *rsp;
    int *rbp;
    int *rip;
    strcpy(buf, "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA");
    ptr = buf;
    printf("[buf:%p:%s]\n[rsp:%p:%s]\n", &buf, buf, rsp, rsp);

    return 0;
}

Указанный выше указатель отлично работает при получении адреса RSP.Но я не знаю, как получить адреса RBP и RIP.

Можете ли вы сказать мне, как я могу указать * rbp на RBP адрес и * копировать на RIP адрес?

1 Ответ

2 голосов
/ 08 апреля 2019
  • Текущее оборудование x86 не работает таким образом, поэтому вы не можете получить адрес любого регистра - у него просто нет одного .

  • Что это значит? Это означает, что вы можете получить значение каждого регистра, но вы не можете получить адрес регистров - у них нет ни одного.

  • Например, если в начале функции вы выполните следующее, вы получите адрес, на который указывает ваш RIP.

void foo(param a, param b)
{
   int dummy;
   int* rip = &dummy;
}

Но учтите, что вам эта функция будет недоступна вне этой функции.

...