Naudotojas:Loading/Assembleris Linuxe

Straipsnis iš Vikipedijos, laisvosios enciklopedijos.

Pagrindinis straipsnis

Turinys

[taisyti] Siūlau naudotis

  1. NASM (http://nasm.sourceforge.net/) senas geras kompiliatorius
  2. YASM (http://www.tortall.net/projects/yasm/) naujas, kažkuo geras, bet stokoja dokumentacijos
  3. 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
  4. 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

  1. 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:)
  2. Dar kartą: Visos operacijos susijusios su OS atliekamos per branduolio sistieminius iškvietimus (syscalls)
  3. Turėkite savo branduolio išeities kodą.
  4. Jei naudosite gcc inline assembly neišsigąskite mov %ebp, %esp, o paskaitykite Asembleris apie AT&T sitaksę
  5. Labai naudinga turėti GNU/Linux development manpages. (Debian'e paketas manpages-dev). Nesunku patikrinti ar juos turite: `man 2 intro'
  6. 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ą.
  7. Apsilankykite LinuxAssembly tinklalapyje
  8. Peržvelkite Įvadą
  9. 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