[an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]
[an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive] (none) [an error occurred while processing this directive] [an error occurred while processing this directive] [an error occurred while processing this directive][an error occurred while processing this directive]![]() |
![]() |
![]() |
|||||||||||||||||||||||||
|
|||||||||||||||||||||||||||
![]() |
![]() |
![]() |
Peter Makholm <sslug@sslug> writes: > Mon pointen er at glibc/linuxkernen kun vil lave et lag af > shebang-udfoldning? Den korte konklusion: Det Carsten forsøger er umuligt. Kernen vil kun udføre et lag af '#!'. Den lange fortsættelse: Det ser ret med vilje ud. Kernen fortolker '#!' i fs/binfmt_script.c: static int load_script(struct linux_binprm *bprm,struct pt_regs *regs) { char *cp, *i_name, *i_arg; struct file *file; char interp[BINPRM_BUF_SIZE]; int retval; if ((bprm->buf[0] != '#') || (bprm->buf[1] != '!') || (bprm->sh_bang)) return -ENOEXEC; /* * This section does the #! interpretation. * Sorta complicated, but hopefully it will work. -TYT */ bprm->sh_bang++; allow_write_access(bprm->file); fput(bprm->file); bprm->file = NULL; [...] bprm er en struktur der bliver kastet lidt frem og tilbage. bprm->sh_bang++ sørger for at load_script kun bliver kaldt en gang. Hvis man ser lidt længere ned i funktionen kan man se at scripts bliver implementeret ved at ændre lidt i bprm-strukturen og så starte forfra i søgningen efter en funktion der kan udføre filen. Der er simpelthen ikke plads til at gemme flere lag af indirektioner. Interessant... -- Peter Makholm | One thing you do is prevent good software from sslug@sslug | being written. Who can afford to do professional http://hacking.dk | work for nothing? | -- Bill Gates
![]() |
![]() |
![]() |
||||||||||||
|
||||||||||||||
![]() | ||||||||||||||
|
||||||||||||||
![]() |
![]() |
![]() |