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