Back to site
Since 2004, our University project has become the Internet's most widespread web hosting directory. Here we like to talk a lot about web servers, web development, networking and security services. It is, after all, our expertise. To make things better we've launched this science section with the free access to educational resources and important scientific material translated to different languages.

Assembly Language Step By Step, za Linux!




Važna napomena! Insight, paket za otkrivanje grešaka, povučen je iz svih Debian distribucija, što znači da ga nećete naći u Ubuntu počevši od V10.04! Kasnije ću reći nešto više o tome.


Čoveče. Trajalo je deset godina, ali posao je napokon gotov - knjiga je tu: Assembly Language Step By Step, treće izdanje. (John Wiley Publishing, 2009. ISBN 978-0-470-49702-9. 610 pp.) Treće izdanje je, ne samo malo popravljeno, već praktično ponovo napisano. DOS je nestao, a cela knjiga sada se odnosi na assembly programiranje za x86 Linux, uz pomoć besplatnih alata otvorenog izvora koji obuhvataju NASM asembler, ld linker, Kate editor, Bless hex editor i Insight grafički prednji kraj osnovnog GNU tragača za greškama, gdb. (Gcc kompajler je takođe uključen kada počnemo povezivanje C biblioteka s vašim assembly programima.)

Pokretačka ideja knjige, ma koliko to ludo zvučalo, jeste da naučite assembly jezik kao prvi programski jezik. Nije vam potrebno prethodno programersko iskustvo. Kada sam napisao prvo izdanje knjige, davne 1988, mislio sam da je projekat pomalo ambiciozan, ali posle 175.000 prodatih primeraka i bezbrojnih pisama obožavalaca, izgleda da je ideja zaživela.

Kako funkcioniše? Počnem od početka, od samog početka, objasnim šta su kompjuteri i šta rade. Zbirni jezik mora uzeti u obzir hardver (bar kad je reč o memoriji), tako da ću nadugačko pričati o Intel/AMD x86 hardverskoj arhitekturi. Kad konačno počnem da podučavam assembly jezik, naglasak je na obraćanju memoriji. U assembly jeziku, ako znate gde su vam operandi, već ste prešli tri četvrtine puta.

To je radikalno drugačiji uvod od većine assembly knjiga koje počinju MOV instrukcijama, zatim možda ADD instrukcijama, sa veoma malo ili nimalo objašnjenja o kontekstu u čijim okvirima funkcioniše assembly jezik. To je glupo. Instrukcije čine bar 35% trika u asembleru. 50% je adresiranje memorije, a preostalih 15% je mešavina svega i svačega.

Preuzimanje popisa arhive...


...je jednostavno. Samo kliknite ovde. Zip fajl nije veliki (180K) i trebalo bi da ga preuzmete za samo nekoliko sekundi ako imate širokopojasne veze. Avaj, moja hosting služba ne podržava anonimni FTP iz bezbednosnih razloga, tako da ga morate preuzeti koristeći HTTP i svoj veb pretraživač.

Preuzimanje sadržaja...


...podjednako je jednostavno. U knjizi sam postavio detaljan sadržaj (u PDF formatu; 68K) na ovom sajtu. Da biste je preuzeli, kliknite ovde . (Dole je poseban link za primerak poglavlja.)

Šta je novo?


Iako se misija knjige nije promenila, knjiga je pretrpela velike promene; oko 60% sadržaja čini potpuno novi materijal. DOS je nestao, osim u fusnoti o istorijskim užasima segmentiranih modela u realnom režimu. Cela knjiga zasniva se na 32-bitnom zaštićenom režimu assembly jezika za x86 Linux. Iako ništa u knjizi nije isključivo i specifično, neki opisi alata (i prateći snimci ekrana) podrazumevaju GNOME grafičku školjku. Koristim Ubuntu, tako da je knjiga napisana pomoću Ubuntu instalacije, ali u materijalu tutorijala ne postoji ništa specifično za Ubuntu.

Neke posebne odlike novog izdanja:
  • Svi primeri kodova napisani su za NASM asembler uz pomoć Intel sintakse.
  • Svi primeri kodova napisani su za izvršenje na Linux konzoli u prozoru terminala. (Programiranje za školjke grafičkog korisničkog interfejsa kao što su GNOME i KDE predstavlja naprednu temu.)
  • Uređivačka platforma je Kate editor, koja ima upravljanje fajlom i sesijom, (ograničeno) označavanje assembly sintakse i ugrađen prozor za terminal.
  • Ostali alati za programiranje o kojima se detaljno govori su: Linux linker ld, gcc kompajler, make and touch.
  • Većina primera predstavlja čisto sastavljanje i komunikaciju s konzolom kroz int 80h poziva kapije. U poslednjem poglavlju govori se o povezivanju programa assembly jezika sa funkcijama C biblioteka.

Šta je staro?


