[pso] [Tema1][win] Problema la interceptare sys_call

Stefan Bucur stefan.bucur at gmail.com
Wed Apr 2 12:38:56 EEST 2008


2008/4/2 Razvan Deaconescu <razvand at cs.pub.ro>:
> On Wed, 2008-04-02 at 09:59 +0300, Marius Nicolae wrote:
>  > 2008/4/2 Alex Drenea <alexdrenea at gmail.com>:
>  > >  Incredibil.... stiam eu ca e ceva extrem de simplu... Chiar daca
>  > pentru
>  > > noua structura KeSDT aveam grija sa aloc vectorii cu dimensiunea
>  > > MY_SYSCALL_NO + 1 din motive care nu mi le pot
>  > > imagina acum, setam ls-ul la MY_SYSCALL_NO.
>  >
>  > Din comentariile din sursa rezulta ca ls ar fi "last system call
>  > number" deci ai crede ca trebuie sa pui MY_SYSCALL_NO
>  > dar de fapt este ceva de genul "lenght of syscall table" deci trebuie
>  > pus MY_SYSCALL_NUMBER+1
>
>  Da, sursa nu este intuitiva in denumire. Documentatia oficiala pentru
>  structura tabelei de descriptori Windows o reprezinta sursele[1].
>
>  Dupa cum puteti observa, campurile sunt denumite oficial:
>   Base   - tabele de servicii
>   Count  - tabele de debug
>   Limit  - dimensiunea tabelei de servicii (_nu_ ultimul apel din tabela)
>   Number - tabela de dimensiuni ocupate de argumentele fiecarui serviciu
>
>  Razvan
>
>  [1] http://cs.pub.ro/~pso/lxr/source/base/ntos/ke/kiinit.c?v=wrk-1.2#391
>
>

Cu chestia asta am pierdut si eu toata seara de ieri (plus chestia ca
faceam MY_SYSCALL_NO & 0x00000FFF + 1 fara sa-mi dau seama ca & are
precedenta mai mica ca + (blush), si ma umpleam de BSOD), si am gasit
solutia in LXR. Ca un mic feedback, as sugera ca slide-urile din
cursul de Apeluri de sistem referitoare la interceptarea apelurilor pe
Windows sa fie actualizate si sa contina nume sugestive de campuri,
impreuna cu explicatiile aferente. De exemplu mi-a luat ceva sa ma
prind ca de fapt Count este non-NULL doar cand flag-ul DBG este
definit la compilare (ceea ce nu e cazul pe un kernel de productie).

Numai bine,
Stefan Bucur


More information about the pso mailing list