понедельник, 31 декабря 2018 г.

Как подружить Xcode и Arduino

С выходом Apple HomeKit у меня появилось несколько проектов на Arduino, долгое время я использовал Arduino IDE под macOS, но как по мне, это не очень удобная и юзабельная среда, как минимум отладка в ней сделана через одно заднее место, про рефакторинг я вообще скромно умолчу. Как известно, скетчи пишутся на С++, по этому встал вопрос, можно ли использовать Xcode, в котором так же можно вести разработку на C++, или проще говоря прикрутить Xcode к Arduino.
Испытал несколько вариантов, и остановился на embedXcode, вполне годном плагине для Xcode.
В данный момент поддерживается 9я и 10я версия Xcode. На сайте данного плагина присутствует два варианта: бесплатный - embedXcode, и расширенная версия - embedXcode+, которую можно получить задонатив 25-100$.


Качаем обычную версию установщика pgk, инсталлим
После этого при запуске Xcode и создании проекта, во вкладке "macOS" должен появиться шаблон проекта embedXcode.
 Если нам нужен обычный скетч, то на следующей форме проекта выбираем:
Project Scope: Sketch (ino).
В поле Board выбираем свою плату к примеру - "Arduino Uno"

В созданном проекте у нас должен появиться скетч *.ino с содержанием функций setup() и loop(), а так же подключенными библиотеками.
Все параметры платы, как то: скорость, порт и т.д. можно настроить в файле "Makefile".

Для теста загрузки можно взять один из предыдущих примеров в моей статье "Программирование Arduino. Моргание светодиодом."
После создания скетча, его можно скомпилировать - Build, выгрузить - Upload, или выполнить все операции автоматически "All".

А после успешной загрузки светодиод на плате должен заморгать. Итого, так вот способом можно вести разработку скетчей прямо в Xcode.
Всем удачи и с наступающим НГ!



среда, 19 декабря 2018 г.

Компиляция приложение на ассемблере в Mac OS X

Данную заметку я решил по-быстрому наклипать, так как абсолютно нигде не нашел толкового ответа как скомпилить самое простое приложение, аля "Hello, World!" на ассме под операционной системой Mac OS X.

4 простых шага для создания приложения.

1. Создаем исходник на асме:
$ nano hello.asm
 
Далее в формате Mach-O:

.section __DATA,__data
str:
  .asciz "Hello world!\n"

.section __TEXT,__text
.globl _main
_main:
  movl $0x2000004, %eax          
  movl $1, %edi                    
  movq str@GOTPCREL(%rip), %rsi   
  movq $100, %rdx                 
  syscall

  movl $0, %ebx
  movl $0x2000001, %eax           
  syscall

2. Создание объектного модуля:
$ as hello.asm -o hello.o
 
3. Компиляция бинарника:
$ ld hello.o -e _main -macosx_version_min 10.8 -o hello -lSystem
 
4. Запуск:
$ ./hello
 
В результате консоль должна выдать сообщение "Hello world!"
Более подробно о формате Mach-O и командах можно почитать здесь.
Об отличиях синтаксиса Intel от AT&T здесь.
О редакторе кода ассемблера для Mac OS X с подсветкой синтаксиса в предыдущей статье.

Фаервол для Mac OS X

В современном мире у любого юзверя и организации есть какой-либо девайс: будь то шлюз, маршрутизатор, роутер и т.д. Практически все они имеют функцию NAT и встроенный фаервол, и надежно защищены с внешней стороны, по этому многие говнохакеры компьютерные злоумышленники предпочитают любыми возможными способами работать изнутри сети. Как правило, приложение доставляется трояном в письме, скриптом с вэб-сайта,  реже в качестве куска встроенного кода, в какой-либо бесплатный или пиратский софт, любезно выкладываемый пачками и тоннами на всевозможных трекерах. Еще злобнее выглядит вредоносный код, который может выполняться в единственный день в месяце или году, про такого трояна можно и не знать пока он не проявит себя (но это совсем отдельная тема, которая может занять множество времени и байт для рассуждений и примеров).
Кроме того, используя ту или иную программу, есть вероятность того, что это приложение может сливать какую либо аналитическую, статистическую (да и не только), информацию другим лицам. Да, часто разработчики встраивают кусок функционала в свою поделку для того, что бы улучшить приложение, но не всех пользователей это может устраивать. Ведь часто случается так, что эти данные утекают третьим лицам.
По этому хорошо на вооружение взять предмет, который может защищать операционную систему от врагов не только внешних, но и внутренних.
В операционной системе Mac OS можно заюзать уже полюбившийся многим пользователям фаервол под названием Little Snitch (что в переводе означает "Маленький стукач" 😀). 

