gpt4 book ai didi

c - system() 和 execve() 有什么区别

转载 作者:行者123 更新时间:2023-12-03 03:46:24 25 4
gpt4 key购买 nike

我使用linux和c。

首先,我将 bin/zsh 软链接(soft link)到 sh

第二,我以root身份登录并运行以下程序。

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
char *v[3];
if(argc < 2) {
printf("Please type a file name.\n");
return 1;
}
v[0] = "/bin/cat"; v[1] = argv[1]; v[2] = 0;
/* Set q = 0 for system(), and q = 1 for execve */
int q = 0;
if (q == 0){
char *command = malloc(strlen(v[0]) + strlen(v[1]) + 2);
sprintf(command, "%s %s", v[0], v[1]);
system(command);
}
else execve(v[0], v, 0);
return 0 ;
}

第三,我以普通用户(不是 root)身份登录。现在,我可以使用该程序的执行文件来删除或重写一个我没有写入权限的文件。

像这样:

./a.out text;\`echo \”Not right\”>text\`”

现在我可以将“不正确”写入文件“text”中。我只有该文件的读取权限

enter image description here

这些文件的读写权限。 enter image description here

第四,我将 q 更改为 1。这意味着,这次我使用 execve 来代替。

并执行与上面相同的操作。但这次我无法更改文件的内容。

为什么?我在互联网上谷歌,但我找不到system和execve之间的区别。

最佳答案

system 调用 shell 来解析字符串并处理引用和变量插值等。 execve 不执行任何操作。它用被调用的程序替换该程序,并完全按照指定传递参数字符串; IE。它不会解释引号。

关于c - system() 和 execve() 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26448841/

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