[pso] Despre [tema1]Windows - KeServiceSystemTable

Alex Badea vamposdecampos at gmail.com
Mon Mar 26 13:29:39 EEST 2007


omar Chouydary wrote:
> Ai zis mai devreme asa ceva (Razvan):
>  
> "> int ls; /* last service no */ -> aici e clar
> 
> vezi ca nu e indexul ultimului serviciu, ci numarul de apeluri valide"
> Asta este fals. De ce? Pt ca la noi in tema, voi adauga apelul
> MY_SYSCALL_NO care are numarul 0x200, adika 512 in decimal. In
> windows-ul nostru erau definite 296 de apeluri sistem (asta e ce
> returneaza .ls-ul). Deci, daca ar fi sa o luam dupa cum zici tu, ar
> trebui sa punem noul ls = vechi.ls + 1 adika ls=297. Asta e gresit, pt
> ca windows-ul interpreteaza aiurea si cand vine un apel pt 512 zice ca e
> mai mare ca 297 si nici nu il ia in calcul.
> Deci de fapt ls este chiar numarul ultimului apel de sistem, chiar daca
> numai 297 din ele sunt valide. Poate a mai avut cineva nelamurirea asta.
> Am vrut doar sa spun cum sta de fapt treaba.

"numarul de apeluri valide" versus "indexul ultimului serviciu" e o
eroare off-by-one. Din experimente, ls este (ca sa mai adaugam o
exprimare :P) numarul de elemente al tabelelor (st, spt, si eventual
ct). Cum din fabrica toate elementele sunt apeluri de sistem valide,
acest numar coincide cu numarul de syscall-uri.


More information about the pso mailing list