Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

Восстановить пароль
Повторная активизация e-mail

Ответ
 
Опции темы
Старый 09.11.2018, 21:21   #1
Michail235
Пользователь
 
Регистрация: 11.10.2010
Сообщений: 10
Репутация: 10
По умолчанию Структура кадра стека

Пробую разобраться с созданием стекового кадра.
Фрагмент дизассемблированной программы (самое начало):
(gdb) disass main
Dump of assembler code for function main:
0x08048474 <main+0>: push ebp
0x08048475 <main+1>: mov ebp,esp
0x08048477 <main+3>: sub esp,0x8
0x0804847a <main+6>: and esp,0xfffffff0
0x0804847d <main+9>: mov eax,0x0
0x08048482 <main+14>: sub esp,eax
0x08048484 <main+16>: cmp DWORD PTR [ebp+8],0x1
0x08048488 <main+20>: jg 0x80484ab <main+55>
....
Интересует 6 строка.
Несколько вопросов:
1. ebp в соответствии с 1-ой строкой равен esp (в начале работы программы), т.е. это почти адрес стекового кадра main.
Тогда ebp+8 - это адрес где-то вне стека, ведь стек "растет" по уменьшению адресов. А что может быть вне стека?
2. Что это за 1, с которой сравнивается содержимое ebp+8?
3. И зачем?

Спасибо
Michail235 вне форума   Ответить с цитированием
Старый 09.11.2018, 22:03   #2
BDA
Модератор
Заслуженный модератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Адрес: RF Moscow
Сообщений: 5,406
Репутация: 2485

icq: 438888048
По умолчанию

1. Наоборот на стеке, раз он растет вниз.
2 и 3. По соглашению о вызове на стеке будут лежать аргументы вызова функции. Почему именно с единицей, это уже семантика.
__________________
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума   Ответить с цитированием
Старый 09.11.2018, 22:42   #3
Michail235
Пользователь
 
Регистрация: 11.10.2010
Сообщений: 10
Репутация: 10
По умолчанию

По первому вопросу не согласен. Пусть esp = 10. После 1-й строки ebp=10. Стек, таким образом растет от 10 до 0. А ebp+8 = 18 - это вне стека
Michail235 вне форума   Ответить с цитированием
Старый 09.11.2018, 22:50   #4
Black Fregat
Программист
Профессионал
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,194
Репутация: 849
По умолчанию

Цитата:
Сообщение от Michail235 Посмотреть сообщение
Что это за 1, с которой сравнивается содержимое ebp+8?
Для main там будет количество аргументов лежать.
Проверка, есть ли аргументы (кроме имени)
Black Fregat на форуме   Ответить с цитированием
Старый 09.11.2018, 23:04   #5
Michail235
Пользователь
 
Регистрация: 11.10.2010
Сообщений: 10
Репутация: 10
По умолчанию

Спасибо. Очень похоже на правду. Значит ebp+8 указывает на строку аргументов. И в самом начале стека (или на верхней границе стека) лежит строка аргументов. Надо будет отладчиком посмотреть.
Michail235 вне форума   Ответить с цитированием
Старый 09.11.2018, 23:10   #6
Black Fregat
Программист
Профессионал
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,194
Репутация: 849
По умолчанию

Вы который раз говорите про начло стека, границу стека..
До границы стека очень и очень далеко.
Стек ведь не возникакет в момент входа в процедуру.

Вот что там лежит в районе Вашего кода:
Код:

     +-------------------------+
bp+12| Аргумент 2              |  char* argv[]
     +-------------------------+
bp+8 | Аргумент 1              |  int argc 
     +-------------------------+
bp+4 | Адрес возврата          |
     +-------------------------+ <-- SP на момент входа
bp+0 | Сохранённый BP          | 
     +-------------------------+ <-- BP (адрес фрейма)
bp-4 | Локальная переменная 1  |
     +-------------------------+
bp-8 | Локальная переменная 2  |
     +-------------------------+ <-- SP на конец пролога
     | Стек Функции            |
     | ...                     |
     | ...                     |

Black Fregat на форуме   Ответить с цитированием
Старый 09.11.2018, 23:11   #7
BDA
Модератор
Заслуженный модератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Адрес: RF Moscow
Сообщений: 5,406
Репутация: 2485

icq: 438888048
По умолчанию

Цитата:
Сообщение от Michail235 Посмотреть сообщение
По первому вопросу не согласен.
Пусть esp был 0x1000. Сделали пуш на стек 32битного числа. Адрес стал 0xFFC. Там где адрес меньше, еще ничего нет, а там где больше, там начало стека.
__________________
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума   Ответить с цитированием
Старый 10.11.2018, 21:10   #8
Michail235
Пользователь
 
Регистрация: 11.10.2010
Сообщений: 10
Репутация: 10
По умолчанию

2Black Fregat
Огромное спасибо. Если не сложно, откуда сия схема
Michail235 вне форума   Ответить с цитированием
Старый 10.11.2018, 21:29   #9
Pavia
Лис
Профессионал
 
Аватар для Pavia
 
Регистрация: 18.09.2015
Сообщений: 1,646
Репутация: 1773
По умолчанию

От сюда:
http://www.sco.com/developers/devspecs/abi386-4.pdf
https://en.wikipedia.org/wiki/Execut...inkable_Format
__________________
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал .
Pavia на форуме   Ответить с цитированием
Старый 10.11.2018, 22:32   #10
Black Fregat
Программист
Профессионал
 
Аватар для Black Fregat
 
Регистрация: 23.06.2009
Сообщений: 1,194
Репутация: 849
По умолчанию

Цитата:
Сообщение от Michail235 Посмотреть сообщение
Если не сложно, откуда сия схема
Авторский продукт! Эксклюзивно ради Вас! Нарисовал из головы..
Black Fregat на форуме   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Структура стека Daryan Visual C++ 0 12.05.2016 16:59
Длина кадра сети XemyL Помощь студентам 0 05.11.2013 11:17
Вставка кадра... Кулибаба Петро Microsoft Office Word 1 31.12.2012 18:03
Эффект 25 кадра ZvEr_HaCkEr Свободное общение 16 05.08.2010 18:56
Формирование кадра IzhAtomic Помощь студентам 0 26.04.2009 18:44


15:23.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru