Почему в GDB значение "frame at" отличается от значения регистра ebp ($ fp)? - PullRequest
0 голосов
/ 23 сентября 2018

Я пытаюсь понять базовый язык ассемблера, изучая информацию фрейма стека в GDB.Я попытался выяснить, что произошло, когда функция вызывается основной функцией.

Но я обнаружил, что значение "frame at" в "info frame" отличается от значения регистра ebp в "info"рег».По соглашению, не должны ли эти два значения указывать начальную точку кадра стека и быть идентичными?

(gdb) info frame
Stack level 0, frame at 0xffffced8:
...
(gdb) info reg
esp            0xffffcec0   0xffffcec0
ebp            0xffffced0   0xffffced0

Я полагаю, это потому, что адрес от 0xffffced8 до 0xffffced0 используется для хранения таких данных, как адрес возврата и входные параметры?Как я могу проверить свою идею?

1 Ответ

0 голосов
/ 23 сентября 2018

GDB определяет адрес кадра как «адрес ячейки памяти после последнего слова, принадлежащего кадру.» http://visualgdb.com/gdbreference/commands/info_frame

(Это может быть связано с архитектурой. ftp: // ftp.gnu.org / старая-гну / Руководство / GDB / html_chapter / gdb_7.html )

...