[pso] [Windows - Tema1]asm_ mov syscall, eax
George Adrian Drumea
georgedrumea at rdslink.ro
Tue Mar 28 02:07:50 EEST 2006
Vezi sa nu ai variabile initializate inainte de instructiunea mov,
daca se initializeaza prin calcul, registrul eax poate fi pierdut.
Deci mov-ul trebuie sa fie prima instr din functie, ca sa fii sigur.
>
>
>
>
> ----- Original Message -----
> From: Adrian - Razvan Deaconescu
> To:Proiectarea Sistemelor de Operare
> Sent: Monday, March 27, 2006 11:48 AM
> Subject: Re: [pso] [Windows - Tema1]asm_ mov syscall, eax
> On 3/27/06, Bogdan Ardeleanu <bogdanardeleanu at gmail.com> wrote:
> Scuze pentru eroarea lexicala de mai inainte, scrisesem
> "_mov", dar intrebarea se mentine!
> hmm, poate o bucata mai mare de cod (nu doar partea cu asm) ar fi de dorit
> Razvan
>
>
> Ceea ce zic acum nu e mare lucru fata de ceea ce e in curs!
>
> // global
> int s_no;
>
> [...]
>
> NTSTATUS (*f)();
>
> [...]
> NTSTATUS interceptor(){
> int syscall, params, syscall_table, syscall_index;
> void *old_stack, *new_stack;
>
> DbgPrint("Serviciu de sistem interceptat: %d - %d", syscall,
> s_no); // aici se afiseaza: 1 - 120
>
> /*
> syscall_table=syscall>>12;
> syscall_index=syscall&0x0000FFF;
> params=KeServiceDescriptorTable[syscall_table].spt[syscall_index];
>
>
> // ... ceea ce e si in curs de fapt
>
> _asm mov old_stack, ebp
> _asm add old_stack, 8
> _asm sub esp, params
> _asm mov new_stack, esp
>
> memcpy(new_stack, old_stack, params);
>
> */
>
> // s_no oricum e validat din tabela 0
> return syscalls[s_no].f();
> }
>
> void intercept(int syscall){
> // nu pot detalia cod...dar se inlocuieste functie de
> tratare serviciu de sistem cu "intercept()", dezactivand protectia
> la scriere asupra tabelei.
> }
>
>
>
>
>
More information about the pso
mailing list