Mažas pradžiamokslis

Siulau naudotis:
1) NASM (http://nasm.souceforge.net) senas geras kompiliatorius

  1. 2)  YASM (http://www.tortall.net/projects/yasm/) naujas, kažkuo geras, bet stokoja dokumentacijos
  2. 3)  ALD (http://ald.sourceforge.net) assembly Linux debbuger. Irgi šviežias ir jau daug patogesnisnaršyti po kodą negu didysis GDB (http://www.gnu.org/software/gdb/gdb.html).
  3. 4)  VIM (http://www.vim.org) geriausias geek’o pasirinkimas

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:)

  1. 2)  Dar kartą: Visos operacijos susijusios su OS atliekamos per branduolio syscalls
  2. 3)  Turėkite savo branduolio išeities kodą.
  3. 4)  Turėkite arti savęs http://world.std.com/~slanning/asm/syscall_list.html  Atkreipkite dėmesį įsource kolonėlę, tai kelias prie failo jūsų kernelio 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 vienintėlė vieta kur rasite informaciją.
  4. 5)  Peržvelkite http://www.linuxassembly.org/intro/Assembly-Intro.html
  5. 6)  Apsilankykite http://www.linuxassembly.org
  6. 7)  Prisijunkite prie bendraminčių konferencijoshttp://world.std.com/~slanning/asm/syscall_list.html

Komandinės eilutės parametrai
… perduodami per steką: [esp] yra perduotų parametrų skaičius, [esp +4], pirmas parametras, [esp +8] antras …. Parametrai perduodami eilutėmis, kurios baigiasi 0.

Truputį informacijos apie darbą su failais
Sisteminių iškvietimų sąraše minimas ‘mode’ yra leidimai, kurie taikomi failams. Neradau informacijos kodėl, bet sys_open ir sys_create neleidžia suteikti a+w arba g+w leidimų.

  • sys_openint 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.
  • 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į.
  • sys_read ir sys_write
    Abu gražina perskaitytų/įrašytų baitų skaičių.Kodo tarkavimas:) (Debugging)
    Esminės komandos yra run, break, examine, continue (RTFM aka help). Patarimas GDB naudotojams yra http://www.linuxselfhelp.com/HOWTO/Assembly-HOWTO/faq.html#AEN941. Dirbant su NASM kompiliuoti norinėdami tarkuoti turite taip:
    nasm -f elf -g foo.asm
    ld -o foo foo.o

Dokumentui taikoma FDPL licenzija ( http://www.gnu.org/copyleft/fdl.html).
Pradininkas Maksim G. aka Loading (http://blog.hardcore.lt/loading/), permatoma kopija yra http://81.7.82.228/~loading/AsmLinuxBegginerLT.pdf

Siūlau visiems, kuriems šis dokumentas nors kiek padėjo (ir tiems kuriem ne padėjo), praturtinti jį savo žiniomis.

One thought on “Mažas pradžiamokslis

Parašykite komentarą

El. pašto adresas nebus skelbiamas. Būtini laukeliai pažymėti *