這個問題在這里已經有了答案: C中單引號和雙引號的區別 5個答案 20 小時前關閉。
我有一小段 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我會得到另一個外殼。我的代碼是錯誤的還是某種型別的安全措施不允許我這樣做?
uj5u.com熱心網友回復:
用警告編譯它會立即顯示出問題所在:
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。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/443549.html
上一篇:layui框架入門
