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 ответов

26 просмотров

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта