Мне надо для создания дизассемблера, в точности знать состояние процессора серии X86 в результате выполнения большинства или даже всех возможных команд. К сожалению, в специальной литературе, точнее - той что доступна в интернет, многое упускается из виду. Есть ли у кого какие идеи чтобы создать такой документ по каждой команде, учитывая все возможные, либо наиболее критические состояния процессора. Я предполагаю, что есть возможность как-то автоматизировать процесс получения этих данных, выполняя каждую команду не реальном процессоре под отладчиком и перебором всех вариантов состояний. Заранее спасибо за помощь.
Intel Manual + исходники открытых виртуальных машин с программной эмуляцией, типа Bochs. Для автоматизации можно научиться выдирать информацию из .pdf файлов (в Intel Manual описано состояния флагов, исключения и т.д.).
MisterX что упускается из виду ??? например ??? что за спец литературу вы читаете ??? комсомольскую правду что ли ??
1. Цель обозначена: А на кой, простите, орган тела, дизассемблеру надо знать состояние процессора? Дизассемблер должен тупо перевести машинный код в текстовые мнемокоды, и отдать это пользователю. Есть более крутые варианты, но - они ЕСТЬ! их не надо создавать, ИДА должна удовлетворить любого. 2. Это как это? И что имеется в виду? Флаги? содержимое регистров? Уверяю, что в специальной литературе (упомянутых уже Intel software developer manuals) есть все, что нужно, кроме разве что точного времени исполнения команд... которое тоже есть для оценочных прикидок, в виде таблицы латентностей в приложениях. 3. Предположение просто великолепно. Это напоминает изучение процессора методом тыка мною лично в 8-м классе школы. Память от 0 до 6FFF заливается кодом 00, и запускается на выполнение с адреса 0. "РК86" виснет. Ресетим, заливаем 01, повторяем. На экране возникает мусор. Круто! )))) Но пока я не прочитал некий минимум, дело все равно не пошло. Перебором каких состояний? Что в вашем понимании "состояние процессора"? Содержимое кешей включается? Модель-специфичные регистры? Управляющие? Стек? Регистры общего назначения? Или только флаги? Что значит "перебором ВСЕХ вариантов состояний"? Вы собираетесь одну и ту же команду выполнить 2^32 раз, каждый раз перед выполнением изменяя регистр флагов на 1? Или каждую команду 32 раза, обнуляя или выставляя по 1 биту в регистре флагов? Первое даст заведомо избыточную информацию, в которой вы утонете. Второе - неполную. И то, и другое - бесполезную. Это так, предположение, кстати... для случая, когда под состоянием процессора имелся в виду всего лишь регистр флагов ))
FatMoon : Да хоть в первом. Mika0x65 : Пробовал, не полностью подходит. Готовых исходников в тех сорцах нет, проще начать с нуля, как вы сказали - с ПДФ файла. Ox8BFF55 : Именно, для выполнения программы "всухую". Вобщем ПДФ файл и проверка перебором. Надо только автоматизировать процесс написанием парсеров.
Дерзайте. Вы конечно найдете пару опечаток, но к тому времени Интел успеет два новых поколения процессоров создать. В русском языке хороший термин есть : "мартышкин труд". Гораздо полезнее для вас подучится, если конечно вы еще молоды, и пойти на работу в Интел. И зарплата и польза обществу.
MisterX Может вы всетаки просветите что для вас означает состояние процессора? Ну и приведите хоть пару команд для которых нету в документации того ради чего вы собираетесь ее брутфорсить?
Ага, аналогично. В руках был только debug.exe, пока не попался Абель, нифига не понял. Однако кто-то (мыщь вроде) говорил что изучил асм с помощью debug. Честно - не верится.
medstrax1 Если это был _первый_ асм -- действительно не верится. Если же уже умел программировать на асмах для других процессоров -- тогда вполне.
Вряд ли крис тогда имел понятие о других процах/асмах. Мы с ним одногодки, поэтому могу предположить, что в конце 80-х начале 90-х, живя в деревне в краснодарском крае,ему вряд ли были доступны для изучения другие процы
medstrax1 Не факт, не факт... Я вот с компутером впервые познакомился в... э... кажись, 1985-м (в школе), и к 1991-му знал уже 5 или 6 ассемблеров и примерно столько же ЯВУ (Бэйсик, Фортран, Кобол, Си и Паскаль точно, ПЛ/1 -- под вопросом).
Мм, могу только позавидовать, во второй половине 80-х найти 5 или 6 _разных_ процов - это непросто. Ну вы, как я понимаю, и несколько старше. У меня в то время были под рукой только калькуляторы типа МК-61 Кстати - незаменимая вещь для изучения логики и оптимизации. Уложить в 105 ячеек нехилые алгосы - нужно оч постараться
medstrax1 Насчёт калькуляторов абсолютно согласен с Вами. Если уж быть точным, я начинал с Б3-34 -- лет в 12, а может, в 11 отец подарил. Хотя считать в школе всегда считал в уме или на бумажке (типа, особо сознательный в этом плане был). Что же касается разных процов -- то никаких проблем тогда в этом как раз и не было. Советские клоны буржуйских машин на что? В школе были "агаты" -- не шибко удачная, причём неполноценная копия Apple II с процессором 6502. Вскоре после этого смог добраться до СМ-4, а потом и СМ-1420 (в одном местном типа НИИ) -- архитектурно это клоны PDP-11 (кстати говоря, на них я впервые начал зарабатывать деньги -- в 15 лет устроился). Потом были "Роботрон-1715" (ГДРовская персоналка на Z80), всякие разные микропроцессорно-микроконтроллерные поделки (на советских аналогах 8080 и 8051), ну и, наконец, ЕС-1035 -- архитектурный клон IBM System/370. Вот сейчас подобное разнообразие фиг найдёшь, если не работаешь в области промышленной автоматизации или сам радиолюбительством не промышляешь -- ведь доступными простому смертному являются лишь ПК (зато доступными прямо дома, а не где-то в школе, институте или на производстве, как мне тогда). Кстати, об оптимизации. В "Мониторе" Apple II (некий аналог BIOS, объёмом аж 2 килобайта) вместились не только полезные подпрограммы ввода-вывода, но ещё и примитивный дизассемблер и отладчик. У меня чуть крыша не съехала, когда я пытался с ним разобраться (и разобрался-таки в конце концов), -- настолько "плотно" он написан. Аналогичный по функционалу монитор для 8080 (написанный на упомянутом Роботроне-1715, но с использованием команд только 8080, а не Z80) у меня занял что-то вроде 5 килобайт. Правда, там система команд менее удачная (недаром 6502 лёг позднее в основу Dendy), да и я не уделял много внимания оптимизации, а просто старался писать не слишком раздуто, но всё равно...