[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