免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6034 | 回复: 18
打印 上一主题 下一主题

C语言:chroot 和exec族的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-05 16:27 |只看该作者 |倒序浏览
chroot 以后要用execl调用程序请问该怎么做啊?
目标文件是/usr/oj/testout/testout.t
源文件new.c是
#include<unistd.h>
int main()
{

chroot("/usr/oj/testout");
execl("/testout.t","testout.t",NULL);
return 0;
}

testout.t单独运行结果是:
0_0!
但每次new.c编译运行都没有输出,到底是什么问题?
哪位高手指点一下,谢啦

论坛徽章:
0
2 [报告]
发表于 2008-11-05 16:55 |只看该作者
先要明白execl的原理。在main里面产生一个子进程去调用execl。

论坛徽章:
0
3 [报告]
发表于 2008-11-06 10:12 |只看该作者
你的帐户有root权限吗?
最好把chroot的返回值检查一下,然后perror一下;在execl后面也perror一下,问题就很清楚了

[ 本帖最后由 pushion 于 2008-11-6 10:16 编辑 ]

论坛徽章:
0
4 [报告]
发表于 2008-11-06 13:40 |只看该作者
原帖由 pushion 于 2008-11-6 10:12 发表
你的帐户有root权限吗?
最好把chroot的返回值检查一下,然后perror一下;在execl后面也perror一下,问题就很清楚了


execl后面也perror一下 有用吗?

execl是把另外一个程序加载到内存,会覆盖掉当前进程的所有代码和数据。

论坛徽章:
0
5 [报告]
发表于 2008-11-06 13:57 |只看该作者

回复 #3 pushion 的帖子

我是root登录然后编译的
另外程序改过了
#include<unistd.h>
#include<stdio.h>
int main()
{
chroot("/usr/oj/");
perror("chroot");
chdir("/");
perror("chdir");
execl("/testout/testout.t","./testout.t",NULL);
perror("execld");
return 0;
}

输出是:
chroot: Success
chdir: Illegal seek
execld: No such file or directory

这是怎么回事啊?
Illegal seek这个错误不明白啊~~

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
6 [报告]
发表于 2008-11-06 14:01 |只看该作者
原帖由 eveson 于 2008-11-6 13:40 发表


execl后面也perror一下 有用吗?


当然有用了,exec 调用也可能失败的。

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
7 [报告]
发表于 2008-11-06 14:02 |只看该作者
原帖由 cbxk 于 2008-11-6 13:57 发表
我是root登录然后编译的
另外程序改过了
#include
#include
int main()
{
chroot("/usr/oj/");
perror("chroot");
chdir("/");
perror("chdir");

perror 不是这么用的。你要先检查系统调用,例如 chroot 的返回值,若出错了,再调用 perror。

论坛徽章:
0
8 [报告]
发表于 2008-11-06 14:05 |只看该作者

回复 #2 eveson 的帖子

2楼意思是不是说我execl以后就等于吧chroot给覆盖了~所以没有效果啊?
可是我把程序改了
#include<unistd.h>
#include<stdio.h>
int main()
{
chroot("/usr/oj/");
perror("chroot");
execl("/usr/oj/testout/testout.t","./testout.t",NULL);
perror("execld");
return 0;
}
输出还是:
chroot: Success
execld: No such file or directory
貌似还是不对啊

论坛徽章:
0
9 [报告]
发表于 2008-11-06 14:12 |只看该作者

回复 #7 MMMIX 的帖子

程序继续修改~~
#include<unistd.h>
#include<stdio.h>
int main()
{

if (chroot("/usr/oj/"))
        {
                perror("chroot");
        }
if(chdir("/"))        
        {
                perror("chdir");
        }

if(execl("/testout/testout.t","./testout.t",NULL))
        {
                perror("execl");
        }
return 0;
}
这回输出是:
execld: No such file or directory
为什么总是找不到文件啊?是execl的问题吗?

[ 本帖最后由 cbxk 于 2008-11-6 14:41 编辑 ]

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
10 [报告]
发表于 2008-11-06 15:07 |只看该作者
原帖由 cbxk 于 2008-11-6 14:05 发表
2楼意思是不是说我execl以后就等于吧chroot给覆盖了~

exec 是不会改变 chroot(2) 的效果的,见 chroot(2)。而且要是改变的话 chroot 也没什么用处了。

[ 本帖最后由 MMMIX 于 2008-11-6 15:08 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP