gpt4 book ai didi

编译器错误导致 execve 失败?

转载 作者:行者123 更新时间:2023-11-30 18:29:51 47 4
gpt4 key购买 nike

我在使用 C 程序时遇到了一些神秘的情况,该程序在我的电脑上运行良好,但当我在我正在使用的服务器上编译它时却失败了。基本上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);

程序再次开始运行。

以下是一些信息:

当我使用在我的电脑上编译的版本时,程序在服务器上运行正常,这就是为什么我认为编译器有问题。

最佳答案

argvchar* 的数组应该以 NULL 终止指针。换句话说,最后一个有效元素后面的元素应该是 NULL .

envp是一个类似的构造。您应该声明您的 envpchar*[] ,就像您对 argv 所做的那样,并在没有 & 的情况下传递它至execve .

请注意:大多数情况下,当您的程序无法运行时,这不是编译器错误。您的编译器和操作系统库已经过数百万人的测试,如果存在错误,通常会在到达您之前就已修复。

关于编译器错误导致 execve 失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34780202/

47 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com