问题标签 [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 投票
2 回答
3079 浏览

c - 关于 pipe() 和 dup2() 如何在 C 中工作的说明

我正在编写一个处理管道的简单外壳。我有工作代码,但我不太明白它是如何在幕后工作的。这是我需要帮助理解的修改后的代码片段(我删除了错误检查以缩短它):

我对我的问题有猜测,但仅此而已 - 猜测。以下是我的问题:

  1. 阻塞在哪里执行?在我见过的所有示例代码中,read()write()提供了阻塞,但我不需要在这里使用它们。我只是复制 STDIN 指向管道的读取端和 STDOUT 指向管道的写入端。我猜正在发生的是 STDIN 在执行后dup2(fd[0], 0)正在执行阻塞。这个对吗?
  2. 据我了解,每个正在运行的进程都有一个描述符表,指向文件表中打开的文件。当进程重定向 STDIN、STDOUT 或 STDERR 时会发生什么?这些文件描述符是否在所有进程的描述符表中共享?还是每个流程都有副本?重定向一个是否会导致更改在所有这些中反映出来?
  3. 在调用pipe()和随后的调用之后fork(),管道有 4 个“端”打开:父级访问的读取和写入端以及子级访问的读取和写入端。在我的代码中,我关闭了父母的写入端和孩子的读取端。但是,在完成管道后,我不会关闭剩余的两端。代码工作正常,所以我假设某种隐式关闭已经完成,但这都是猜测工作。我应该像这样添加显式调用来关闭剩余的两端吗?

    /li>
  4. 这更多是关于管道过程如何工作的概念性问题。有管道的读取端,由文件句柄引用,fd[0]管道的写入端,由文件句柄引用fd[1]。管道本身只是一个字节流表示的抽象。文件句柄代表打开的文件,对吗?那么这是否意味着在系统的某个地方,有一个文件(由 指向fd[1]),其中包含我们想要通过管道发送的所有信息?并且在通过字节流推送该信息之后,有一个文件(由 指向fd[0]),其中也写入了所有信息,从而创建了管道的抽象?

0 投票
0 回答
227 浏览

iphone - 无法更改 ios 7 越狱 iphone 上的文件属性

我的设备是带有 ios 7 的 iphone 5s,它是越狱的。

我在越狱ios 7上使用以下代码更改文件属性失败,但如果ios版本小于7,它将成功,我的代码是

执行后 [[NSFileManager defaultManager] setAttributes:newAttr ofItemAtPath:payloadPath error:nil]; 我可以找到以下信息 vi iphone 控制台。

0 投票
1 回答
5381 浏览

c - execve "Bad address" error

As the title suggests, I'm getting a "Bad Address" error when calling execve(). Whenever I found someone else having the same problem, they were just omitting the NULLs at the end of the arrays, but I'm doing that here and I'm still getting the error. Anybody know what could be causing it?

0 投票
2 回答
1797 浏览

c - 无法执行系统调用“execve”

我是新手,所以我的表达方式可能不准确。我需要使用汇编程序在 C 中进行系统调用“execve”。我不使用任何库。不起作用的部分是

我编译代码(既没有错误也没有警告)

当我尝试运行该程序时,我看到此消息:

0 投票
1 回答
318 浏览

c - C 程序的参数是否保证以“\0”结尾?

关于 的论点main(),2011 C 标准说 (5.1.2.2.1:2):

如果 argc 的值大于零,则数组成员 argv[0] 到 argv[argc-1] 应包含指向字符串的指针,这些指针在程序启动之前由主机环境给出实现定义的值。

在这种情况下,单词“string”是否应该被解释为“0-terminated string”,即一系列非 0 字符后跟一个最终的 '\0',或者某些实现是否/可以以不同的方式将参数传递给程序?

在 POSIX 平台上,exec*函数家族之一的参数是否被函数验证exec*为指向格式良好的字符串的指针(以及如何?),或者 setuid 程序是否应该避免假设它已通过格式正确的 0-终止字符串作为参数?

0 投票
1 回答
883 浏览

assembly - 程序集 x86:具有多个参数的 execve

我想编写一个执行sys_execve("/usr/bin/scp","usr/bin/scp",args,NULL).

这是完整的命令:
scp -i /tmp/file -P 8989 /path/file user@ip:/home/user

问题是我需要很多寄存器(在 scp 之后有 6 个令牌):

我试图像这样推送寄存器:

但是我看到使用 gdb 和 libemu 只会产生垃圾字节。
关于如何解决这个问题的任何提示?

0 投票
1 回答
1128 浏览

unix - 为什么 execve() 不返回成功?

我已阅读手册页。

我从这个链接http://support.sas.com/documentation/onlinedoc/sasc/doc750/html/lr2/zid-7281.htm了解到的是 A successful call to execve does not have a return value because the new process image overlays the calling process image

我不是很清楚为什么会发生这种情况?如果新进程覆盖调用进程,为什么它只返回失败而不返回成功?

0 投票
1 回答
189 浏览

lisp - 如何在 common lisp (SBCL) 中执行 execve()?

在 SBCL lisp 实现中从 lisp 代码执行execve()的最佳方法是什么?或者也许有一种处理所有实现的好方法?

0 投票
2 回答
1597 浏览

c - Tokenizing a String to Pass as char * into execve()

My knowledge of C is very limited. I'm trying to tokenize a String passed to a server from a client, because I want to use passed arguments toexecve. The arguments passed viabufferneeds to be copied to*argv and tokenized such thatbuffer's tokens can be accessed withargv[0], argv[1], etc. Obviously I'm doing something incorrectly.

Passing the arguments "/bin/date -u" with the above code gives an output of:

What I what is an output of:

I tried usingstrtok_r(), but it didn't work as I intended. The snippet I inserted was:

which give an output of argv:/bin/date.

Thanks in advanced, SO.

Edit: I don't have to explicitly tokenizebufferlike I have above. Any way to get arguments from the client passed to the server works fine.

0 投票
1 回答
1442 浏览

execve - execve 如何知道 argv 中传递了多少参数?

在 C 程序中,主函数通过查看 argc 来知道在 argv 中传递了多少参数。我似乎不清楚系统调用 execve 如何知道传递给它的参数数量。有人可以帮助解释 execve 如何处理参数吗?