#define _REENTRANT #include /* #include */ #include #include static int (*orig_execve)(); const char *newpath = "/usr/bin/bash"; const char *oldpath = "/bin/sh"; #pragma init(iexecve_init) #pragma weak execve=_execve static void iexecve_init() { orig_execve = (int(*)())dlsym(RTLD_NEXT, "_execve"); } int _execve(const char *path, char *const argv[], char *const envp[]) { int result; if ( !strcmp(path,oldpath) ) { /* printf("SUBSTITUTING: %s => %s\n",path,newpath); */ result = orig_execve(newpath,argv,envp); return result; } result = orig_execve(path,argv,envp); return result; }