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의 코드입니다.
댓글 달기