Бинарный рекомпилятор - Binary recompiler

А двоичный рекомпилятор это компилятор это требует исполняемый файл двоичные файлы в качестве входных данных анализирует их структуру, применяет преобразования и оптимизации и выводит новые оптимизированные исполняемые двоичные файлы.[1]

Основы концепции двоичной перекомпиляции были заложены Гэри Килдалл[2][3][4][5][6][7][8] с развитием оптимизирующего переводчик ассемблерного кода XLT86 в 1981 г.[4][9][10][11]

Смотрите также

Рекомендации

  1. ^ Мадж, Тревор; Рейнхардт, Стив; Тайсон, Гэри. «Бинарная рекомпиляция и комбинированные исследования улучшений компилятора / архитектуры». umich.edu. университет Мичигана (UM). Архивировано из оригинал на 2012-07-23. Получено 2012-07-23.
  2. ^ Килдалл, Гэри Арлен (Май 1972 г.). Оптимизация глобального выражения во время компиляции (Кандидатская диссертация). Сиэтл, Вашингтон, США: Вашингтонский университет, Группа компьютерных наук. Диссертация № 20506, Технический отчет № 72-06-02.
  3. ^ Килдалл, Гэри Арлен (1973-10-01). «Единый подход к глобальной оптимизации программ» (PDF). Материалы 1-го ежегодного симпозиума ACM SIGACT-SIGPLAN по принципам языков программирования (POPL). POPL '73. Бостон, Массачусетс, США: 194–206. Дои:10.1145/512927.512945. HDL:10945/42162. S2CID  10219496. В архиве (PDF) из оригинала от 29.06.2017. Получено 2006-11-20. ([1] )
  4. ^ а б Фрайбергер, Пол (1981-10-19). «Переводчики программ делают это буквально - а иногда и в контексте». InfoWorld - Новости для пользователей микрокомпьютеров. Специальный раздел: Совместимость компьютеров. 3 (22). Popular Computing, Inc. п. 19. ISSN  0199-6649. Получено 2020-01-15. […] «Если у вас нет схемы перевода, которая учитывает специфические особенности целевого микропроцессора, автоматический переводчик не сможет работать», - объясняет Дэниел Дэвис, программист с Цифровые исследования. "Вы получите прямой транслитерации. "[…] Несмотря на все эти ограничения, в последнее время был достигнут прогресс в разработке трансляторов. В частности, Digital Research представила свой восьмибитовый в 16-битный транслятор ассемблерного кода. На основе исследования, проведенного президентом Digital Research. Гэри Килдалл, то XLT86 похоже, предлагает преимущества по сравнению с ранее доступной технологией программных переводчиков. Нравиться Сорцим с Транс и Intel с Конвертировать 86, Пакет Kildall переводит код языка ассемблера из 8080 микропроцессор к 8086. Однако Килдалл применил глобальный анализ потока методика, учитывающая некоторые из основных недостатков других переводчиков. Процедура анализирует использование регистра и флага в разделах кода 8080, чтобы исключить несущественный код. По словам программиста Digital Research Дэвиса, алгоритм, который использует Килдалл, позволяет переводчику учитывать контекст при переводе программы. До сих пор одной из основных проблем любой программы-переводчика была неспособность программного обеспечения делать гораздо больше, чем транслитерация. Если новый переводчик Digital Research действительно продвинет технологию до точки, позволяющей учитывать контекст, то на рынке микрокомпьютеров может появиться больше переводчиков программного обеспечения.
  5. ^ Уортон, Джон Харрисон (1994-08-01). «Гэри Килдалл, пионер отрасли, умер в 52 года: создал первые языки для микрокомпьютеров, дисковые операционные системы». Отчет микропроцессора. MicroDesign Resources Inc. (MDR). 8 (10). В архиве из оригинала от 18.11.2016. Получено 2016-11-18.
  6. ^ «Награда СПА доктору Гэри А. Килдаллу: обладатель награды за заслуги в области СПА в 1995 году». Ассоциация издателей программного обеспечения (СПА). 1995-03-13. В архиве из оригинала 21.12.2019. Получено 2019-12-21 - через www.digitalresearch.biz.
  7. ^ Суэйн, Майкл (1997-04-01). «Гэри Килдалл и коллегиальное предпринимательство». Журнал доктора Добба. Архивировано из оригинал на 2007-01-24. Получено 2006-11-20. В марте 1995 г. Ассоциация издателей программного обеспечения посмертно удостоен Гэри за его вклад в компьютерную индустрию. Они перечислили некоторые из его достижений: […] В 1980-е гг. DRI, он представил двоичный рекомпилятор. […]
  8. ^ Хайтт, Роберт; Юбэнкс, Гордон; Роландер, Томас «Том» Алан; Законы, Дэвид; Michel, Howard E .; Халла, Брайан; Уортон, Джон Харрисон; Берг, Брайан; Су, Вейлиан; Килдалл, Скотт; Кампе, Билл (25 апреля 2014 г.). Законы, Дэвид (ред.). "Наследие Гэри Килдалла: посвящение CP / M IEEE" (PDF) (транскрипция видео). Пасифик Гроув, Калифорния, США: Музей истории компьютеров. Номер ссылки CHM: X7170.2014. Получено 2020-01-19. […] Роландер: Я упоминал ранее, что Гэри любил подходить к проблеме как архитектор. […] И он рисовал самые красивые картинки своих структур данных. […] И когда он закончил это […] и убедился, что эти структуры данных теперь верны, он войдет в просто невероятный маниакальный режим кодирования. Он просто ходил по 20 часов в день […] его просто не было в эти периоды времени. Пару раз, когда он запускал что-то в первый раз, например, посреди ночи. И все вы, кто пишет программное обеспечение, видели, что, например, когда оно впервые появляется на экране, вы должны кому-нибудь рассказать. Моя жена Лори скажет вам, что у меня было несколько таких звонков посреди ночи, ЛОГОТИП был одним из примеров, XLT 86 был другой, где он запустил это в первый раз, и ему нужно было, чтобы кто-нибудь это увидел. Так что не имело значения, который час, он звонил мне, я должен был прийти и посмотреть, как это работает. […] [2][3] (33 страницы)
  9. ^ Барри, Тим (1982-04-05). "XLT-86, служебная программа CP / M от Digital Research". InfoWorld - Newsweekly для пользователей микрокомпьютеров. Обзор программного обеспечения InfoWorld. 4 (13). Popular Computing, Inc. С. 40–41, 53. ISSN  0199-6649. Получено 2020-01-25. […] XLT-86 это программа-аналитический переводчик, написанная на PL / I-80. Он читает весь 8080 исходная программа, собирает ее в Машинный код, анализирует использование регистров, памяти и флагов и излучает оптимизированный 8086 программа на ассемблере. […] Перевод программы состоит из пяти этапов. Сначала программа сканируется и собирается для получения значений и местоположений символов. Во-вторых, структура программы анализируется и разбивается на базовые блоки. В-третьих, базовые блоки анализируются для определения поток программы и использование ресурсов. В-четвертых, блочная структура и распределение регистров данные собираются в список для пользователя. В-пятых, информация о потоке и исходная программа используются для создания исходной программы 8086. […]
  10. ^ Килдалл, Гэри Арлен (1982-04-19). Суэйн, Майкл; Фрайбергер, Пол; Марков, Джон Грегори (ред.). «Основатель Digital Research обсуждает свой взгляд на бизнес». InfoWorld - Newsweekly для пользователей микрокомпьютеров. Специальный раздел: CP / M. 4 (15). Popular Computing, Inc. п. 23–24. ISSN  0199-6649. Получено 2020-01-17. […] Килдалл: […] Полтора года назад я, вероятно, тратил 75% своего времени на бизнес и 25% на программирование. XLT-86 был продуктом, над которым я работал в то время, и мне потребовалось девять месяцев, чтобы сделать это. Это был бы трехмесячный проект, если бы я мог сосредоточиться на нем. […]
  11. ^ Килдалл, Гэри Арлен (Июнь – июль 1982 г.). Баннелл, Дэвид Хью; Эдлин, Джим (ред.). "Гэри Килдалл - Человек, создавший CP / M: Создатель CP / M - Глубокое эксклюзивное интервью для ПК с пионером программного обеспечения Гэри Килдаллом". Журнал ПК. Операционные системы. Vol. 1 шт. 3. Software Communications, Inc. С. 32–38, 40. Получено 2020-01-17. […] ПК: Какие сложности возникают при переводе программы с 8080 к 8086 форма? Kildall: Прямой переводы на уровне исходной программы вы можете делать многое механически. Например, инструкция 8080 «Добавить сразу 5» превращается в команду «Добавить AL 5» на 8086 - очень простой перевод самих кодов операций. Сложность в механический перевод происходит из таких ситуаций: инструкция 8080 DAD H берет регистр HL и добавляет к нему DE. Для 8086 эквивалентной инструкцией будет что-то вроде ADD DX BX, что нормально, особых проблем нет. Вы просто говорите, что регистр DX совпадает с HL, а BX - с DE. Проблема в том, что инструкция 8086 имеет побочный эффект установки флага нуля, а инструкция 8080 - нет. В механическом переводе вы в конечном итоге делаете что-то вроде сохранения флагов, их восстановления, выполнения некоторых сдвигов и вращений и так далее. Они добавляют около пяти или шести дополнительных инструкций, чтобы получить тот же семантический эффект. В коде 8080 есть много последовательностей, которые создают очень странные последовательности в коде 8086; они просто не очень хорошо отображаются из-за регистров флагов и тому подобного. То, как мы дорабатываем программное обеспечение, называется XLT-86. Его не было полгода или около того. ПК: Под «лучшим» кодом вы подразумеваете меньший размер? Килдалл: На двадцать процентов меньше, чем если бы вы просто взяли каждый операционный код и сделали прямой перевод с сохранением регистров для сохранения семантики. ПК: Каков размер переведенной программы по сравнению с версией 8080? Килдалл: Если вы возьмете программу 8080, переместите ее на территорию 86 и выполните перевод XLT-86, вы обнаружите, что она примерно на 10-20 процентов больше. На 16-битных машинах все труднее решать; вы получаете коды операций, которые в среднем немного больше. Интересным явлением является то, что одна из причин, по которой вы не получаете огромного увеличения скорости в 16-битном мире, заключается в том, что вы запускаете больше кодов операций по шине данных. […]