Програмиране на асемблер в стотинкаОС
В тази статия ще ви покажа как да си инсталирате и настроите всички необходими инструменти за да програмирате на асемблер в стотинкаОС.
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