eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 3 апреля!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: hlmadip (+3 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Программирование —› Верно ли, что в этом asm коде - Undefined Behaviour?
Посл.ответ Сообщение

Ранг: 5.0 (гость)
Статус: Участник

Создано: 3 февраля 2019 15:53 New!
Цитата · Личное сообщение · #1

.text:004C90B2 fnstsw ax
.text:004C90B4 fcomp ds:flt_68A868
.text:004C90BA test ah, 1 ; AND with wrap registers of FPU
.text:004C90BD fstp st << Sets C0, C2, C3 to Undefined
.text:004C90BF fnstsw ax << Copyes Udefined bits of SW to AX
.text:004C90C1 jnz short loc_4C90DE
.text:004C90C3 test ah, 41h << And with Undefined bits == Undefined Behaviour?!
.text:004C90C6 jp short loc_4C90F9
.text:004C90C8 mov eax, [esp+8+var_4]

Верно я понимаю, что в третьей строке с конца UB ?

Ранг: 224.1 (наставник)
Статус: Участник

Создано: 3 февраля 2019 17:15 New!
Цитата · Личное сообщение · #2

Нет неправильно.
C0, C2 и C3 это биты 8, 10 и 14 регистра SW - они здесь не проверяются.
--> Link <--
Проверяются SF и IE.

Ранг: 5.0 (гость)
Статус: Участник

Создано: 3 февраля 2019 18:05 New!
Цитата · Личное сообщение · #3

Вы уверены, что правы на счет SF и IE ?
В Ккоманде Test мы проверяем значения регистра ah, то есть старший байт АХ, а старший байт начинается с 8 и далее битов SW.

Добавлено спустя 2 минуты
cppasm пишет:
Проверяются SF и IE.

Вот вам даже статья с WASM:
https://vxlab.info/wasm/article.php-article=1010027.htm
И цитата от туда же:

Проверка, больше ли одно значение другого:

FLD [a]
FCOMP [b]
FNSTSW AX
AND AH,41H
JZ AGreaterThanB

А проверить через fcomp, мы можем только по регистрам C0.. C3. В чем я ошибаюсь?

Ранг: 224.1 (наставник)
Статус: Участник

Создано: 3 февраля 2019 19:26 New!
Цитата · Личное сообщение · #4

Ни в чём, не заметил что в test проверяется ah.
Тогда по идее правильно - чисто теоретически поведение не определено.
Это скорее всего проверка на запуск под ВМ или типа того.
Ты же понимаешь что реальный процессор туда всё равно что-то запишет, скорее всего значения фиксированные, просто не документированы.

Ранг: 64.5 (постоянный)
Статус: Участник

Создано: 3 февраля 2019 20:03 · Поправил: Boostyq New!
Цитата · Личное сообщение · #5

cppasm пишет:
реальный процессор туда всё равно что-то запишет

Понятно что там будет значение
Другое дело что неизвестно запишутся ли нули или значение останется с прошлых инструкций и будет ли эффект одинаковым на всех процессорах (нет)
И делать какие-то условия с undefined значениями ну такое...

Ранг: 224.1 (наставник)
Статус: Участник

Создано: 4 февраля 2019 13:18 New!
Цитата · Личное сообщение · #6

Такое, не такое - а по факту работать будет.
Хотя если следовать мануалам - код кривой.
Я вот специально проверил: в мануалах как Intel, так и AMD, состояние флагов C0, C2 и C3 после выполнения FSTP - Undefined.
А по факту на том железе где смог проверить - флаги не меняются, остаётся предыдущее значение.
Т.е. работать скорее всего будет, но код потенциально кривой.
Лучше поменять местами FSTP ST и FNSTSW AX и получить гарантированно рабочий код.

Ранг: 245.0 (наставник)
Статус: Участник

Создано: 4 февраля 2019 20:17 · Поправил: difexacaw New!
Цитата · Личное сообщение · #7

x0x0x

Вся подробная инфа есть в манах на архитектуру. Там есть подробнейшее описание, псевдокод обработки инструкции, избыток инфы. Для каждой инструкции чётко определено состояние изменяемого контекста, для каждой инструкции это указано. Вам нужен кто то что бы за вас почитал архитектурный док, тоесть сами это вы сделать не можете. А причины какие, забанил гугл, слабоумие, есчо что то ?
 eXeL@B —› Программирование —› Верно ли, что в этом asm коде - Undefined Behaviour?

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS