Доброго времени суток! Хочу написать дизасемблер к новому процессору. Думаю это сделать через плагин к Ida (там уже есь куча всяких, с которыми я работал). Если описание "как писать плагин к Ida" я в каком-то объеме нашел/найду еще, то по "теории дизасемблеров" не могу ничего найти (в голове крутиться термин "двухпроходной дизасемблер" из статьи прочитанной несколько лет назад скорей из любопытства чем по необходимости - и все; я и ее не могу найти). Помогите пожалуйста сылками (может советами/материалами/пожеланиями успехов) по написанию дизасемблеров. Спасибо!
snpik Так все-таки - дизассемблер или плагин к IDA? Если предполагается работать с IDA, то почему бы не сделать это не как плагин, а воспользоваться возможностиями самой IDA и не написать под нее соответствующий процессорный модуль. Посмотри SDK к IDA. Там в директории module есть куча исходников под разные процессоры. Собственно же дизассемблер - это ОЧЕНЬ большое дело... Ну а пожелания успеха, то это всенепременно! :о)
Sergey_R Спасибо, я собственно это и имел ввиду. Признаю, что это разные вещи, прошу прощения за то что ввел в заблуждение и спасибо за то что поправил. Спасибо! Обязательно посмотрю. Хотелось бы еще немного "теории" почитать. На самом деле я несколько раз уже откладывал эту задачу (с другими процессорами) на потом и шапкозакидательского настроения у меня нет. Поэтому я не в последнюю очередь благодарен и за простые пожелания успеха. Спасибо!
Если просто дизассемблер инструкций, то тут и одного прохода хватит. Если собираешься программы дизассемблировать (как это делает ИДА), то дизассемблер должен быть рекурсивным и ес-но многопроходным.
crypto Спасибо, но есть ли статьи/книги может ключевые слова для поиска (фамилии авторов статей например)?
так, ёлки, самый простой disasm это просто edump/elfdump который разбирает загрузочный файл и выплёвывает содержимое в текстовом виде в консоль. Обычно, файл это либо просто кусок памяти который загружается линейно по какому-то адресу, либо что-то типа PE/ELF с секциями. Во втором случае пишешь текстом что есть секция 1, 2, 3... типы такие-то... вот секция кода, размер, адрес.... То есть для этого надо иметь доку про формат файла. Ну а потом, если это RISC/ARM то по табличке opcodes разбираешь поток инструкций. В доке проца (от производителя) будут все флаги, операнды, и т.д.
s0larian Если файл - программа, то дизассемблирование будет сложнее, чем дизассемблирование области памяти. Понадобится рекурсивный многопроходный метод. Если код перемежается данными, то понадобятся дополнительные приемы, позоляющие отделить код от данных. Примером последнего может служить программа, написанная на Билдере или Дельфях - даже пресловутая ИДА хреново их разбирает.
Ессно ты прав тут, но, чувак говорит про какой-то свой проц, и я думаю, что дело идёт о какой-то embedded штуке. А там будет cross compiler с ELF или чем-то подобным на выходе. То есть программа, но больше образ... Или, просто RAM image.