asm32.info
Keep it simple — code in asm

Програмиране на асемблер в стотинкаОС

В тази статия ще ви покажа как да си инсталирате и настроите всички необходими инструменти за да програмирате на асемблер в стотинкаОС.

1. Първо за стотинкаОС

Това е българска дистрибуция на Линукс, базирана на centOS. Инсталира се по подразбиране с много удобната, но и много бърза среда Gnome-2 и се разработва от малък но много отзивчив и амбициозен екип.

Подходяща е за по-стари и слаби компютри, но ще върви идеално и на последните модели.

Интерфейса е преведен по подразбиране на български език, но разбира се може да се настройва и на всеки друг.

2. Програмиране на асемблер? Под Линукс?

По принцип, Линукс (Юникс) фундаменталистите не обичат асемблера, заради това, че противоречи на един от основните принципи на Юникс философията - "Винаги жертвай производителност за преносимост".

Обаче, не всички са съгласни на такава жертва, а и Линукс е изключително удобен за програмиране на асемблер, така че изкушението е голямо. :)

Освен това, асемблер има проблеми само при пренасяне на друга хардуерна архитектура.

Съвсем реално е да се пишат програми, които да се пренасят лесно на различни операционни системи под една и съща архитектура - примерно за Линукс и Windows.

Основното неудобство при програмирането на асемблер под Линукс е липсата на подходящи инструменти.

Стандартния за Линукс асемблер "as" е съвършенно неподходящ за програмиране на асемблер от хора. Това е защото той служи за съвсем друго нещо - да асемблира кода, създаден от компилаторите на езици от високо ниво - примерно C или C++.

3. Какво ще правим?

Тази статия ще ви даде указания които, ако ги следвате, ще получите готова за работа среда за програмиране на асемблер, работеща под стотинкаОС.

В тази среда ще можете да пишете, компилирате, стартирате и дебъгвате програми за Linux и Windows.

Ще можете също само да пишете и компилирате (без стартирането и дебъгването) програми за други операционни системи, както и собствени операционни системи, написани на асемблер.

4. И така, да инсталираме...

Първо, потребителя от който работите ще трябва да има sudo права. Ако вашият няма, , следвайте инструкциите от форума: "Активиране на sudo команда за даден потребител".

Другия вариант е, за командите, които изискват sudo, ще трябва да се логнете като root потребител с командата su. Тогава пропускайте думата sudo в началото на командите по-долу.

4.1. Инсталиране на EDB

EDB е дебъгер с графичен интерфейс, който е много подобен по дизайн с OllyDbg за Windows. Ще използваме него, защото е много удобен за дебъгване на асемблерски програми. Нещо, което не се среща често в Линукс.

Инсталирането му в стотинкаОС е много просто:

sudo yum clean metadata
sudo yum install edb

4.2. Директории във WINE

За инсталиране на някои компоненти, ще ни трябват директории на устройството C: на WINE.

Ако директорията ~/.wine/ не съществува при вас, стартирайте и затворете:

winecfg

Това ще създаде директорията ~/.wine/ и ще инсталира вътре необходимите файлове.

Сега да създадем нужните ни директории:

mkdir ~/.wine/drive_c/Fresh
mkdir ~/.wine/drive_c/OllyDbg

4.3. Инсталиране на OllyDbg

Ако смятате да пишете и програми за Windows, ще ви трябва добър дебъгер за Windows. OllyDbg е най-добрият. Той е безплатен, макар и не с отворен код.

Това което е важно за нас е, че работи добре под Wine - значи можем да го използваме.

За да свалите и инсталирате OllyDbg, изпълнете следните команди:

cd ~/.wine/drive_c/OllyDbg/
wget http://www.ollydbg.de/odbg200.zip
unzip odbg200.zip

Това е.

4.4. Инсталиране на Fresh IDE

Fresh IDE е основата на нашата система - това е интегрирана среда, която съдържа компилатора за асемблер FASM, редактор с оцветяване на синтаксиса, елементи на визуално програмиране и усъвършенствани инструменти за ориентиране в кода.

