execve

    3热度

    2回答

    我的程序应该使用fork和exec系统调用。 exec应更改子进程,以便将另一个命令作为参数并执行该命令。例如,显示当日消息: ./myexec cat /etc/motd 这是我当前的代码 extern char **environ; /* environment info */ main(int argc, char **argv) { /* argc -- number o

    0热度

    1回答

    以下是我尝试了解如何在两个子进程之间进行正确管道的尝试。我只是试图将一个Linux命令的输出传递给另一个(ls到cat)并让程序成功返回。然而,我猜测第二个分叉的孩子被卡住了,父母永远在等着这个孩子。很长一段时间,我一直在摆弄这段代码,试图找出它为什么会陷入困境。谈到C语言编程时,我很喜欢noob,但我正在努力学习。 有没有人知道为什么程序不会退出,但挂在猫? 任何帮助将不胜感激。 谢谢。 #in

    2热度

    2回答

    我试图运行Java应用程序,更具体的一个罐子编译之一,采用的execve(c)中 类似的东西: char *cmd[] = {"a.jar"}; execve("a.jar",cmd,NULL); 一个好的工作,但当我试图限制该程序可以使用类似的东西开的线程数: struct rlimit rlp; rlp.rlim_cur = rlp.rlim_max = limit_nproc; s

    0热度

    1回答

    我从目录中执行一个简单的shell程序执行的程序,我可以运行与我的shell可执行文件在同一文件夹中的文件,但无法运行诸如ls.exe之类的程序。 令牌容器在下列元素中包含文件名作为第一个元素和任何后续标记(例如输入“ls.exe -l”中的“-l”)。 if (fork()) { int status; wait(&status); } else { std::ve

    1热度

    1回答

    我正在写汇编,我想弄清楚如何执行一个execve系统调用,而不是输出打印到终端,我想知道它的存储位置,所以我可以稍后使用它,有点像管道命令。 例如,这里的组件,用于执行所述命令“其”经由execve的,基本上执行命令“$其中LS”: GLOBAL _start SECTION .TEXT _start: XOR EAX,EAX PUSH EAX PUSH

    4热度

    2回答

    我想看看我在execve()函数中传递的环境变量是否真的被传递了,所以我做了这段代码(Main.c): int main(){ char PATH[4]; strcpy(PATH, "bin"); char * newargv[] = {"./get","", (char*)0}; char * newenviron[] = {PATH}; ex

    1热度

    2回答

    如何从C执行/打开/运行另一个程序,而不是阻止它,但让它同时运行。然后我想做一些测试,如服务器/客户端,然后如果这已经完成,我想杀死/关闭此程序。我已阅读约 system() or execv() 但首先似乎阻止了等待结果,第二似乎只在Linux上工作?在最好的情况下,我希望有跨平台或最低的MacOS/Windows/Linux(Ubuntu)工作解决方案。当我不再需要它时,我也需要关闭这个以

    0热度

    1回答

    我试图在64位Asm中模拟安全管execve教程(http://hackoftheday.securitytube.net/2013/04/demystifying-execve-shellcode-stack.html)。我不确定巴士错误来自哪里。我在GDB中通过应用程序,但是直到我失去框架后才发生错误。如果有人知道发生了什么,我很乐意听取您的意见。 .section __DATA,__data

    2热度

    2回答

    我找到了一种不带参数调用unix外部命令(例如“ls”,“pwd”)的方法。它是这样说: //Child process char cwd[1024]; getcwd(cwd, sizeof(cwd)); char *argv[] = {*args, NULL}//(ex.) {"ls", NULL} char *env[] = {cwd, NULL}; //concat():metho

    0热度

    2回答

    我想显示正在使用的execve()函数作为参数传递给另一个进程2的环境变量: MAIN.C: int main(){ char USERNAME[10]; strcpy(USERNAME, "USERNAME="); for (int i=1;i<10;i++){ strcpy(USERNAME+i, "1"); } char P