[pso] Tema 1 Linux - Prototip functie interceptie si vectorul de sistem calls interceptate

Alexandru Tudose alexandru.tudose at gmail.com
Fri Mar 16 00:21:03 EET 2007


Nu am reusit sa ma lamuresc dupa ce am consultat mai multe resurse in
legatura cu urmatoarele:

1. Cine este efectiv responsabil de transferul parametrilor din registri
(alti decat eax) catre system call? Procedura de entry stie sa "vada" de
cati parametri are nevoie un system call, si ii furnizeaza exact cati are
nevoie citindu-i din registri?

Intreb asta pentru ca nu am vazut nicaieri (unistd.h sau entry.S)
specificata informatie legata de prototipul system call-urilor. Doar numele
lor si numarul lor. Cum stie cine trebuie sa stie cati parametri are sau nu
un syscall?

2. Am vazut in unele locuri system calls definite cu un singur parametru,
struct pt_regs* regs. Care este diferenta intre a defini un system call asa
si a-l defini la modul my_syscall( int a, char* b, int c )?

3. Trebuie sa suprascriem system call-ul 0, dar acesta are prototipul
restart_syscall(void) pe cand functia noastra este predefinita ca fiind
my_syscall( int, int, int ). Cum este posibil asa ceva? :-)

4. Trebuie definit un vector de pointeri la functii, unde sa salvam
functiile interceptate pentru a fi restorate ulterior. Cum s-ar defini acest
vector de pointeri atata timp cat mai toate functiile au numar si tip de
parametri diferiti?
Initial ma gandisem la

asmlinkage long (*original_call[ NR_syscalls ])(struct pt_regs* regs);

dar asta ar merge _doar_ daca ar putea fi chemate intr-un mod uniform...
cred ca imi scapa ceva aici :-(



Multumesc mult pentru ajutor,
Alexandru Tudose.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://cursuri.cs.pub.ro/pipermail/pso/attachments/20070316/29b3cd96/attachment-0001.html


More information about the pso mailing list