Какой адрес в памяти моего кода? - PullRequest
2 голосов
/ 13 ноября 2010

Привет! Я пытаюсь найти адрес памяти, в котором хранятся мои данные.

Это код сборки функции.

   0x08048b20 <+0>:     push   %ebp
   0x08048b21 <+1>:     mov    %esp,%ebp
   0x08048b23 <+3>:     sub    $0x28,%esp
   0x08048b26 <+6>:     lea    -0x14(%ebp),%eax
   0x08048b29 <+9>:     mov    %eax,(%esp)
   0x08048b2c <+12>:    call   0x8048990 <Gets>
   0x08048b31 <+17>:    mov    $0x1,%eax
   0x08048b36 <+22>:    leave  
   0x08048b37 <+23>:    ret   

Мои данные, представляющие собой строку, получаютхранится в -0x14 (% ebp) - (довольно положительно).И я знаю, что обратный адрес должен быть 4 (% ebp).Я пытаюсь установить адрес возврата так, чтобы он указывал на мой код.И я не могу использовать сборку, чтобы сделать это.Мне нужно знать точное место в памяти, где начинается моя функция (я знаю, что она хранится в -0x14 (% ebp)).Может кто-нибудь помочь мне узнать, как получить место в памяти этой позиции?

Адрес в этой строке

0x08048b20 <+0>:     push   %ebp

0x08048b20 - это место в памяти для функции, в которой я нахожусь, а не%ЭБП правильно?Я думаю, что если я получу ячейку памяти для% ebp, я смогу вычислить ячейку памяти, где начинается моя функция.

Я использую GDB, и я не знаю, как получить адрес памятиЭто?Пожалуйста, любая помощь будет оценена.Спасибо.

РЕДАКТИРОВАТЬ: Когда я стою на строке <+6> в коде сборки, я печатаю значения% ebp и% esp, и они имеют точную разницу0x28 как они должны.Поэтому я предположил, что адрес% ebp - это значение, которое я получаю при печати в GDB.

Однако, когда я вычитаю 0x14 из этого значения (0xbfffb5d8), получим 0xbfffb5c4;он не знает, куда прыгать.Если я сохранил свою строку (которая на самом деле является байтовым кодом дизассемблированного кода) в -0x14 (% ebp), и я хочу запустить этот код;разве я не должен указывать обратный адрес -0x14 (% ebp) или я ошибаюсь?

1 Ответ

0 голосов
/ 21 января 2011

Поместите метку перед первой строкой вашей функции. Затем ссылка на метку даст вам адрес первого кода операции в вашей скомпилированной функции. К сожалению, я не понимаю ваш вопрос достаточно, чтобы помочь вам больше, чем это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...