Интересует наличие багов в дизассемблировании и особенно поведение на нестандартных коммандах. http://ms-rem.narod.ru/Tester.exe
При дизасме пакованного файла (ASPack): 0xc0000005 по адресу 0x403718 При дизасме самого себя: 0xc0000005 по адресу 0x4038b0
Он дизасмит файл начиная с EP и заканчивая первым ret. Если ret не встречается, то естественно падает. Для тестирования надо просто налабать что-нибудь на масме и отдизасмить (главное чтобы ret был). Интересуют именно баги в дизассемблировании инструкций, а не загрузки файлов или интерфейса, так как предназначен этот дизасм для анализатора кода.
Интересуют такие ошибки как неправильное определение команды, ее размера, операндов и.т.д. Ну и ошибки в формировании мнемоники команды. Поддерживаемый набор инструкций - все Pentium Pro кроме MMX
Концептуальный баг в команде CALL (вообще в rel-командах). Блин, ты хоть бы цвет поменял в риче. Если свой выложу, некрасиво будет. Конечно, тестер гораздо лучше стал, но схожесть тут всё же не к месту...
6A не расширяет... прогони с оригинала команды, работающие с drX/crX/trX, которые байтами закодированы.
Баг есть с TR регистрами, а с остальным вроде все нормально. _BC_ Извини что позаимствовал твой темплейт к GUI
Попробуй 0F 20 38 0f 21 38 0F 21 0F и тд Команды 0F 25/27 и другие aaa возвращают. Насчет бага с rel-командами: если в 32-битном коде будет, например, 66 E8 00 00, то в этом случае destination & FFFFh. Т.е. dest усекается до 16 бит. Вообще, надо разделять уровни 'инвалидности' команд. Одно дело когда команда неверна уже на стадии декодирования опкода, а другое дело если у нее бессмысленные операнды. C4C4 тому пример. Проверку операндов лучше возложить на анализатор, а не на дизассемблер. Дизассемблеру заранее неизвестно, какие параметры команды вызовут ошибку, исключение может вызвать даже банальная команда mov [0FFFFFFFFh], eax Она заведомо неправильна, но ее ведь лучше не выводить как 'INVALID', nein? Тоже самое в отношении команд типа les edi,edi. Лучше если дизассемблер будет выдавать 'INVALID' только на ошибки в декодере опкода. В заведомо неверных параметрах может содержаться полезная информация (например для обработчика #UD). Если дизасм будет на них отплевываться 'invalid', то для извлечения этой инфы (если вдруг понадобится) анализатору надо будет самому парсить префиксы, опкоды, и тд для ее извлечения.
Неправильный размер операндов на: 8С E0 (должно быть mov eax, segment_registr) Также не забывай про "инвалидный" сегментный регистр: 8С F0 Также нет обработки инвалидных операндов у lea: 8D C4 CB 41 Неправильно определяется инвалидный опкод: 0F 6E 00 (должно быть movd mm0,[eax])
8CE0 определяется как mov ax, fs, ты наверно по русски буквы написал Проверку на инвалидный сегментный регистр добавил, а поддержки MMX сейчас нет, поэтому 0F 6E 00 и не должно определяться. Насчет обработки инвалидных операндов - _BC_ уже сказал что эта работа не для дизассемблера. Я с ним согласен.
Ms Rem 8C/8E XX в 32-битном режиме обнуляет старшую часть регистра. На этом когда-то эмуляторы ловили...
Баг исправлен. Кстати, obj дизасма я собираюсь потом выложить вместе с примерами использования. А написан он так, что его можно хоть в ринг0 юзать, хоть в другой ОС. Так что тестируем активнее
Народ, может кините ссылку на доку с таблицей MMX команд и их опкодов. Интел мануалы у меня есть, но очень трудоемко оттуда выдирать, так как там ММХ с SSE перемешаны и куча описаний между ними. Надо все в одной доке чтоб компактно (команда - опкод) без всяких описаний.
Чето не пришло ничего. Может яндекс глючит, а может ты не туда отослал В любом случае лучше дай линк или скинь атачем на форум, т.к. не одному мне надо, у меня уже просили по аське эту доку рассылать дальше