[pso] [Tema1][win] Invalid system call

Claudiu Mihail claudiu.bogdan.mihail at gmail.com
Tue Mar 1 20:48:24 EET 2011


Banuiesc ca nimeni nu s-a mai confruntat cu problema asta pana acum si deja
devine putin frustrant deci voi descrii pasii poate fac ceva gersit si nu ma
prind (sper ca nu se considera copiat sau ceva de genul asta, dar chiar nu
vad unde gresesc):

Guard();
{
 WPOFF();
{
KeServiceDescriptorTableNEW->st[MY_SYSCALL_NO] = &my_syscall;
KeServiceDescriptorTableNEW->spt[MY_SYSCALL_NO] = 2*sizeof(int) +
sizeof(HANDLE);
 KeServiceDescriptorTableShadowNEW->st[MY_SYSCALL_NO] = &my_syscall;
KeServiceDescriptorTableShadowNEW->spt[MY_SYSCALL_NO] = 2*sizeof(int) +
sizeof(HANDLE);

KeServiceDescriptorTable[0] = KeServiceDescriptorTableNEW[0];
KeServiceDescriptorTableShadow = KeServiceDescriptorTableShadowNEW;
 DbgPrint("New size = %d %d", KeServiceDescriptorTable[0].ls,
 KeServiceDescriptorTableShadow[0].ls);

DbgPrint("%x -- %x", KeServiceDescriptorTable->st[MY_SYSCALL_NO],
&my_syscall);
                        DbgPrint("Num param bytes = %d %d",
KeServiceDescriptorTable->spt[MY_SYSCALL_NO],
KeServiceDescriptorTableShadow->spt[MY_SYSCALL_NO]);
 }
WPON();
}
UnGuard();

DbgPrint-urile arata date consecvente, aceleasi adrese pt my_syscall si 12
pentru numarul de bytes ocupati de parametrii lui my_syscall. Inlocuirile
sunt bune si alocarile de memorie sunt bine facute. Accesul e protejat prin
spin lock-uri. Chiar nu vad unde gresesc. Banuiesc ca pentru a putea sa fie
apelata my_syscall trebuie doar rulat tester-ul. Dar de fiecare data cand se
incearca apelarea ei din tester da invalid system call (si evident testele
pica). Cand se apeleaza teste via do_as_guest(), atunci merge, my_syscall
este apelata (am verificat si ras verificat).

Again, any ideas would be appreciated,
Claudiu

2011/3/1 Alexandru Juncu <alexandru.juncu at cs.pub.ro>

> 2011/3/1 Claudiu Mihail <claudiu.bogdan.mihail at gmail.com>:
> > Claudiu Mihail <claudiu.bogdan.mihail at ...> writes:
> >
> >>
> >>
> >> Salut,
> >>
> >> Am o mica nedumerire. Dupa ce am pus MY_SYSCALL in tabela de
> syscall-uri,
> > incerc printr-un program sa o chem sa vad ca e apelata. Dar de fiecare
> data cand
> > o apelez imi returneaza STATUS_INVALID_SYSTEM_SERVICE in loc de
> rezultatul care
> > ar trebui dat de rutina mea. Modul in care chem rutina este in felul
> urmator
> >>
> >> int r;
> >> unsigned long var[3] = {1, 2, 3};
> >> system("driver load objchk_wnet_x86/i386/sci.sys");
> >>
> >>
> >> _asm mov eax, MY_SYSCALL_NO
> >> _asm mov edx, var
> >> _asm int 0x2e
> >> _asm mov r, eax
> >>
> >>
> >> Am pus rutina de tratare in tabela, la index-ul potrivit
> (MY_SYSCALL_NO),
> > dimensiunea tabelei (MY_SYSCALL_NO+1), si am setat cati bytes ar trebui
> sa
> > primeasca ca parametrii, deci ar trebui sa fie totul bine pe partea
> driver-ului.
> > Programul cu care testez il rulez ca administrator deci nu prea vad care
> ar
> > putea fi problema.
> >>
> >> Any ideas would be appreciated,
> >> Claudiu
> >>
> >>
> >>
> >> _______________________________________________
> >> http://elf.cs.pub.ro/so2/wiki/resurse/lista-discutii
> >
> > Dar aparent daca fac de pe alt user merge. Daca rulez testele din
> do_as_guest()
> > atunci merge...vad cum e functia apelata (am un DbgPrint in ea) si
> returneaza si
> > ce i-am dat sa returneze. Acum chiar ca sunt derutat.
> >
> > Claudiu
>
>
>
> Ai înlocuit funcția de tratare și în KeServiceDescriptorTable și în
> KeServiceDescriptorTableShadow?
> _______________________________________________
> http://elf.cs.pub.ro/so2/wiki/resurse/lista-discutii
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/pso/attachments/20110301/845c6ea3/attachment.htm>


More information about the pso mailing list