За да инсталирате последната версия на Fresh IDE има много удобен скрипт. Изпълнете следните команди в терминала:

cd ~/.wine/drive_c/Fresh/
wget http://fresh.flatassembler.net/content/_download/bleeding_edge_fresh.tar.gz
tar -xgf bleeding_edge_fresh.tar.gz
./bleeding_edge_fresh

Скрипта ще свали от хранилището на Fresh IDE сорс кода на последната версия, ще го компилира и ще го инсталира в текущата директория. На въпроса дали да се стартира Fresh IDE след инсталацията отговорете с "y" и Fresh IDE ще се стартира. Оставете го засега отворен. След малко ще се върнем на него.

5. Настройка на gnome-terminal

Тъй като за терминал в Линукс ще използваме gnome-terminal, ще трябва да го настроим малко.

Отворете терминала и от менюто изберете "Edit|Profiles...".

В отворения диалог, натиснете бутона "New" и напишете име "hold" и натиснете "Create".

В диалога за настройка на профила, изберете таба "Title and Commands" и в полето "When command exits:" изберете "Hold the terminal open".

Тази настройка ще позволи да виждате резултата от стартираните програми. Иначе прозореца се затваря твърде бързо.

6. Настройка на Fresh IDE

Отворете от менюто "Options|IDE options", и изберете отляво "Debuggers and emulators".

В полето "Linux terminal" въведете: /usr/bin/gnome-terminal --profile hold -e.

В полето "Linux debugger" въведете: /usr/bin/edb --run.

В полето "Win32 External debugger" въведете: c:\OllyDbg\ollydbg.exe.

Изберете отляво "Other options" и включете опциите "Try google as a last hope", "I'm feeling lucky" и "Ignore WinApi suffix on search". Тези опции улесняват търсенето на информация от помощната система, ако такава не се намери в наличните файлове.

От менюто "View" може да изключите компонентите, които няма да ви трябват засега. Това са компонентите за визуално редактиране: "View properties" и "View palette". Така ще имате повече екранно пространство за работа.

Ако прозорците се разместят, подравнете ги автоматично с "Window|Auto arange windows".

Сега отворете (File|Open или Ctrl+O) някой от примерните проекти, които се намират в директорията на Fresh.

Да кажем, "c:FreshexamplesELFExeLinux.fpr" - това е проста конзолна програма, която печата съобщение и излиза.

Отворете от менажера на проекта в ляво, главния файл на проекта: "hello.asm"

Изглежда ли добре в редактора? Ако не, отворете от менюто "Options|Editor options" и си поиграйте с настройките. Изберете тема от полето "themes" и натиснете бутона "Load". Редактирайте темата от полетата отдолу. Може да се наложи да си изберете друг шрифт, ако някой не е инсталиран на системата. Избирайте само моно ширинни шрифтове. Примерно "Liberation Mono" или "Dejavu Mono" работят почти винаги добре.

Също можете да редактирате и цветовете, които се използват за оцветяване на синтаксиса.

От паното "Editor behavior" можете да настроите поведението на редактора.

Ако всичко изглежда добре потвърдете с ОК. Това ще обнови и основния прозорец с новите настройки.

7. Компилиране и стартиране.

Компилирайте отворения проект с Ctrl+F9 или от менюто "Project|Compile". Ако сте свикнали с мудния компилатор на C/C++ ще останете учудени от скоростта на компилация. На бавния ми нетбук, горната програма се компилира за 16мс.

Стартиране на програмата: Натиснете Shift+F9 или от менюто "Debug|Run direct". Програмата ще се компилира и стартира в отворен терминален прозорец.

Дебъгване на програмата. За да пуснете програмата в дебъгера, натиснете Shift+F8 или от менюто изберете "Debug|External debugger". Това ще компилира програмата и ще я стартира в EDB където ще можете да я изпълнявате инструкция по инструкция, да следите съдържанието на регистрите, паметта и стека и други подобни функции, необходими за откриването на бъгове или просто за образователни цели.

8. Система за помощна и справочна информация.