Данная програмулина мониторит весь входящий\исходящий трафик и имеет несколько режимов работы. Так, к примеру, если в режиме Alert Mode 
кто либо из программного зверинца пытается отослать информацию, Little Snitch заблокирует этот трафик и выдаст сообщение пользователю, до тех пор, пока пользователь не решит что делать с подобным трафиком. 

Все просто и удобно.
Хотя и в первое время может надоедать подобными сообщениями, по этому в программе предусмотрен режим Silent Mode - Allow Connection. В таком режиме программа будет по умолчанию пропускать трафик, а в последующем можно просто бегло пробежаться по списку в правилах и проверить все что появилось за последние 24 часа.
Если же подобная ситуация не устраивает, можно выбрать режим Silent Mode - Deny Connection, тогда фаервол по умолчанию не будет пропускать трафик, и так же можно пройтись по правилам и разрешить или запретить обмен данными тем или иным приложениям, как в разрезе общего подключения так и подключения к определенным доменам или ip-адресам.

Кроме все прочих плюшек, в Little Snitch есть монитор текущих соединений, и всегда в режиме реального времени можно просмотреть какой процесс работает и куда пытается передать данные.
Конечно можно доверять Apple, надеясь что операционная система Mac OS X достаточно надежна и мало-уязвима, что приложения из как из App Store, так и сторонние разрабатывают совестливые авторы. Но даже крупные корпорации, как тот же Facebook, Microsoft и прочие гиганты уже неоднократно злоупотребляли доверием пользователей, собирая информацию. И ведь нет абсолютно никакой гарантии что завтра не найдется очередная уязвимость, благодаря которой люди с нехорошими целями могут получить доступ к этим данным. Но с Little Snitch вероятность все же меньше, а уверенности на порядок больше.
Ну и собственно ссылка на саму приложуху.

вторник, 18 декабря 2018 г.

Редактор ассемблера для Mac OS X


Для создания и редактирования ассемблерного кода в Mac OS X можно использовать текстовый редактор Atom с поддержкой синтаксиса Intel x86. Скачать последнюю версию Atom можно здесь.
Все что для этого нужно - установить  Language-Assembly плагин или Language-x86-64-assembly.




 Есть конечно небольшие недочеты с AT&T-синтаксисом, но думается - это поправимо.

понедельник, 17 декабря 2018 г.

Установка Homebrew в Mac OS X

Зачем это нужно?

Существует множество удобных и полезных кросплатформенных и совместимых Posix-приложений для UNIX-систем, к примеру nasm, midnight commander, wget, gcc-копилятор и т.д.

Для установки подобных приложений можно использовать недостающий в Mac OS X репозиторий MacPorts или homebrew.

С точки зрения актуальности и поддержки пакетов на первом месте homebrew.
Для его установки в Mac OS X переходим на страницу HomeBrew, в строке выделяем ссылку "/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Homebrew
Homebrew

вставляем ее в терминал и жмем пару раз "Enter" и вводим пароль администратора системы
Terminal Mac OS x

После этого запустится скрипт установки homebrew. Который возможно еще подтянет и установит Command Line Tools for Xcode, а так же настроит его.
После установки можно обновить список пакетов командой:
$ brew update

Для установки программы из репозитория нужно выполнить команду:
$ brew install имя_пакета

к примеру, следующая команда установит midnight commander:
$ brew install mc

 Вот собственно и все!