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