Отладка GDB для чего 8-байтный пробел? - PullRequest
0 голосов
/ 01 июня 2019

Я отлаживаю функцию, чтобы узнать больше о структуре стека в памяти. Я использую GDB на ОС Ubuntu x86. Моя функция состоит из следующего:

function func(){
   long local1=0;
   printf("address of swap is %p\n",&local1);
}

В GDB я устанавливаю точку останова внутри функции и распечатываю значения кадра, используя info frame. Я могу получить адрес сохраненных регистров ebp и eip, который, как я предполагаю, содержит сохраненный базовый указатель и адрес возврата соответственно. Я также распечатываю адрес local1. Поэтому, используя эти адреса, я создал следующий стек:

bffff03c --> eip (stores the return address)
bffff038 --> ebp (saved base pointer)
bffff02c --> local1 address

Теперь я должен что-то упустить, потому что между ebp и local1 существует 8-байтный разрыв. Я предположил, что тип данных local1 составляет 4 байта, что оставляет адрес между bffff030 -> bffff038 неучтенным. Был бы очень признателен за помощь с этим.

EDIT

вот код сборки. единственная аномалия, о которой я мог подумать, это инструкция SUB, следующая за mov esp,ebp, хотя я не уверен, как она связана с пропуском. enter image description here

...