Привет! Я пытаюсь найти адрес памяти, в котором хранятся мои данные.
Это код сборки функции.
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) или я ошибаюсь?