为什么C不推出新的shell

  • 本文关键字:shell c security
  • 更新时间 :
  • 英文 :


我有一小段C代码。

#include<stdio.h>
int main()
{
char *name[2];
name[0] = '/bin/sh';
name[1] = NULL;
execve(name[0], name, NULL);
}

我有一个符号链接sh->zsh。当我运行这个程序时,什么也没发生,我就呆在同一个shell里。我知道我不是在一个新的外壳,因为当我退出时,一旦终端退出。如果我运行/bin/sh,我会得到另一个shell。是我的代码错了,还是某种类型的安全措施不允许我这样做?

编译这个并发出警告会立即显示错误:

gcc -g t.c
t.c: In function ‘main’:
t.c:7:15: warning: character constant too long for its type
7 |     name[0] = '/bin/sh';
|               ^~~~~~~~~
t.c:7:13: warning: assignment to ‘char *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
7 |     name[0] = '/bin/sh';
|             ^
t.c:9:5: warning: implicit declaration of function ‘execve’ [-Wimplicit-function-declaration]
9 |     execve(name[0], name, NULL);
|     ^~~~~~

当然这个程序不起作用。您想要的字符串文字是"/bin/sh"(在C中使用的引号类型很重要(。

相关内容

  • 没有找到相关文章

最新更新