Ukupan pristup nije se promenio: knjiga predstavlja postupan i strpljiv tutorijal za kumulativni metod koji iznad svega ističe kako stvari funkcionišu. ("Kumulativni" znači da je najbolje tretirati ga kao linearni kurs. Počinje se od samog početka i radi se do kraja.) Prva tri poglavlja biće poznata onima koji su koristili prethodna izdanja knjige. Igre Big Bux i base-4 doo-wop Martians još uvek su tu. Stil je konverzacijski i pomalo iščašen. Čuješ knjigu u svojoj glavi na isti način kao kad bi slušao moje reči da sam u tvojoj učionici i da se silno zabavljam predajući o nečemu što najviše volim i čime se bavim celog života.

Šta je sa uzorkom poglavlja?


Tu je! Izdavač mi je dao PDF jednog poglavlja za distribuciju bez naknade. Kliknite ovde da biste ga preuzeli (291K PDF). Opet, moj hosting servis ne dozvoljava anonimne FTP pa ćete morati da ga preuzmete svojim pretraživačem.

Gde se knjiga može kupiti?


Verovatno u vašim bolje snabdevenim knjižarama, a najverovatnije u većim tehničkim prodavnicama kao što je SoftPro Books . Ako ne možete da je nađete, pokušajte na internetu: Ne zaboravite da postoje tri prethodne verzije ove knjige: Assembly Language From Square One (1989; Scott, Foresman, ali ne i Wiley), Assembly Language Step By Step (1992) i Assembly Language Step By Step, Drugo izdanje (2000). Ako kupujete polovno izdanje iz 2009, proverite da li je to ono što tražite!

Ako imate 64-bitni PC...


Imajte na umu da je knjiga napisana za najčešće PC hardvere, zasnovana na Intel/AMD 32-bitnim procesorima. Nadao sam da ću uspeti da pokrijem i neke teme vezane za 64-bitne procesore, ali izdavači su postavili čvrsta ograničenja dužine knjige zbog smanjenja troškova. Pokušaću da ih nagovorim da mi za sledeće izdanje obezbede dodatnih 100 stranica, ali u međuvremenu, knjiga je za 32-bitne procesore.

Sada su 64-bitni računari svuda, ali postoji problem koji uključuje prirodu izvršnog koda datoteke. Da biste osposobili 64-bitni assembly jezik, morate reći NASM-u da generiše povezivi fajl u 64-bitnom formatu, elf64. Na 64-bitnom računaru linker očekuje 64-bitni podrazumevani elf 64 fajl i žaliće se ako mu pružite 32-bitni elf fajl bez upozorenja. (elf i elf32 su sinonimi u okviru NASM-a, čak i ako koristite 64-bitni računar.)

Postoje dva načina rada na 64-bitnom računaru:
  • Napravite 32-bitni izvršni fajl koji će se pokretati na 32-bitnom ili 64-bitnom računaru;
  • Napravitea 64-bitni izvršni fajl koji će se pokretati isključivo na 64-bitnom računaru.
Kreiranje 32-bitnog izvršnog fajla na 64-bitnom računaru traži da “upozorite” linker na dolazak 32-bitnog elf fajla:

nasm -f elf -g -F stabs eat.asm
ld -o eat eat.o -melf_i386

To radi melf_i386 direktiva: govori id-u da je eat.o fajl elf32 povezivi fajl. Pozivanje NASM-a je isto kao da koristite 32-bitni računar.

Kreiranje 64-bitnog izvršnog fajla zahteva da eksplicitno kažete NASM-u da generiše 64-bitni povezivi fajl:

nasm -f elf64 -g -F stabs eat.asm
ld -o eat eat.o

Ovde se koristi elf64 umesto elf-a za naredbu NASM-u da generiše 64-bitni povezivi fajl. Pozivanje linkera isto je kao u knjizi jer kod 64-bitnog računara Id očekuje da će .o fajl koji mu pružate biti podrazumevano 64-bitni.

Ima li prednosti u kreiranju 64-bitnih izvršnih fajlova? Ne za male programe koje ćete pisati dok učite assembly (posebno zato što su 64-bitni izvršni fajlovi malo veći od 32-bitnih), ali kad budete pravili ambicioznije programe, imaćete pod svojom komandom čitavu 64-bitnu x86-64 arhitekturu, sa dodatnim 64-bitnim registrima, 64-bitnim režimima za instrukcije i “dugim režimom” za obraćanje memoriji.

Gary Albers upozorio me je na taj problem i veoma sam mu zahvalan zbog toga. Pošto sam pisao svoj primerak koda na 32-bitnoj kutiji i nisam dobro razmislio o tome šta bi se moglo desiti kad bih koristio podrazumevano pozivanje asemblera i linkera na 64-bitnom računaru. On je postavio čitavu stranicu posvećenu toj temi vrednoj pažljivog čitanja:

http://www.stepbystep.ishipaco.com/

Ako budem imao sreće, u sledećem izdanju knjige imaću prostora da pokrijem 64-bitno assembly programiranje.

Gary, takođe, govori o svom iskustvu u radu sa Kdbg-om umesto sa Insight-om što nas dovodi do jednog od najgorih primera lošeg tajminga koje sam ikad doživeo:

