История о том, как запрет 32-разрядных приложений меняет жизнь студента-разработчика

Как это всё началось?


Всем доброго времени суток! Хочу вам рассказать о том, как отмена поддержки приложений под архитектуру i386 принудила изобрести велосипед.

Начало веселья


Так получилось, что в рамках учебной программы 09.03.01 «Информатика и вычислительная техника» проходится курс «Организации ЭВМ (Архитектуры ЭВМ и систем». Разумеется, это включает в себя тонну информации из прекрасной книжки Таненбаума и Остина «Архитектура Компьютера» (мне еще предстоит штудировать ее перед экзаменом), но не без введения в машино-ориентированные языки программирования. Чувствуете? Тут мы приходим к достаточно очевидному факту: «да, ассемблер, да, началось».

Однако! Можно изучать разные виды ассемблеров: TASM, FASM, GAS, NASM и… барабанная дробь… MASM! Вот тут мы подходим к главному виновнику торжества.

А что тебе не нравится?


Абсолютно логичный вопрос, однако, так получилось, что я очень рано переехал на macOS (с одним и тем же MacBook Air уже 7 лет, и он до сих пор усердно трудится во благо моего развития). Отличная печатная машинка своего времени, да и когда стоит i7, 8 GB RAM, 512 GB SSD – в начале жаловаться вообще было не о чем. Время идет, задачки меняются. Нужно как-то выкручиваться, пока нет средств на новое железо. И тут возникает следующий вопрос: Ну, MASM, ну, macOS – ставишь образ Windows через BootCamp и живешь себе припеваючи!

Да, вот как-то так заладилось, что вечно прыгать между операционными системами вообще не удобно. Это еще не исключая того, что нужно ставить софт, хранить файлы по учебе. Кратко говоря, не Apple Way. Оговорюсь, в начале я вообще думал прям конкретно выпендриться и пойти против системы. Аж настолько, что изучил, как работает gdb, NASM, GAS, objdump, ndisasm (ну, надо было по домашке по дизассемблить пару объектных файл после компиляции на С, а IDA тяжелая и опять же все идет на Windows).

Кстати, для тех, кто пишет на assembly – оказывается, можно поменять синтаксис AT&T на синтаксис Intel в GNU Assembler (GAS) и спокойно, без геморроя, без изменения порядка операндов и т.д писать на *nix-подобные системы.

Так, вернемся, а о чем это я? Ах, да!
Нужно было выполнять лабки своими лапками (да и до сих пор нужно, а то экзамен через недельку). А за основу, помимо Таненбаума, берется еще книжка Кипа Ирвина по MASM. Довольно-таки распространенная история в технических вузах, ибо его библиотечка с макросами упрощает жизнь. Вопрос! Как пользоваться MASM без установки Windows и используя чисто яблочную систему, где у меня все красивые шрифтики в редакторах, терминалах и т.д?

Начался гуглёж


Конечно, прежде, чем гуглить, для меня было очевидным, что необходимо накатить ассемблер на Wine и все! Проблема решена. Никакой сложной графики, все очень просто.

Но вот тут и пришла первая весточка!


Wine32 нельзя использовать в macOS! Спасибо, macOS 10.15! Я так счастлив! Wine64 не запахал, увы. Пришлось отказаться от этой идеи.

Теперь действительно начался гуглёж


Значит, нашел интересный репозиторий на GitHub (псс, мало ли, ты еще не обновился, так что вот ссылка -> это ссылка).
И вроде бы прям все очень вкусно. Бери и сразу форкай к себе в аккаунт и забирай на ноут. Да и готовый файл для проекта в Xcode. Просто великолепно. Даже инструкция есть, настолько парень заморочился.

Все! Страдания закончились, еще не начавшись, думал я, наивный


Но и тут же опять началось. Сишный компилятор не может найти нужные библиотеки, да и перед этими сообщениями:
i386 architecture is deprecated in macOS
(что-то подобное).

Ну, и опять, понурив голову, я начал думать, что же делать? Время идёт, дедлайны горят, надо решать проблему. Я решил обратиться к самому кощунскому решению со стороны операционки, а именно настраивать виртуальную машину из под macOS'и.
Кончай выёживаться! – сказало мое внутреннее «я»

С одной стороны, надо было сразу так делать и не выделываться, тем более, курс «Инженерной и компьютерной графики» в КОМПАСе точно так же меня продавил на работу с виртуальной машиной, но это было так больно, вы бы знали. С другой, это как-раз таки основная причина, почему виртуалка казалась мне лютым злом. Больно, неудобно, система поверх системы, все кипит, тормозит – страх, одним словом.

Ладно, проехали. Давай теперь откапывать уже готовый mount на Parallels Desktop с Windows 10. Помучившись с обновлениями, непониманием, почему все-так тормозит, да и еще больше, чем было до этого, я обновил все до более-менее актуальной версии, где начало работать сносно. Вроде бы все, по приколу нашел очень старую версию редактора nano, накатил ее на Windows, чтобы никаких редакторов не ставить и т.д. Чисто работа из командно строки и не более.

Решение? – Да
Удобно ли? – Ну, конечно, нет.

Я начал думать, а как мне сделать так, чтобы можно было перенести командную строку Windows на macOS (ну, они все равно в одном пространстве крутятся, мало ли какие-то интегрированные решения есть?)

Конечно, это прям была мысль, ну очень, дилетантская, однако я потом вспомнил, что есть ведь протокол ssh!

Покопавшись в интернетах как и в русскоязычных, так и в забугорных, я выудил информацию о том, как установить сервер ssh на «окна». Благо, мелкомягкие в 10-ке добавили поддержку из коробки для OpenSSH, потому многое прям было сделано из настроек системы с использованием cmd и PowerShell.

Сконфигурировав настройки ВМ из macOS, я перекинул ВМ на общий мост между адаптерами сети (подглядел как подобное проделывают с linux-образами в интернете) и начал смотреть, как вызывать ssh в macOS.

Ну, а дальше дело за малым. Покопать немного в конфигурации ssh-сервера на Windows, чтобы все хорошо логинилось, да и посмотреть команду для передачи файлов по ssh, чтобы кидать готовый код для ассемблирования.

Итого, у меня все теперь красиво пишется в Atom, контролируя версии в Git. Без проблем высылается по ssh в виртуальную машинку с Windows с MASM на борту. И я спокойно, красиво, все ассемблирую через терминал на macOS и бед не знаю.

Предполагаемые вопросы


Сразу отвечу на вопросы, которые наверняка будут:

  1. – Ставить Windows 10 на ВМ? Ты головой вообще думал? Она же тяжелая и жрет кучу ресурсов!
    – Да, погоня за всем модным и молодёжным приводит к таким приключениям и несуразицам. С другой стороны, я все думаю сделать образ с серверной версией Windows, чтобы вообще выделить по минимуму ресурсов своей машины и держать в фоне для работы. Отличное решение, как по мне.

  1. –Что такое Docker?
    – Я не знаю, если кто-то расскажет в комментариях, то будет круто, либо ссылочку прикрепит. Такому в унике не факт, что научат, а если столкнусь с подобным, то в какой-нибудь работе.

  1. –А что здесь такого? Ну, накатил виртуальную машину, ну, подключился по ssh. Meh, не ново.
    – С одной стороны, да. Вообще не ново. Я так подозреваю, что такое исполнение достаточно распространено, однако я подозреваю, что я не один сталкиваюсь с подобным, обучаясь на специальности, связанной с разработкой, поэтому решил поделиться своим опытом с сообществом. Поэтому, это вам решать, стоит ли статья прочтения и внимания или нет.

Финал


By the way, Спасибо большое тем, кто уделил внимание этой статье и моей слегка наивной прованской истории, которая спустя пару лет будет казаться смешной, однако значимой для моего развития и, возможно, в развитии кого-либо еще. Кто знает?

Tags:
parallels desktop, masm, macOS, assembler, вузовское образование, ssh, windows 10

You can't comment this post because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author's username will be hidden by an alias.