herm1t LIVE!ng room - August 17th, 2008 [entries|archive|friends|userinfo]
herm1t

[ website | twilight corner in the herm1t's cave ]
[ userinfo | ljr userinfo ]
[ archive | journal archive ]

August 17th, 2008

Заоптимизировался [Aug. 17th, 2008|04:04 pm]
Вячеслав пишет:
Вообще, мне известен только один движок с хорошей проверкой плохих инструкций - yad by herm1t, но и он не идеален (если это читает herm1t - не в обиду ;): не проверяет уместность lock префикса, не поддерживает sse3 и др., так что команды типа `f0 93 = lock xchg eax,ebx' считает правильными, типа `dd 8a 00 00 00 00 = fisttp qword [edx]', `f3 0f 52 c8 = rsqrtss xmm1,xmm0' - неправильными. Хотя в целом движок хороший и большинство ошибочных команд детиктит.
Я не только не обижаюсь, но и весьма рад найденному багу. Дело в том, что между девятой и десятой версией решил похимичить, и написал:
                        i = diza->p_rep & 3;
                        flags = fetch((flags & YAD_GROUP_MASK) +
                                (flags & C_GROUP ? reg :
                                (diza->p_66 ? 2 : i ^ (i >> 1))));
                        if (flags == C_ERROR)
                                return 0;
Байтики значит экономил. У меня сейчас мозги биты не ксорят, так что и не соображу: то ли посчитал неправильно, то ли собирался поменять порядок команд с префиксами в таблице. Ж-) Неважно откатился и всё заработало.

Да, а дополнительные проверки на префиксы (можно не только lock проверять, но и валидные, но неуместные rep, типа rep nop, помечать, как подозрительные; ETG как раз много такого добра генерирует) это весьма славно, тоже вот думаю сделать. Наверное даже не буду сейчас выпускать новую версию, а домучаю еще SSE3 и те самые проверки.

p.s. Наверное стоит написать небольшую статейку о том, как писать дизассемблеры, а то такая грусть берет когда в очередной раз натыкаюсь на вопрос где-нибудь в форуме: "Подскажите, где в опкоде закодирована его длина?" Ж-)

p.p.s. Заглянул в дизасм detours, какой отстой!

Link7 comments|Leave a comment

navigation
[ viewing | August 17th, 2008 ]
[ go | Previous Day|Next Day ]