首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使这个简单的外壳代码c程序从终端编译?

如何使这个简单的外壳代码c程序从终端编译?
EN

Stack Overflow用户
提问于 2012-07-05 03:21:05
回答 3查看 1.7K关注 0票数 2

我正在尝试使用ubuntu 12上的终端进行编译:

代码语言:javascript
复制
#include <stdio.h>

#include <stdlib.h>

main()

{
    /*declare argument array*/
    char *args[2];

    args[0] = “/bin/bash”;
    args[1] = NULL;

    execve(args[0], args, NULL);

    exit(0);
}

我在http://www.securitytube.net/video/235上发现了这个例子,这也是Aleph one在“为了乐趣和利润而粉碎堆栈”中使用的一个例子。我意识到从那以后发生了很大的变化。在我用过的更简单的例子中:

gcc -ggdb -m首选堆栈边界=2-fno-堆栈保护器文件名filename.c

其他时候,我可能会包含静态实用程序。在我尝试编译上面的C代码之前,它一直在运行。我从终端收到的消息是:

代码语言:javascript
复制
ss@ss-laptop:~$ gcc -static -mpreferred-stack-boundary=2 -fno-stack-protector -o shell         shell.c
shell.c: In function ‘main’:
shell.c:9:2: error: stray ‘\342’ in program
shell.c:9:2: error: stray ‘\200’ in program
shell.c:9:2: error: stray ‘\234’ in program
shell.c:9:15: error: expected expression before ‘/’ token
shell.c:9:15: error: stray ‘\342’ in program
shell.c:9:15: error: stray ‘\200’ in program
shell.c:9:15: error: stray ‘\235’ in program
ss@ss-laptop:~$

我知道这是一个非常简单的例子,这个错误可能是由linux中当前的标准安全措施引起的,但我想绕过他们,在将来练习这个例子和更多的例子。如果有人能帮上忙的话,那一定是“棒极了”。

干杯

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-07-05 03:23:35

在字符串字面值两边有“智能”引号,

代码语言:javascript
复制
“/bin/bash”;

尝试使用普通引号"

票数 4
EN

Stack Overflow用户

发布于 2012-07-05 03:23:12

我认为这与安全性无关,而是下面这行:

代码语言:javascript
复制
args[0] = “/bin/bash”;

用于分隔字符串的引号字符不是标准的ASCII引号字符;相反,它们是用于引号的非常好的Unicode字符。

尝试将此代码重写为

代码语言:javascript
复制
args[0] = "/bin/bash";

将引号字符替换为新的双引号。

顺便说一句,编译器不可能检测到所有可能启动外壳代码的程序。如果任何标准编译器会因为安全漏洞而阻止程序编译,我会感到震惊。

希望这能有所帮助!

票数 2
EN

Stack Overflow用户

发布于 2012-07-05 16:53:37

感谢大家的快速响应。我学到了一些东西:

1)复制和粘贴是愚蠢的

2)请勿复制粘贴

3)无论如何都要检查我的引号

答案是引号。我删除并重新输入了它们。*叹息。

干杯

我是个新手,我是第一个承认这一点的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11334454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档