Конструктор дизассемблера для PDP11

 


Утилит нашлось немного. Якобы IDA Pro 5.2 умеет дизассемблировать код. Нашлась еще одна


Вот только после использования в целях исследования кода pdp11 сразу захочется удалить программу и забыть о ней.

В общем, рещил я написать свою утилиту. С чего бы начать? Во-первых, нужно определить алгоритм декодирования инструкций - каждая занимает одно слово, и у некоторых есть еще слово в качестве прибавки - условные смещения, вызовы процедур и т.д. И, как показал поиск, внятного описания формата инструкций не так уж много. Нашелся один ассемблер-симулятор, пойду в этом направлении. Определение типов инструкций есть, дальше я стал искать способ определения параметров. И застрял на MOV #233,R0, описание флагов дает непонятные результаты, определяется только регистр R7(PC). Причем здесь он? Нашел описание на странице:


Ага, стало ясно - 7 вместо n это не номер регистра, а другой тип адресации. В общем, с первым опкодом я разобрался быстро, но споткнулся на EMT 30. Вероятно, у некоторых PDP11 не было таких инструкций(и TRAP не было - как они жили вообще?).

Короче, направление неверное. Взял другой код(автор Jeffery L. Post) и за пару дней переписал на PureBasic. Однако, выяснилось, что дизассемблер схавает даже некорректные инструкции как JSR R0,R6. Ладно, оставлю такие случаи, наверняка ассемблер не пропустит и такие записи в листинге.

В общем, решил приостановить разработку, осталось реализовать немало функций, как в IDA - помечать адреса как метки, например BRA L000010. Пока сделано только возможность помечать слово как пара байтов, слово данных или инструкция. Лежит здесь

Комментарии