asm_linux.pdf

(127 KB) Pobierz
3366363 UNPDF
Programowaniewj¦zykuasemblerwsystemieLinux
DominikSzałkowski
ZakładInformatykiUMCS
dominik.szalkowski@umcs.lublin.pl
http://hektor.umcs.lublin.pl/˜dominisz
17lutego2006
1
D.Szałkowski,Programowaniewj¦zykuasemblerwsystemieLinux 2
Spistre±ci
1Wst¦p 3
1.1Wymagania............................................ 3
1.2Dokument............................................. 3
2Narz¦dzia 3
2.1NASM–NetwideAssembler................................... 3
2.2LD–GNUlinker......................................... 4
2.3ALD–AssemblyLanguageDebugger ............................. 4
2.4ALD–przykładowasesja.................................... 5
2.5MAKE............................................... 8
2.6STRACE............................................. 8
2.7MC–MidnightCommander................................... 9
2.8Edytorytekstu.......................................... 9
3Pierwszyprogram 9
3.1Kod¹ródłowy........................................... 9
3.2Kompilacjaiuruchomienie....................................10
4Zapisprogramu 10
4.1Szablonprogramu........................................10
5Procedury 11
5.1Procedurywró»nychplikach..................................11
5.2Procedurywtymsamympliku.................................13
6Funkcjesystemowe 13
6.1Cotos¡funkcjesystemowe?...................................13
6.2Wywoływaniefunkcjisystemowych...............................13
6.3Przykładowyprogram......................................13
7Odno±niki
15
D.Szałkowski,Programowaniewj¦zykuasemblerwsystemieLinux 3
1Wst¦p
Dokumentzawierapodstawoweinformacjenatematprogramowaniawasemblerzew±rodowiskuLinux.
Przeznaczonyjestdlastudentówinformatykiucz¦szczaj¡cychnapracowni¦“Programowaniewj¦zyku
asembler”.
1.1Wymagania
Programyb¦d¡pisanewsystemieLinux.Wymaganes¡nast¦puj¡ce,podstawoweumiej¦tno±ci:
logowaniesi¦dosystemu,ko«czeniepracy
znajomo±¢systemuplikówLinuksaiwykonywaniepodstawowychoperacjinaplikach:kopiowanie
plików,zmiananazwypliku,usuwanieplików,tworzeniekatalogu,usuwaniekatalogu,uruchamianie
programówkorzystaj¡czpowłokilubdowolnegomenad»eraplików
obsługadowolnegoedytoratekstu
obsługapocztyelektronicznej
1.2Dokument
Najnowsz¡wersj¦tegodokumentu,przykładoweprogramyorazinnepomocemo»naznale¹¢nastronie
http://hektor.umcs.lublin.pl/~dominisz/
Naadres dominik.szalkowski@umcs.lublin.pl prosz¦przysyła¢uwaginatemattegodokumentu(zna-
lezionebł¦dy,nie±cisło±ci,braki).
2Narz¦dzia
Abynapisa¢programwasemblerzemusimyskorzysta¢zkilkunarz¦dzi.Pierwszymznichjestedytor
tekstu,wktórympiszemykod¹ródłowyprogramu(patrzpunkt2.7,2.8).Nast¦pniekompilujemygo
zapomoc¡kompilatora(punkt2.1)ił¡czymyzapomocalinkera(pkt.2.2).Wceluznalezieniabł¦dów
korzystamyzdebugera(pkt.2.3,2.4).
2.1NASM–NetwideAssembler
B¦dziemykorzysta¢kompilatoraNASM,któryjestdost¦pnydlawielusystemówoperacyjnychoraz
doł¡czonystandardowodowi¦kszo±cidystrybucjisystemuLinux.
Uruchomienieprogramunast¦pujepowydaniupolecenia(znak > oznaczaznakzach¦typowłoki):
>nasm[-ooutfile][-fformat]filename
gdzie:
filename –nazwapliku¹ródłowego,zawieraj¡cegokodwasemblerze,standardowou»ywamyrozszerzenia
.asm
outfile –nazwawynikowegoplikuobiektowego,opcjanieobowi¡zkowa,je±linazwaniezostaniepodana
topowstanieplikotakiejsamejnazwiejakplik¹ródłowyiorozszerzeniu .o .
format –formatplikuobiektowegojakimazosta¢utworzony,asemblertenpotrafitworzy¢plikidla
ró»nychsystemówoperacyjnych,nasinteresujelinuksowyformat elf (skrótodExecutableandLinkable
Format).
Pomocdoprogramumo»emywywoła¢poleceniem mannasm lub infonasm .
Stronadomowa: http://nasm.sourceforge.net/ .
Przykład:kompilacjapliku mojprogram.asm nast¡pipowydaniupolecenia
>nasm-felfmoj_program.asm
Powstanieplik mojprogram.o ,którymo»emypoł¡czy¢zbibliotekamizapomoc¡linkera.
3366363.001.png
 