Insight je nestao iz Ubuntu-a!


To me je zapanjilo! Krajem 2009. (ubrzo posle objavljivanja knjige!) doneta je odluka da se Insight, program za traženje grešaka, skloni iz paketa Debian Linux na kome je baziran Ubuntu. Dakle, više nećete nailaziti na Insight instaliran u Ubuntu, počevši od V10.04, Lucid Lynx. Ako podignete terminal i pokušate da ga pokrenete, Ubuntu ga neće naći.

Ovo je skroz uvrnut problem, naročito zbog toga što nisam imao sreće da ponovo kompajliram Insight sa izvora. Siguran sam da je posredi neki veći problem, ali ako ga programeri paketa ne reše, niko od nas neće moći mnogo da uradi.

U ovom trenutku, imate nekoliko mogućnosti:
  • Napravite novu particiju na jednoj od svojih mašina i instalirajte Ubuntu 9.10. To je poslednja verzija za koju znam da sadrži Insight. Za to vam ne treba velika količina slobodnog prostora na disku, pod pretpostavkom da nećete instalirati velike količine softvera u Ubuntu 9.10.
  • Instalirajte VirtualBox (besplatan upravljač za virtualne mašine koji se može nabaviti u Ubuntu softver centru) i instalirajte Ubuntu 9.10 u virtuelnu mašinu. Zatim upotrebite VM za sve assembly projekte u vezi s knjigom. Ovo rešenje nije idealno, ali sigurno će raditi. Iako će vam, možda, izgledati čudno što instalirate stariju verziju operativnog sistema pod novijom verzijom istog operativnog sistema, ljudi to rade sve vreme da bi podržali "zastarele" verzije softvera koji neće da rade pod trenutnom verzijom. (Mnogi su instalirali Windows XP u virtuelnoj mašini, ispod programa Vista, pošto su utvrdili da Vista neće da otvara mnoge starije Windows pakete.)
  • Preuzmite i instalirajte Wubi 9.04 . Wubi je instaler za Linux koji se pokreće iz Windows-a i zbog koga je Ubuntu samo još jedna (veoma) velika instalacija softvera. Wubi 9.04 instalira Ubuntu 9,04; ne instalirajte najnoviju verziju koja instalira Ubuntu 10.04. Još je nisam probao, ali nekoliko čitalaca pisali su mi da funkcioniše i da oni na taj način rade po knjizi. Uz Wubi nema potrebe da kreirate novu particiju na disku ili na virtuelnoj mašini. Zvuči dobro, pa ću probati i pisaću ovde o tome.
  • Ako stvarno želite da koristite najnoviju verziju Linux-a umesto Ubuntu 9.10, kreirajte primer Fedora 13. Ni Insight, ni Kate nisu standardno instalirani, ali možete da ih instalirate koristeći yum ili Add/Remove Programs opciju (vidite dole). Takođe, morate instalirati Konsole, koji Kejt poziva za svoj prozor terminala. Za primere programa tekstualnih režima koje predstavlja knjiga, nema razlike između Linux distribucija kad instalirate alat.

Instalirajte Kate ispod Fedora 13


Imajte na umu da vam Fedora 13 i Gnome, neće omogućiti da nađete Kate editor ako u Add/Remove Programs budete potražili "kate". Umesto toga, morate da instalirate ceo KDE SDK paket, koji možete naći pretragom "kdesdk". Instalacijom KDE SDK paketa instalirate Kate kao deo kompleta. Ako ste instalirali Fedora sa KDE korisničkim interfejsom, već ste dobili Kate.

Međutim, nije dovoljno samo instalirati Kate. Takođe, morate instalirati i Konsole jer Kate poziva Konsole kada kliknete na taster "Terminal" da biste pokrenuli program koji uređujete u editoru Kate. Kao što je Kate deo većeg paketa pod nazivom kdesdk, Konsole je deo šireg paketa čiji je naziv kdebase. Potražite "kdebase" koristeći Add/Remove Programs i instalirajte ga. To zapravo povlači za sobom mnogo drugih stvari (avaj, većina njih neće vam ni biti potrebna), ali će instalirati Konsole.

Da biste instalirali Insight, potražite "insight" uz pomoć komande Add/Remove programs. Pošto Insight nije deo veće grupe programa, brzo se instalira.

Suština je u tome da se Insight najverovatnije neće vratiti u Debian, a samim tim ni u Ubuntu. Ako otkrijem pouzdan način da se manualno instalira Insight pod Ubuntu 10.04 ili kasnijom verzijom, objaviću ga ovde. U međuvremenu, najbolje je da instalirate kopiju Ubuntu 9.10, ili u posebnoj particiji, ili u virtuelnoj mašini i da koristite tu kopiju za učenje assembly projekata.

Opet, Gary Albers ima da kaže mnogo toga o temi Insight-a na svojoj web stranici .




Published (Last edited): 18-12-2012 , source: http://www.duntemann.com/assembly.html