[urbanek at openbsd.cz: Re: opet syscally]
Milos Urbanek
urbanek at openbsd.cz
Fri May 7 10:27:53 CEST 2004
----- Forwarded message from Milos Urbanek <urbanek at openbsd.cz> -----
Date: Thu, 6 May 2004 18:40:41 +0200
From: Milos Urbanek <urbanek at openbsd.cz>
To: Tomas Pluskal <plusik at pohoda.cz>
Subject: Re: opet syscally
On Thu, May 06, 2004 at 05:15:23PM +0200, Tomas Pluskal wrote:
>
> Mimochodem, vy vite proc mi ten modul pada pri unloadu? :)
>
> T.P.
>
Mimochodem, jenom bych chtel lehce nastinit, co se deje, kdyz date
unloadovat ten Vas modul (predpokladam, ze to co nasleduje je vam znamo):
- programem modload (nebo jak to na FreeBSD je) zavolate syscall kldunload,
- udela se int 80 do kernelu, zde se pusti syscall()
- syscall najde sysent pro kldunload a pusti sy_call pro kldunload,
ktery jste ale nahradil za vasi rutinu
- pusti se vase rutina, ktera vygribe z registru cislo syscallu a pusti
rutinu kldunload
- rutina kldunload pusti linker_find_file_by_id(), najde vas modul,
- zavola se linker_file_unload() pro vas modul, ten zavola linker_file_sysuninit()
- linker_file_sysuninit() zavola vasi slavnou deainicializacni rutinu,
ktera nahradi v sysent vsechny sy_call za puvodni hodnoty
- pak se zavola jeste par rutin (napr. linker_file_unregister_sysctls)
a vsechno skonci tim, ze se zavola free() a
- uvolni se vsechna pamet vaseho modulu, tj. code section, data section
- pak dobehne rutina kldunload a v tomto okamziku se kernel ma vratit
do rutiny vaseho slavneho modulu, ze ktere zavolal kldunload(),
- pamet, kde byl kod vaseho modulu ulozen ale uz neexistuje. takze asi sotva
muzete dokoncit vasi rutinu a vratit se zpet do userspace.
Nebo se mylim?
Milos
----- End forwarded message -----
More information about the Users-l
mailing list