2012-04-09 4 views
2

정확히 execve()는 무엇을합니까? 나는 문서 (http://linux.die.net/man/2/execve)를 보려고 노력했지만, 나는 리눅스에 매우 익숙하고 프로그래밍의 이런 종류가 많은 의미를 가지지 않는다는 것을 고려할 때 주어진다. 내가 뭘 원하는이 명령을 실행 할 수 있습니다 :execve()는 무엇을합니까?

nc -l -p someport -e /bin/sh 

내가 좋아하는 뭔가를 할 수 다음

char *command[2]; 
command[0] = "nc -l -p someport -e /bin/sh" 
execve(command[0], name, NULL); 

답변

5

올바른 사용이

입니다 (someport는 4444과 같은 숫자입니다)
extern char * const environ[]; 
char * const command[] = {"nc", "-l", "-p", "porthere", "-e", "/bin/sh", NULL}; 
execve("/usr/bin/nc", command, environ); 

"nc"과 같은 짧은 이름이 아닌 전체 경로 이름을 사용해야합니다 (더 정확하게는 PATH 검색이 수행되고 경로 이름은 실제 기존 파일이어야 함). 그리고 arg 미리 분리 된 문자열에 ù 지한다. 위의 스 니펫에 언급 된 외부 번호 environ을 통하거나 main()의 세 번째 매개 변수에서 얻은대로 어떻게 든 환경을 전파해야합니다. 후자는 약간 더 표준 - 축복 받았지만 필요에 따라 돌아 다니는 것이 더 고통 스러울 수 있습니다.

+0

"porthere"뒤에 쉼표가 있어야한다고 가정합니다. – Nosrettap

+0

죄송합니다. 오타되었습니다. 고정. – geekosaur

+0

아래 답변은 훨씬 좋습니다. –

12

execve은 현재 프로세스를 첫 번째 인수로 지정한 명령을 실행하는 새 프로세스로 바꿉니다.

기회는 당신이 execvp 또는 그 대신 execlp이 원하는 꽤 괜찮은 있습니다 - 당신이 아이의 환경을 제공하고자 대해 아무것도 언급하지 않은,하지만 당신은 아마 싶어 사물의 모양에서 경로는 실행 파일을 찾기 위해 검색 너는 사용하고있어.