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.
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
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
Plik z chomika:
xearonet
Inne pliki z tego folderu:
13 rzeczy do zrobienia po instalacji Ubuntu Feisty Fawn.rar
(749 KB)
Linux.Tworzenie_aplikacji_-_E.Harlow_.pdf
(4892 KB)
Sterowanie przeplywem danych w Linuxie 2.2.pdf
(251 KB)
Ruting IP w Linuxie 2.2.pdf
(224 KB)
Linux.sky - wszystko o linuxie.rar
(1216 KB)
Inne foldery tego chomika:
Artykuły
czcionki
sieci komputerowe
Zgłoś jeśli
naruszono regulamin