Fresh IDE има мощна система за предоставяне на помощна информация. Информацията се предоставя в уеб браузъра на операционната система от вградения във Fresh IDE уеб сървър. В момента на написване на статията, в пакета документация има около 5.5МБ текстове за работата с Fresh IDE, библиотеката FreshLib, компилатора FASM и системните функции на Линукс.

Допълнително може да се използва Google за търсене на информация, ако такава не се намери в наличните файлове.

За да активирате помощта има два начина. Първият е контекстна помощ - отидете в редактора на дума от програмата и натиснете F1. Можете да опитате на някоя от инструкциите - ще се отвори справочника на FASM с кратка справка за съответната инструкция. Всъщност, можете да напишете произволна дума и тя най-вероятно ще бъде намерена в Google, ако случайно няма информация за нея в документите от Fresh IDE.

Втория начин е да си изберете сами кой от помощните файлове да прочетете - натиснете Ctrl+F1 или от менюто изберете "Help|Help file". В показания списък, изберете файл и натиснете ОК.

В системата могат да се включват и ваши файлове със следните формати: CHM, HLP, HTML и markdown. За да включите собствени файлове, редактирайте файла "Fresh/doc/index.help" В него има кратко описание кое за какво е.

9. Заключение

Сега разполагате с настроена мощна система за програмиране на асемблер. На точно така инсталирана система е написана средата Fresh IDE, както и много други програми на асемблер.

Разбира се, за да използвате пълните възможности на системата, трябва да знаете синтаксиса на езика асемблер и в частност диалекта FASM. Полезно е да разгледате и примерите в папката "examples/" и да прочетете документацията от хелп системата.

Писането на асемблер е занимателно, образователно и в крайна сметка много ефективно - програмите стават много малки и много бързи. Митовете, че на асемблер се пишело много бавно са измислени от хора, които не са знаели езика и не са разполагали с достатъчен набор от библиотеки.

Да, писането на асемблер изисква повишено внимание към детайлите и стила на писане на кода, но това в крайна сметка води до по-качествен код и икономисва много време за дебъгване и поддръжка по-късно, когато програмата е вече в експлоатация.

Last modified on: 16.05.2015 21:29:30

Preview

Comments

:)GigaByte ( 04.03.2016 06:42:37 UTC ) :

Aз лично успях да го инсталирам под PlayonLinux. За който не знае това е front-end GUI програма за wine. Позволява множество wine контейнери. Има си опция за инсталиране на шрифтове Опции за заглаждане и да се инсталира Luna thema

:)GigaByte ( 21.02.2016 13:29:36 UTC ) :

Ясно :) Аз за книгата така си те подстрекавам, все ще дойде ден да я напишеш. Страшно кефят заниманията ти с asm :) Извинявам се за двойния коментар, нещо като цъкна тоя бутон, явно бързо цъкам и става двоен - забележи даже е нямало разлика до секундата в часа :)

:)John Found ( 21.02.2016 10:40:36 UTC ) :

Използването на Wine име две причини:

1. Fresh IDE е писан първоначално за Windows и кода е прекалено обвързан с него, за да може да се пренесе лесно. А възможностите и удобствата за програмиране на Fresh са прекалено сериозни, за да може да се замени с някакво нативно IDE в Linux. Впрочем версия 3.0 ще е базирана на FreshLib и ще е лесно преносим. Тогава ще имаме нативно топ-IDE за Linux.

2. Използването на WINE позволява под Linux да се пишат и тестват едновременно програми за Линукс и Windows. Нещо, което позволява да се откажем изцяло от Windows при програмирането на асемблер.

А, що се отнася до цялостна книга за асемблер. Имам желание да направя такова нещо, но за съжаление нямам достатъчно свободно време. А доколкото го имам, предпочитам да пиша код — за момента ми се струва, че това е по-полезно.

:)GigaByte ( 21.02.2016 10:13:16 UTC ) :

Защо ползваш wine под Linux ? Не може ли да се ползват нативни лин инструменти за асемблерско програмиране. И наистина ще се радвам на цялостен учебник да драснеш по асемблер :)

Програмиране на асемблер в стотинкаОС
Filename:
Title: