Лучший / самый простой язык для работы с разборкой - PullRequest
1 голос
/ 07 января 2010

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

Ответы [ 9 ]

6 голосов
/ 07 января 2010

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

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

3 голосов
/ 08 февраля 2010

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

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

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

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

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

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

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

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

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

2 голосов
/ 07 января 2010

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

Real Raw Code - нет замены

2 голосов
/ 07 января 2010

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

1 голос
/ 29 октября 2018

В Хаскеле это будет работать достаточно хорошо. Вы можете использовать пакет binary , и он также будет эффективным. ADT довольно хороши.

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

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

1 голос
/ 23 марта 2010

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

1 голос
/ 07 января 2010

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

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

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

1 голос
/ 07 января 2010

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

1 голос
/ 07 января 2010

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

...