execve (x86_64 Linux에서)의 구현을 어떻게 볼 수 있습니까? 라이브러리 unistd에 있습니까? execve를 호출하지 않고 어셈블러를 사용하여 외부 프로그램을 호출하는 방법을 알고 싶기 때문에 이걸 원합니다. execve라는 시스템 호출이 있다는 것을 알고 있지만, 어떻게 사용할 수 있는지 모르겠습니다.함수의 구현 execve (unistd.h)
변수 char * 및 유형 char * []를 레지스터에 넣을 수 있습니까?
int execve(const char *filename, char * const argv[], char * const envp[]) {
return syscall(SYS_execve, filename, argv, envp);
}
실제 "작업"의 모든
커널에서 수행됩니다 는
감사합니다. 그러나 char * 유형의 변수를 입력하고 char * [] 유형을 레지스터에 넣을 수 있습니까? 예를 들어, 필자가 시스템 콜을 쓸 때만 쓰기 및 종료하는 방법을 알고 있습니다. 포인터를 레지스터에 넣고 버퍼 크기를 다른 포인터에 넣어야하지만 어떻게 할 수 있습니까? – dv1729
이전과 다른 점이 없습니다 - 파일 이름, 인수 배열 및 환경 배열에 대한 포인터를 세 개의 레지스터에 넣습니다. 후자의 2 개는'char *'의 배열의 선두에의 포인터가되어, NULL로 끝난다. – duskwuff