D.Szałkowski,Programowaniewj¦zykuasemblerwsystemieLinux 4
2.2LD–GNUlinker
Pozakompilacj¡,programmusimypoł¡czy¢jeszczezodpowiednimibibliotekami.Słu»ydotegoprogram
zwanylinkerem.DowszystkichdystrybucjiLinuksadoł¡czonyjestlinkerLD.
Uruchomienieprogramu:
>ld[opcje]objfile
ainteresuj¡cenasopcjeto:
-ooutput –nazwawykonywalnegoplikuwynikowego,jesttoopcjanieobowi¡zkowa,je±liniepodana
zostanie»adnanazwatoutworzonyzostanieplikonazwie a.out
-s –niedodawajinformacjiosymbolach,je±liniechcemydebugowa¢potemprogramutomo»emyu»y¢tej
opcji,spowodujeona,»edoplikuwynikowegoniedodan¡zostaneinformacj¦osymbolachwyst¦puj¡cych
wprogramie(nazwyetykiet,zmiennych,itp.)powoduj¡czmniejszeniejegorozmiaru,je±likompilujemy
ostateczn¡,działaj¡c¡wersj¦programumo»emyu»y¢tejopcji(mo»natak»eu»y¢potemprogramu strip ,
pomoc manstrip ).
Pomocdoprogramu: manld lub infold
Stronadomowa: http://www.gnu.org/software/binutils/binutils.html
Przykład:poł¡czenieskompilowanegopliku mojprogram.o zbibliotekaminast¡pipowydaniupolecenia
>ld-omoj_programmoj_program.o
Powstanieplikwykonywalnyonazwie mojprogram .
2.3ALD–AssemblyLanguageDebugger
Programtenumo»liwia±ledzeniewykonywaniaprogramu,ogl¡daniezawarto±cirejestrów,pami¦ci,stosu,
itp.
Uruchomienieprogramu: aldnazwaprogramu
Pomocdoprogramu: manald
Stronadomowa: http://dunx1.irt.drexel.edu/~psa22/ald.html
Abyuzyska¢pomocdoprogramunale»ypojegouruchomieniuwpisa¢polecenie help .Pojawisi¦wów-
czaslistapolece«,którychmo»emyu»ywa¢.Dokładniejsz¡pomocmo»emyuzyska¢wpisuj¡cpopoleceniu
help nazw¦polecenianp. helpexamine .
Komendydebugera(wpisujemyipotwierdzamyklawiszemEnter):
help -wy±wietlakomendyprogramu
fileheader -wy±wietlainformacjeonagłówkupliku
filesecinfo -wy±wietlainformacjeosekcjachwpliku(kodu,zmiennych,itp.)
filesymbols -wy±wietlainformacjeosymbolachwprogramie(nazwyzmiennych,etykiet,procedur,
itp.)wrazzichadresem(adresywykorzystujemypotemprzywy±wietlaniuzawarto±cipami¦cipolece-
niem examine ).Uwaga:wnowszejwersjizostałozast¡pionepoleceniem: filesyminfo .
register -wy±wietlazawarto±¢wszystkichrejestrówprocesoralubpodanegorejestru,je±lipodamyna-
zw¦iwarto±¢ustawiwarto±¢podanegorejestrunapodan¡warto±¢
run -uruchamiaprogramodpocz¡tku,je±liniemaustawionychbreakpointówtoprogramwykonujesi¦
cały,wprzeciwnymwypadkuzatrzymujesi¦nanapotkanychbreakpointach
step -wykonujejedn¡instrukcj¦programu,wy±wietlazawarto±¢rejestrówpojejwykonaniuorazpoka-
zujenast¦pn¡instrukcj¦dowykonania,wchodzidoprocedur
next -jw.aleniewchodzidoprocedur
disassemble -wykonujedeasemblacjezawarto±cipami¦ci
disassemble-section.text -deasemblacjasekcjikodu
enteraddressvalue -zmianawarto±cikomórkipami¦ci,je±liniepodamywarto±ci value program
b¦dziesi¦naspytałokolejnewarto±ci,naci±ni¦cieenteraspowodujeprzestaniewczytywania
load -umo»liwiawczytaniedopami¦cinowegoprogramu
break -ustawiapułapk¦,mo»emypoda¢alboadrespami¦cialbonazw¦symbolunp.procedury
delete -usuwapułapk¦
lbreak -wy±wietlawszystkiepułapki
3366363.002.png
 
D.Szałkowski,Programowaniewj¦zykuasemblerwsystemieLinux 5
2.4ALD–przykładowasesja
DziałaniedebugeraALDwypróbujemynanast¦puj¡cymprogramie.
;;programwpisujedotablicywarto±ci0x01020304
;;rozwi¡zanieniejestoptymalne
;;chodziozaprezentowaniedziałaniadebugera
;;plik:krotki.asm
;;segmentdanych
segment.data
napis_1db’przedzerami’
tablicatimes100db0
napis_2db’zazerami’
;;segmentkodu
segment.text
global_start
;;odtejetykietyzaczniesi¦wykonywanieprogramu
_start:
movecx,25 ;25obrotówp¦tli
moval,1 ;tak¡warto±¢b¦dziemywpisywa¢
movbx,0x0403 ;tote»b¦dziemywpisywa¢
movesi,tablica ;adrestablicy
.petla:
mov[esi],al ;wpisujemyal=1
mov[esi+1],byte2 ;wpisujemywarto±¢2
mov[esi+2],bx ;wpisujemy0x0304
addesi,4 ;nast¦pnyelementtablicy
dececx ;zmniejszamylicznikp¦tli
jnz.petla
;;wyj±ciezprogramu
moveax,1 ;funkcjasys_exit
movebx,0 ;kodpowrotu
int0x80 ;wywołaniefunkcji
Programkompilujemyiuruchamiamydebuger.
>nasm-felfkrotki.asm
>ld-okrotkikrotki.o
>aldkrotki
Pouruchomieniudebugerapojawi¡si¦podstawoweinformacjenatematprogramu krotki .
Uwaga:przyka»dymuruchomieniuprogramuadresysegmentów,zmiennych,podprogramów,itp.mog¡
by¢inne.
krotki:ELFIntel80386(32bit),LSB,Executable,Version1(current)
Loadingdebuggingsymbols...(17symbolsloaded)
Dokładniejszeinformacjeotrzymamypowydaniupolecenia fileheader
Zgłoś jeśli naruszono regulamin