169 похожих чатов

Кстати а при вызове winapi-функций какие дополнительные регистры (FPU,MMX,SSE) могут

пострадать?
Можно быть уверенным что ebx/esi/edi/ebp (r12...r15) сохраняются (соглашение stdcall).
А с MMX/SSE как? Помню видел в отладчике что генерируемый MSVC код например использует MMX или SSE для затирания памяти. Википедия пишет что для x86-64 параметры могут в SSE-регистрах передаваться и что MSVC их используется и надо сохранять XMM6/7 в ассемблерных вставках. Но внятного списка повреждаемых MMX/SSE-регистров при вызове winapi - я не нашёл.
Если я что-то загружу в MMX/SSE а потом буду вызывать различные winapi-функции - то есть ли какой-то документ гарантирующий что регистры не будут повреждены?

9 ответов

9 просмотров

Никогда не видел, чтобы stdcall гарантировал то, что регистры не изменятся. Да и вообще использовать регистры для хранения данных не особо хорошая практика.

BlackBloodyRabbit Rabbit
Никогда не видел, чтобы stdcall гарантировал то, ч...

У вас теперь и данные в регистрах нельзя хранить? Ну всё в память будем писать, отличная практика.

CLFLUSH 🇷🇺 rdseed
У вас теперь и данные в регистрах нельзя хранить? ...

Да нет, что Вы, лучше всё хранить в регистрах и ловить уб даже при вызове функций стандартной библиотеки си)

BlackBloodyRabbit Rabbit
Да нет, что Вы, лучше всё хранить в регистрах и ло...

У вас какие-то ограничения по отладчику, или какие ещё причины, что вы не можете проверить, какие регистры изменяет функция после вызова? К тому же, кол-во регистров на x86 для stdcall не так велико. EDI, ESI, EBP, EBX не будут изменяться в большинстве случаев.

CLFLUSH 🇷🇺 rdseed
У вас какие-то ограничения по отладчику, или какие...

Регистры для stdcall?) Что-то новенькое, а расскажите подробнее пожалуйста

Евгений- Автор вопроса
BlackBloodyRabbit Rabbit
Никогда не видел, чтобы stdcall гарантировал то, ч...

на сайте микрософта про Calling conventions это неоднократно заявлено, ebx/esi/edi/ebp сохраняются. И в различной программерской литературе. Ещё нашёл что сохраняется FPU состояние и все регистры кроме st0. А вот про SSE ничего толком нет.

Евгений
на сайте микрософта про Calling conventions это не...

Думаю, стоит найти какую-либо функцию WinAPI, использующую SSE, и посмотреть, сохраняет она, или нет.

BlackBloodyRabbit Rabbit
Никогда не видел, чтобы stdcall гарантировал то, ч...

Нормальная практика, и на x86_64 соглашение гарантирует, что некоторые регистры изменяться не будут

BlackBloodyRabbit Rabbit
Регистры для stdcall?) Что-то новенькое, а расскаж...

Он имел ввиду именно stdcall, не надо путать передачу аргументов и ответственность за сохранность регистров

Похожие вопросы

Обсуждают сегодня

Интересно, нет ли какого-то способа получить из dll не адрес самой метки, а адрес со смещением?
The Bird of Hermes
54
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
Друзья, за кем?
Magic
12
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
А шо, ты этой библиотекой пользуешься?
Darkanronpa Dark Hole
10
Всем привет. Кто-то может подсказать, как можно перевести значения Selection поля, если список значений в нем формируется динамически? Я изначально их получаю из selection дру...
Наталья Селезнева
6
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Или даже по-другому вопрос выстрою Есть ли вообще в electron'e для винды, возможность кнопки действий в нотификацию впихнуть ?
Андрей
7
Карта сайта