Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2023, 01:56   #21
groverx
Пользователь
 
Регистрация: 08.11.2023
Сообщений: 24
По умолчанию

BDA, спасибо за подсказку, что-то я и не подумал стек очищать, ведь так он у меня все время будет мусором забиваться, да?
R71MT, я ж только начинаю вникать, хотелось бы поподробней узнать, что и как работает, саму, так сказать механику. Интересней же самому поковыряться.
groverx вне форума Ответить с цитированием
Старый 17.11.2023, 05:11   #22
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,357
По умолчанию

Дело не в мусоре, а в том, что программа начнет работать непредсказуемо. Вы не сохраняете и не восстанавливаете EBP, т.е. не восстанавливаете стековый кадр вызывающей функции, чем "ломаете" адресацию относительно EBP (вызывающая функция "потеряет" свои аргументы и локальные переменные). А без очистки стека от аргументов вызывающая функция, например, может использовать их для восстановления значений регистров, вместо сохраненных значений.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 18.11.2023, 05:20   #23
groverx
Пользователь
 
Регистрация: 08.11.2023
Сообщений: 24
По умолчанию

А вызывающая функция, я так понимаю - DispatchMessage? Согласен, я потерял стек.
Больше пока никаких функций нет...
А с этим stdcall опять гемор - надо ничего не забыть.
Вы мне вот что скажите, я пока не пойму - в оконной процедуре обязательно обрабатывать параметры, полученные через стек? Тогда нафига структура msg нужна? Можно с неё напрямую значения брать?
groverx вне форума Ответить с цитированием
Старый 18.11.2023, 05:31   #24
groverx
Пользователь
 
Регистрация: 08.11.2023
Сообщений: 24
По умолчанию

BDA, поймите меня правильно. Я из категории тех людей, которым, допустим, в детстве папа подарил заводную машинку, так я не смотрел, как эта машинка ездит, а спёр папину отвёртку, и разобрал машинку, чтоб узнать, почему она ездит.
Ясен хрен, что в данном процессе машинка пришла в негодность, зато ребёнок получил бесценный опыт..
Вот и я хочу понять асм
groverx вне форума Ответить с цитированием
Старый 18.11.2023, 08:20   #25
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,772
По умолчанию

Цитата:
Сообщение от groverx Посмотреть сообщение
ы мне вот что скажите, я пока не пойму - в оконной процедуре обязательно обрабатывать параметры, полученные через стек? Тогда нафига структура msg нужна? Можно с неё напрямую значения брать?
Цитата:
Parameters
unnamedParam1

Type: HWND

A handle to the window. This parameter is typically named hWnd.

unnamedParam2

Type: UINT

The message. This parameter is typically named uMsg.

For lists of the system-provided messages, see System-defined messages.

unnamedParam3

Type: WPARAM

Additional message information. This parameter is typically named wParam.

The contents of the wParam parameter depend on the value of the uMsg parameter.

unnamedParam4

Type: LPARAM

Additional message information. This parameter is typically named lParam.

The contents of the lParam parameter depend on the value of the uMsg parameter.
Найдите MSG здесь.
p51x вне форума Ответить с цитированием
Старый 18.11.2023, 14:23   #26
groverx
Пользователь
 
Регистрация: 08.11.2023
Сообщений: 24
По умолчанию

для функции DispatchMessage, структура msg ведь содержит содержимое сообщения?
Кстати, у Пирогова написано:
Цитата:
MSGSTRUCT STRUC
MSHWND DD ?
MSMESSAGE DD ?
MSWPARAM DD ?
MSLPARAM DD ?
MSTIME DD ?
MSPT DD ?
MSGSTRUCT ENDS
А в windows.inc MSPT сама по себе тоже структура, изанимает две переменных DWORD.
Так в процедуру окна в стеке передается вся эта информация, или только HWND,UINT,WPARAM,LPARAM, как у Пирогова? Унего в конце оконной обработки стоит ret 16, т.е только четыре значения. А остальные где?
groverx вне форума Ответить с цитированием
Старый 18.11.2023, 14:30   #27
Vapaamies
Просветитель
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,844
По умолчанию

Ты там свою ОС писать собрался, что ли, раз так глубоко копаешь? Или книгу?
Vapaamies вне форума Ответить с цитированием
Старый 18.11.2023, 14:34   #28
groverx
Пользователь
 
Регистрация: 08.11.2023
Сообщений: 24
По умолчанию

Вопрос был не в этом, а в том, что в процедуре окна структура msg будет имет те же значения, что и [esp+4],[esp+8],[esp+0ch],[esp+10h]?
И что будет по адресам [esp+14h],[esp+18h], и.т.д.?
groverx вне форума Ответить с цитированием
Старый 18.11.2023, 14:35   #29
groverx
Пользователь
 
Регистрация: 08.11.2023
Сообщений: 24
По умолчанию

Vapaamies, просто интересно, как оно всё работает. Может, счас начну, а лет через двадцать закончу какую-нибудь GTA 50? ))))
{к тому времени уже и GTA 100 выйдет ))))))

Последний раз редактировалось groverx; 18.11.2023 в 14:42.
groverx вне форума Ответить с цитированием
Старый 18.11.2023, 14:45   #30
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,772
По умолчанию

Цитата:
Сообщение от groverx Посмотреть сообщение
Вопрос был не в этом, а в том, что в процедуре окна структура msg будет имет те же значения, что и [esp+4],[esp+8],[esp+0ch],[esp+10h]?
Да нет там MSG. Она есть только в вашем лупе сообщений, локальная. Процедура окна вызывается асинхронно, не синхронизируется с вашим кодом и т.д.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопрос от новичка Валерий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