Лучший / Самый Простой Язык Для работы С Дизассемблированием

StackOverflow https://stackoverflow.com/questions/2016564

Вопрос

Сейчас я подумываю о разработке дизассемблера, но поскольку я знаю, что создать дизассемблер очень сложно, я хочу знать лучший / самый простой язык, чтобы воплотить свою мечту в реальность, кроме того, предложение по руководству тоже очень приятно ;-)

Это было полезно?

Решение

Я рекомендую взглянуть на использование Питон написать дизассемблер.Он обладает характеристиками и возможностями, которые могут быть очень удобны при написании дизассемблера.

  • манипулирование битами:логично операторы выполнять операции со всеми битами целочисленного значения
  • функциональное программирование:использование 'map' по результатам операций с битовой маской может быть удобным
  • мощные операции чтения файлов:файловый ввод-вывод так легко выполнить на Python
  • хорошие возможности для чтения структурированных двоичных файлов (например .EXE-файлы)

Python обладает другими качествами, которые делают его очень полезным для программы любого размера.Ассемблер x86, который поддерживает текущий набор команд микропроцессоров в отличие от исходного набора команд 8086, будет представлять собой большую программу.

Наличие языка, который упрощает выполнение битовая маскировка это очень полезно при написании ассемблера.

  • объектно-ориентированный:упрощает повторное использование кода, а программы становятся более понятными и менее избыточными
  • модульный:модули и даже пакеты могут быть использованы для сохранения фрагментов программы до приемлемого размера
  • лаконичный и читабельный:так что не надо много печатать или чесать голову
  • интерактивный:упрощает поэтапную разработку / тестирование
  • встроенный символьный отладчик:удобно, когда автоматизированные тесты не сокращают его
  • современная поддержка контроля качества: самый единичный похоже на JUnit, доктест поддерживает функциональные тесты на примере
  • встроенная справка:таким образом, вам не нужно листать книгу или запускать браузер
  • потрясающая документация:справочный и обучающий материал в форматах PDF и HTML
  • хорошая поддержка IDE:Eclipse, NetBeans, Emacs и т.д.все они обеспечивают отличную поддержку Python
  • хорошая поддержка для обслуживания веб-страниц:включает поддержку HTML / HTTP и отличных сторонних веб-фреймворков
  • отличная генерация документации:используйте соглашение о строках doc для документирования модулей, классов и методов, а утилита, поставляемая с Python, будет динамически генерировать HTML-документацию с гиперссылками и предоставлять ее для просмотра с порта TCP / IP

Python дает вам возможность получать удовольствие от вашей программы по мере ее разработки.Существует довольно большое сообщество программистов на Python.Их не легион, как раньше Java-программистов и программистов на C ++, но их вокруг тонны.

Python является популярным языком программирования в Google, Yahoo и других современных веб-компаниях благодаря своей мощи и гибкости.В Джитон интерпретатор python-in-java предоставляет еще больше возможностей обоим языкам, поскольку между ними существует высокая степень синергии и достойный уровень совместимости.Существует Подкаст Jython вы можете слушать, если вам не нравится читать.

Python был изобретен в начале 1990-х годов, что делает его даже старше Java.Просуществовав так долго, с сильными и устойчивыми последователями, он превратился в очень надежный, работоспособный язык со множеством примеров и достойным сообществом программистов, которые используют его для работы и удовольствия.

Если вы застряли, сообщество Python обычно очень помогает с идеями о том, как вы можете решить возникшую у вас проблему, используя одну или две удобные функции Python.

Другие советы

В Инструментарий машинного кода из Нью-Джерси это инструментарий и язык для создания ассемблеров и дизассемблеров.Я полагаю, что он поддерживает C, C ++ и Modula-3.Основой инструментария является язык для описания наборов инструкций;затем дизассемблер генерируется автоматически с использованием -dis вариант.Этот инструментарий довольно широко использовался, но описания популярных наборов инструкций не охватывают последние версии.

Вы можете решить, что веселее или поучительнее использовать свой собственный, но если вы имеете дело со сложным набором инструкций, вам может быть трудно соответствовать эффективности Инструментария.Не то чтобы это имело значение на современном оборудовании :-)

Это мог бы сделать любой язык общего назначения с приличными байтовыми и строковыми операциями.Используйте язык, который вы уже хорошо знаете.Изучение нового языка и одновременное изучение того, как написать дизассемблер, вероятно, только усложнит вам задачу.

Вы могли бы написать это на ассемблере.Это действительно растянет ваш мозг.

Реальный необработанный код - замены нет

На самом деле это не имеет значения;Я думаю, что у IDA Pro есть модель плагина.Я думаю, у нескольких людей есть дизассемблеры, которые поддерживают плагины Python, так что вы можете попробовать это.Но я не думаю, что вы представляете, насколько это будет сложно;однако желаю удачи

Я бы предположил, что любой современный язык одинаково хорошо подходил бы для этой цели.Подумайте, какие библиотеки вы хотели бы использовать.Например, существуют библиотеки, которые позволяют вам работать с различными типами двоичных файлов (одним из них является БФД).Подумайте об этом и выберите язык программирования, который подходит вам лучше всего.

Дизассемблеры, то есть программы, которые преобразуют абсолютный двоичный файл обратно в язык ассемблера, на самом деле довольно просты в сборке, хотя и ОЧЕНЬ утомительны.

Я сделал дизассемблер Z8002 на FORTRAN 77, еще в начале 1983 года.Я сделал небольшой дизассемблер для чего-то, о чем я не говорю на C, в 1991 году.

Вероятно, вам лучше делать это на ванильном C, поскольку практически все, что вы собираетесь делать, - это читать слова из памяти (или двоичный файл) и печатать много-много готовых текстовых строк.

Недавно я написал дизассемблер на Python.Это было для встроенной архитектуры RISC, и Python работал хорошо.По ходу дела я изучал Python, так что в итоге переработал почти все функции и классы, которые написал хотя бы по одному разу.Я нашел это особенно полезным для подкласса long введите и напишите функции-члены, которые выдали мне 4-байтовое слово (или двойное слово в зависимости от того, кого вы спрашиваете), выраженное в различных формах, напримервозвращает список битов, байтов, фрагментов или полусловов для различных манипуляций с операндами.

Это было бы достаточно хорошо работать в Haskell.Вы могли бы использовать the бинарный пакет, и это также было бы эффективно.ADT довольно хороши.

Я бы порекомендовал против пишу это на Python.Python довольно медленный, и хотя Haskell, вероятно, в несколько раз медленнее C, я полагаю, что Python был бы многие в разы медленнее , чем C.

В конечном счете, двоичные форматы достаточно низкоуровневые, так что я сомневаюсь, что это имеет значение.Вы могли бы относительно легко написать это на языке Си.Нет необходимости в комбинаторах синтаксического анализа или генераторах синтаксического анализа.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top