|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
17.11.2023, 01:56 | #21 |
Пользователь
Регистрация: 08.11.2023
Сообщений: 24
|
BDA, спасибо за подсказку, что-то я и не подумал стек очищать, ведь так он у меня все время будет мусором забиваться, да?
R71MT, я ж только начинаю вникать, хотелось бы поподробней узнать, что и как работает, саму, так сказать механику. Интересней же самому поковыряться. |
17.11.2023, 05:11 | #22 |
МегаМодератор
СуперМодератор
Регистрация: 09.11.2010
Сообщений: 7,357
|
Дело не в мусоре, а в том, что программа начнет работать непредсказуемо. Вы не сохраняете и не восстанавливаете EBP, т.е. не восстанавливаете стековый кадр вызывающей функции, чем "ломаете" адресацию относительно EBP (вызывающая функция "потеряет" свои аргументы и локальные переменные). А без очистки стека от аргументов вызывающая функция, например, может использовать их для восстановления значений регистров, вместо сохраненных значений.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
|
18.11.2023, 05:20 | #23 |
Пользователь
Регистрация: 08.11.2023
Сообщений: 24
|
А вызывающая функция, я так понимаю - DispatchMessage? Согласен, я потерял стек.
Больше пока никаких функций нет... А с этим stdcall опять гемор - надо ничего не забыть. Вы мне вот что скажите, я пока не пойму - в оконной процедуре обязательно обрабатывать параметры, полученные через стек? Тогда нафига структура msg нужна? Можно с неё напрямую значения брать? |
18.11.2023, 05:31 | #24 |
Пользователь
Регистрация: 08.11.2023
Сообщений: 24
|
BDA, поймите меня правильно. Я из категории тех людей, которым, допустим, в детстве папа подарил заводную машинку, так я не смотрел, как эта машинка ездит, а спёр папину отвёртку, и разобрал машинку, чтоб узнать, почему она ездит.
Ясен хрен, что в данном процессе машинка пришла в негодность, зато ребёнок получил бесценный опыт.. Вот и я хочу понять асм |
18.11.2023, 08:20 | #25 | ||
Старожил
Регистрация: 15.02.2010
Сообщений: 15,772
|
Цитата:
Цитата:
|
||
18.11.2023, 14:23 | #26 | |
Пользователь
Регистрация: 08.11.2023
Сообщений: 24
|
для функции DispatchMessage, структура msg ведь содержит содержимое сообщения?
Кстати, у Пирогова написано: Цитата:
Так в процедуру окна в стеке передается вся эта информация, или только HWND,UINT,WPARAM,LPARAM, как у Пирогова? Унего в конце оконной обработки стоит ret 16, т.е только четыре значения. А остальные где? |
|
18.11.2023, 14:30 | #27 |
Просветитель
Участник клуба
Регистрация: 26.12.2012
Сообщений: 1,844
|
Ты там свою ОС писать собрался, что ли, раз так глубоко копаешь? Или книгу?
|
18.11.2023, 14:34 | #28 |
Пользователь
Регистрация: 08.11.2023
Сообщений: 24
|
Вопрос был не в этом, а в том, что в процедуре окна структура msg будет имет те же значения, что и [esp+4],[esp+8],[esp+0ch],[esp+10h]?
И что будет по адресам [esp+14h],[esp+18h], и.т.д.? |
18.11.2023, 14:35 | #29 |
Пользователь
Регистрация: 08.11.2023
Сообщений: 24
|
Vapaamies, просто интересно, как оно всё работает. Может, счас начну, а лет через двадцать закончу какую-нибудь GTA 50? ))))
{к тому времени уже и GTA 100 выйдет )))))) Последний раз редактировалось groverx; 18.11.2023 в 14:42. |
18.11.2023, 14:45 | #30 |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,772
|
Да нет там MSG. Она есть только в вашем лупе сообщений, локальная. Процедура окна вызывается асинхронно, не синхронизируется с вашим кодом и т.д.
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос от новичка | Валерий718 | Помощь студентам | 4 | 23.10.2013 19:28 |
Вопрос новичка | geranton | Общие вопросы Delphi | 2 | 23.03.2012 14:00 |
Вопрос новичка | vaultboy2010 | Общие вопросы C/C++ | 3 | 02.10.2011 01:51 |
Создание функции вопрос от новичка C | CKent | Общие вопросы C/C++ | 2 | 07.12.2008 17:31 |