Naudotojas:Loading/Assembleris Linuxe
Straipsnis iš Vikipedijos, laisvosios enciklopedijos.
Turinys |
[taisyti] Siūlau naudotis
- NASM (http://nasm.sourceforge.net/) senas geras kompiliatorius
- YASM (http://www.tortall.net/projects/yasm/) naujas, kažkuo geras, bet stokoja dokumentacijos
- GAS (http://www.gnu.org/software/binutils/manual/gas-2.9.1/as.html) Gnu Assembly naudoja alternatyvią AT&T sintaksę apie kurią skaitome http://linuxassembly.org/howto/gas.html
- ALD (http://ald.sourceforge.net) assembly Linux debbuger. Irgi šviežias ir jau daug patogesnis naršyti po kodą negu didysis GDB (svetainė).
[taisyti] Patarimai ir sisteminiai iškvietimai
- BIOS funkcijų pasiekti negalėsite ir taip pat užmirškite apie DOS funkcijas. Dabar jūsų vieninteliai draugai yra int 0x80 (syscalls), libc ir svetimas kodas:)
- Dar kartą: Visos operacijos susijusios su OS atliekamos per branduolio sistieminius iškvietimus (syscalls)
- Turėkite savo branduolio išeities kodą.
- Jei naudosite gcc inline assembly neišsigąskite mov %ebp, %esp, o paskaitykite Asembleris apie AT&T sitaksę
- Labai naudinga turėti GNU/Linux development manpages. (Debian'e paketas manpages-dev). Nesunku patikrinti ar juos turite: `man 2 intro'
- Jei nesugebate gauti manpages turėkite arti savęs tai Atkreipkite dėmesį į source kolonėlę, tai kelias prie failo jūsų branduolio išeities kode, kur aprašytas jums reikalingas sisteminis iškvietimas (syscall). Jei jums reikės išsiaiškinti syscall'ų argumentų ar gražinto parametro reikšmę – nebijokite nagrinėti išeities kodą. Taip sutaupysite laiko ir galimas daiktas kad tai bus vienintelė vieta kur rasite informaciją.
- Apsilankykite LinuxAssembly tinklalapyje
- Peržvelkite Įvadą
- Prisijunkite prie bendraminčių konferencijos
[taisyti] Komandinės eilutės parametrai
Čia yra perduodami per steką: [esp] yra perduotų parametrų skaičius, [esp +4], pirmas parametras, [esp +8] antras .... Parametrai perduodami vadinamuosiomis C eilutėmis (simbolių seka besibaigianti 0)
[taisyti] Darbas su failais
Sisteminių iškvietimų sąraše minimas 'mode' yra leidimai, kurie taikomi failams. Jei naudojantis sisteminiais iškvietimais nepavyksta priskirti norimų leidimų, peržiūrėkite `man umask' (umask nustato leidimų pakeitimus pagal nutylėjimą), taipogi yra sys_umask.
[taisyti] sys_open
int sys_open(const char * filename, int flags, int mode);
flag parametro žemesnių (low) dviejų bitų reikšmė: 00 – atidaryti tik skaitymui, 01 – atidaryti tik rašymui, 10 – atidaryti ir skaitymui ir rašymui, 11 – specialus režimas.
[taisyti] sys_lseek
Pirmas parametras failo yra deskriptorius, antras – poslinkis nuo failo pradžios, 3 – 'orgin' režimas. Orgin reikšmė gali būti: 00 – SEEK_SET pasislinkti kaip nurodyta pirmame parametre, 01 – SEEK_CUR gražinti poslinkio reikšmę, 02 – SEEK_END pasislinkti į galą ir gražinti poslinkį.
[taisyti] sys_read ir sys_write
Abu gražina perskaitytų/įrašytų baitų skaičių.
[taisyti] Debugging
Esminės komandos yra run, break, examine, continue
Patarimas GDB naudotojams. Dirbant su NASM, panorėję tarkuoti, kompiliuokite taip:
nasm -f elf -g foo.asm ld -o foo foo.o
[taisyti] Ačiū
Didelis ačiū, User:Dkbrz