问题标签 [execve]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
17562 浏览

c - 使用带有 execve 的新路径来运行 ls 命令

我正在尝试使用 execve 来运行 ls 命令。目前我正在使用以下参数运行它:

我期望这样做是使用我的新 env_args 运行 ls 命令,这意味着它将在我的 PATH 中查找 ls。然而,这段代码实际上并没有做任何事情,当我运行代码时,它只是返回到我的命令提示符而没有输出。

使用相同的 args[] 我正在使用 execvp 和 ls 工作并搜索了我当前的路径。

你能告诉我我做错了什么吗?

我想做的是编写我自己的 shell 程序,我可以在其中创建和导出自己的环境,并让 exec 使用我在 char** 中定义的环境。本质上,我正在编写自己的函数来对 env_args 进行操作以添加和删除变量,当我调用 exec 时,我希望能够在 {"ls", "-l", NULL} 上调用 exec 并让它查看我的新环境名为 ls 的有效程序的路径变量。我希望这能更好地解释我正在做的事情。我不认为 extern environ var 在这种情况下对我有用。

0 投票
3 回答
78482 浏览

c - 了解 execve 和设置环境变量的要求

我们在解释我们的老师时遇到了很多麻烦。我们要求澄清并从他那里得到以下回复

  1. 对于 execve,向它发送一个使用导出变量设置的环境,并创建一个内置命令来生成 /bin/bash 的子 shell,这样您就可以使用 env 查看导出的变量。

    (他在这里谈论创建我们自己的环境变量。)

  2. 是的,创建你自己的。您可以在 shell 启动时复制 environ 并仅添加导出的变量

这与我在 Stack Overflow 上的以下帖子有关(阅读其他帖子将帮助您了解我想要做什么):

使用带有 execve 的新路径来运行 ls 命令

我们对此感到非常困惑。再一次,我将解释我们现在正在尝试做的事情。与您的 Linux shell 执行此操作的方式类似,我们需要编写自己的程序来设置环境变量,如 PATH 和 USER 以及用户想要定义的任何其他变量。

您将如何调用它的一个示例是(在程序提示符下):

这将创建一个看起来像“dog=spike”的环境变量

更重要的是,我们需要能够设置自己的 PATH 变量并将其发送到exec命令。这是令人困惑的部分,因为根据我们所有的问题,我们不明白我们应该做什么。

0 投票
1 回答
3689 浏览

c - C、execve 和参数中的 UNIX 简单 shell

代码的基本思想是读取用户输入的命令(在read_command()函数中完成)(例如:)ls -l。然后我将输入字符串分成小字符串并将它们存储在一个数组中。关键是将命令存储在参数[0](例如:ls)中,将参数存储在参数[1,2,3等]中(例如:-l)。但是,我认为我execve()错误地执行了该功能。

0 投票
1 回答
2952 浏览

c - 执行路径搜索?

我想从我的代码中执行一个程序,并为它提供环境变量和参数。AFAICT,execve是正确的选择。

但是,execve接收一个path参数,而不是 a filename,这意味着它期望第一个参数是可执行文件的路径。

我知道我可以解析$PATH自己找到路径,但真的,没有其他选择吗?没有其他人在某个地方实现它供我使用吗?

0 投票
1 回答
622 浏览

iphone - 在 setuid iPhone 应用程序中加载 MobileSubstrate

我的 iPod touch (Installer4) 上有一个根应用程序,我希望它加载 MobileSubstrate,这样我就可以开始进行调整以修复它的错误。我知道根应用程序有一个中间可执行文件,能够在应用程序不崩溃的情况下对其设置 6755 权限,在安装程序的情况下,它被命名为 Scythe。我尝试制作一个新的来使用 execve() 加载 MobileSubatrate,但没有成功。该应用程序不会崩溃,它仍然是 root,但 MobileSubatrate 不会加载:/(我知道这是因为 Activator 不起作用)。

这是我的 Scythe.c(基于来自 Icy 的 Trichlorotrifluoroethane.c):

如您所见,我研究了如何使用 execve() 加载 dylib,并且找到了 LD_PRELOAD 和 LD_LIBRARY_PATH,但两者都不起作用。而且我没有安装程序的源代码来执行 dlopen("/Library/MobileSubstrate/MobileSubstrate.dylib", RTLD_LAZY),无论如何,如果我有它,我不会问这个问题。

我希望有人能解决这个问题。

0 投票
2 回答
3747 浏览

bash - “sh -c”不接受额外参数的问题,UNIX,使用 execve()

我正在尝试找出如何使用sh -cbash -c正确使用。

我可以轻松地运行一个简单的命令,比如 "sh -c ls"不带参数。

当我尝试添加参数时,问题就来了。要做ls -ltga,我必须做:

这不会是一个大问题,除非我正在尝试编写自己的小型 shell 程序,并且当我使用时,execve我尝试:

它给了我一个错误,说它在找到下一个之前达到了 EOF'"'

我也试过:

它返回给我说它找不到名为的文件/脚本"ls -ltga"

有人知道我做错了什么吗?

0 投票
3 回答
13074 浏览

c - execve() 无法在 C 中启动程序

我正在尝试在 Linux 上使用execve()from生成一个新进程。unistd.h我尝试将以下参数传递给它,execve("/bin/ls", "/bin/ls", NULL);但没有得到任何结果。我也没有收到错误,程序就退出了。发生这种情况有原因吗?我尝试以 root 和普通用户身份启动它。我需要使用的原因execve()是因为我试图让它在这样的程序集调用中工作

谢谢!

0 投票
3 回答
10657 浏览

c - execve("/bin/sh", 0, 0); 在管道中

我有以下示例程序:

我和当我在没有任何管道的情况下运行时,它会正常工作并返回一个sh提示:

但这在管道中不起作用,我想我知道为什么会这样,但我无法找到解决方案。示例运行如下。

我认为这与这样一个事实有关,即以这种方式gets清空接收 EOF 并在没有错误消息的情况下立即退出。stdin/bin/sh

但是我该如何解决这个问题(如果可能,不修改程序,如果不删除,则不删除gets),以便即使我通过管道提供输入,我也会得到提示?

PS 我在 FreeBSD (4.8) 机器 DS 上运行它

0 投票
2 回答
5560 浏览

c++ - SIGKILL 杀死进程

我有一个在执行程序后立即被杀死的进程。这是编译后的可执行文件的代码,它是一个小程序,它从标准输入(通常是描述性文件)中读取几个由数字表示的图,并使用 Prim 算法找到每个图的最小生成树(它没有显示结果,它只是找到了解决方案)。

我了解到我必须使用 strace 来查找发生了什么,这就是我得到的:

我正在运行 ubuntu,这是我第一次遇到这种类型的错误。该程序应该在从输入中连续读取两个零后停止,我可以保证我的图形描述文件中有。即使我执行程序而不将输入重定向到我的图形文件,也会出现问题。

0 投票
2 回答
21840 浏览

c++ - execve() 是做什么的?

execve() 究竟是做什么的?我试过查看文档(http://linux.die.net/man/2/execve),但考虑到我对 linux 很陌生,而且这种编程方式没有多大意义。我想要做的是能够执行这个命令:

我可以执行以下操作吗(其中 someport 是一个数字,例如 4444)