[pso] Despre [tema1]Windows - KeServiceSystemTable

Razvan Deaconescu razvand at cs.pub.ro
Mon Mar 26 14:24:01 EEST 2007


Alex Badea wrote:
> 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.

daca ai 296 de apeluri de sistem, atunci astea sunt de la 0 la 295
(altfel spus 295 este indexul ultimului apel, iar numarul de apeluri
este 296)

atunci can numarul ultimului apel este MY_SYSCALL_NO = 0x200, numarul de
apeluri este MY_SYSCALL_NO+1 = 0x201 (de la 0 la 0x200)

Razvan



More information about the pso mailing list