07.01.2013 Views

Linux i386 Önyükleme Kodu NASIL

Linux i386 Önyükleme Kodu NASIL

Linux i386 Önyükleme Kodu NASIL

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

<strong>Linux</strong> <strong>i386</strong> <strong>Önyükleme</strong> <strong>Kodu</strong> <strong>NASIL</strong><br />

///////////////////////////////////////////////////////////////////////////////<br />

// bazı küçük i¸slevler<br />

prtstr(); /* DS:SI’teki ascii’leri yaz */<br />

prtsp2(); /* çift bo¸sluk yaz */<br />

prtspc(); /* tek bo¸sluk yaz */<br />

prtchr(); /* AL’deki ascii’leri yaz */<br />

beep(); /* CTRL–G yaz, örn. bip */<br />

Kod bütünlü˘günü do˘grulamak için imza kontrol edilir.<br />

˙Imza bulunmazsa kalan setup kodu SYSSEG:0’da vmlinux öncesinde yer alır.<br />

no_sig_mess: .string "No setup signature found ..."<br />

goodsig1:<br />

goto goodsig; // yakın sıçrama yap<br />

///////////////////////////////////////////////////////////////////////////////<br />

// kalan setup kodunu SYSSEG:0’dan CS:0800’e ta¸sı<br />

bad_sig()<br />

DELTA_INITSEG = 0x0020 (= SETUPSEG – INITSEG)<br />

SYSSEG = 0x1000<br />

word start_sys_seg = SYSSEG; // kurulum ba¸slı˘gında tanımlı<br />

{<br />

DS = CS – DELTA_INITSEG; // INITSEG olarak da bilinir<br />

BX = (byte)(DS:[497]); // örn. setup_sects<br />

// ilk 4 sekctör zaten yüklü<br />

CX = (BX – 4) > 3) + SYSSEG; // gerçek sistem kodu ba¸slangıcı<br />

move SYSSEG:0 to CS:0800 (CX*2 bytes);<br />

if (setup_sig1!=SIG1 || setup_sig2!=SIG2) {<br />

no_sig:<br />

prtstr("No setup signature found ...");<br />

no_sig_loop:<br />

hlt;<br />

goto no_sig_loop;<br />

}<br />

}<br />

hlt komutu komut çalı¸stırmayı durdurur ve i¸slemciyi halt durumuna getirir. ˙I¸slemci halt kipine girildi˘gini belirtecek<br />

¸sekilde özel bir ta¸sıt dizisi üretir. Etkin bir kesme (NMI dahil) olu¸stu˘gunda, i¸slemci çalı¸stırmayı hlt komutundan<br />

sonra devam ettirir ve komut göstericisi, hlt’ı takip eden komutu göstererek, kesme yöneticisi ça˘gırılmadan<br />

önce yı˘gıta kaydedilecektir. Böylece i¸slemciyi tekrar halt durumuna koymak için hlt’tan sonra jmp komutuna<br />

ihtiyaç duyarız.<br />

setup kodu do˘gru yere ta¸sınmı¸stır. start_sys_seg de˘gi¸skeni gerçek sistem kodunun ba¸sladı˘gı yeri gösterir.<br />

E˘ger bad_sig olmazsa start_sys_seg, SYSSEG olarak kalır.<br />

4.3. Yükleyici Türünü Kontrol Et<br />

Yükleyicinin imgeyle uyumlulu˘gunu oldu˘gunu kontrol et.<br />

///////////////////////////////////////////////////////////////////////////////<br />

good_sig()<br />

char loadflags; // setup ba¸slı˘gı içinde<br />

http://belgeler.org <strong>Linux</strong> Kitaplı˘gı 22 / 77

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!