-1
我遇到了一些神祕的東西,它可以在我的電腦上正常工作,但在我正在編譯的服務器上編譯時出現故障。基本上execve的執行失敗。原來的程序不是太大,所以我開始削減一些部分,以試圖瞭解哪裏可能是問題。編譯器錯誤導致execve失敗?
在這裏,程序的切割(它只是一個切口所以,當然它沒有任何意義),對,在這裏的execve仍然失敗:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <stdlib.h>
#include <sys/wait.h>
int main(){
// Arguments
char *argv[100] = {"/home/input/input", [1 ... 99] = "A"};
//The real program would use some pipes later
int pipestdin[2];
int pipestderr[2];
pipe(pipestdin);
pipe(pipestderr);
// Call
char *env = "\xde\xad\xbe\xef=\xca\xfe\xba\xbe";
execve("/home/input/input",argv,&env); // Execute the program
printf("ERROR\n"); // printed only if execve fails
return 0;
}
但是當我拿出這部分:
int pipestdin[2];
int pipestderr[2];
pipe(pipestdin);
pipe(pipestderr);
程序開始再次工作。
下面是一些信息:在我的電腦
- gcc版本:4.8.4
- 在服務器上的gcc版本:4.6.3
- 大會上面的程序:http://pastebin.com/nTagaErP
當我使用在我的電腦上編譯的版本時,程序在服務器上正常工作,這就是爲什麼我認爲編譯器有問題。
「execve」失敗的原因是什麼? (提示:你目前的程序沒有告訴你,你應該改變它,所以它會告訴你,無論是perror還是strerror(errno)) – immibis
你的argv和envp都構造不正確。閱讀手冊頁。 –