init/main.c에 있는 execve가 정의되어있는 위치는 ?
글쓴이: hongwoo / 작성시간: 목, 2009/02/26 - 5:19오후
linux kernel 2.6.18.8 init/main.c에 있는 코드입니다.
... static void run_init_process(char *init_filename) { argv_init[0] = init_filename; execve(init_filename, argv_init, envp_init); }
여기서 execve가 어디에 있는 함수인지 찾지 못하고 있습니다.
찾다찾다 지치다보니 혹시 user level의 execve를 호출하는건 아닌지 의심이 되고 있습니다. ;;
이건 어디에 있는걸까요 ?? 흐음...
참고로 2.6.28.1에는 다음과 같이 되어 있습니다.
init/main.c ... static void run_init_process(char *init_filename) { argv_init[0] = init_filename; kernel_execve(init_filename, argv_init, envp_init); } arch/x86/kernel/sys_i386_32.c ... int kernel_execve(const char *filename, char *const argv[], char *const envp[]) { long __res; asm volatile ("push %%ebx ; movl %2,%%ebx ; int $0x80 ; pop %%ebx" : "=a" (__res) : "0" (__NR_execve), "ri" (filename), "c" (argv), "d" (envp) : "memory"); return __res; }
Forums:
user mode의 execve가 맞습니다.
실제로 컴파일 해 보면 execve 부분이 다음의 코드로 치환되어 있는 것을 확인할 수 있습니다.
이 코드는 glibc의 코드입니다.
댓글 달기