LKM && hack sys_execve

Jirka Kosina jikos na jikos.cz
Čtvrtek Březen 6 12:35:51 CET 2003


On Thu, 6 Mar 2003, kratochvil jiri wrote:

> > At uz tam ta dereference je nebo neni, tak to vzdycky spadne presne
> > takhle?
> presne tak
> > Zkuste mi prosim kdyztak mailem poslat cely ten zdrojak, pripadne si
> > zkuste pridat po ziskani adresy ze sys_call_table[] originalniho syscally
> > vypsat adresu te ziskane funkce, jestli to nahodou neni nejaky nesmysl.
> to je v podsate cely zdrojak, uz tam jsou jen includy.
> kdyz si vypisu z kernelu adresu tak to vypada takhle:
> Mar  6 11:04:24 station15 kernel: sys_execve: c0105a40

Omlouvam se, byl jsem jeste hodne rozespaly kdyz jsem odpovidal.

execve() je totiz jediny syscall, pro ktery tento postup nemuze fungovat.
Je to zrejme - prototyp sys_execve() vypada takhle:

	asmlinkage int sys_execve(struct pt_regs regs)

Jak vidno, argument neni pointer - indikuje to, ze registry procesu byly
ulozeny na zasobnik. Kod uvnitr sys_execve() modifikuje tyhle parametry
tak, aby nove EIP ukazovalo na zacatek nove spousteneho souboru. Takze je
potreba se jeste trosku pohrabat v puvodnim stacku.

Jak se to da udelat je videt treba v start_thread() (volane z
load_elf_binary()).

Takze nejjednodussi co muzete udelat je zavolat do_execve(), s tim, ze
predtim provedete vpodstate to same, co dela sys_execve() co se tyce
modifikace zasobniku. Coz je ugly jak Kelly Family. :)

--
JiKos.


Další informace o konferenci Linux