问题标签 [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.
c - fork() 和 Execve、minix 系统 C、核心转储
我现在正在学习 C,并负责在 Minix 虚拟机中创建一个 shell,我正在使用 Minix 中已经可用的库函数来做到这一点,例如 ls、cd 等...
我遇到了一个问题,在 fork 子进程后,我导致核心转储,而不是执行我的命令
这是到目前为止我正在使用的代码,当将 /bin/ls 作为我的 shell 的参数传递时,我可以让它在一个用户输入中打印 ls,两次,但是它在执行该动作时退出 shell,这它不应该。我希望能够使用其他功能,让它们打印一次,然后返回等待用户输入。
当不传递任何参数时,shell 将只接受“退出”,不接受其他命令。如果我从我的主要方法、execve 或两者中删除参数子句 (argv[]),它们会抛出您所期望的错误。
我已经阅读了有关我使用过的所有功能的文档,并专门选择了它们,所以我很高兴不必更改它们,除非我正在做的事情实际上无法使用它们。
仍在学习 C,所以我会欣赏更小的技术术语或更容易理解的短语。我不确定我的问题之前是否曾提出过问题,但我已经用大约 20 种不同的方式搜索了我的问题,并且我的问题的大多数版本都是为 c++、c# 编写的,或者与我的不相似问题,据我了解。
我还要待几个小时,所以如果我错过了任何信息,请随时发表评论并要求澄清、信息或其他任何信息。
c - execve 不采用环境参数
我想编写一个执行 Linuxls
命令的程序。我真的只想输入ls
而不是/bin/ls
,所以我想使用execve
(execvp
不是一个选项) 来做到这一点。
我试过:
但它似乎不起作用,ls
不被认可,但/bin/ls
它是。没有什么问题,parmList
因为我试过这个execvp
并且它有效。
有任何想法吗?
linux - 当从我的 c 程序中调用时,如何将数据传递给使用 stdin/stdout 的 zlib 的 zpipe 可执行文件?
我有一个 c 程序应用程序,它能够生成一个包含压缩数据的文件,然后通过添加必要的 zlib 页眉和页脚将其转换为 zlib 格式。我想通过从我的应用程序中调用 zlib 的 zpipe 可执行文件来验证数据是否已正确压缩。
要直接从 linux 命令行调用 zpipe,语法如下: zpipe 用法:zpipe [-d] < source > dest,其中 '-d' 表示解压缩。因此,使用 linux 命令行 shell 将源文件的内容定向到标准输入,并将膨胀的数据定向到标准输出。
我的应用程序有自己的主要功能。最初,我能够将 zpipe 源代码构建到我的应用程序中,并将 zpipe 的 main 函数中的必要代码合并到我的应用程序的 main 函数中,从而直接调用 zpipe 的 inflate 和 deflate 函数。
我现在想做的不是合并 zpipe 源代码本身,而是从我的应用程序的 main 函数中调用 zpipe 可执行文件本身。
我从 linux 命令行调用我自己的应用程序的主要功能,如下所示: ./myapp ./zpipe -d -i zlib_format_input_compressed_file -o output_decompressed_file
我可以通过构造一个 newargv 从我的应用程序中调用 zpipe 可执行文件,但是在我真正让 zpipe 解压缩我提供的文件数据之前,此操作将不成功。
问题是,我如何从我的 c 程序中将“zlib_format_input_compressed_file”的内容提供给 zpipe 的标准输入,就像在命令行 shell 中所做的那样,并告诉 zpipe 将结果定向到 output_decompressed_file。我可以使用“管道”来实现这一点吗?
c - 在使用 execve() 时寻找匹配的“”时出现意外的 EOF
我尝试通过 execve() 运行多个命令(或使用简单的输出重定向)。
当我放这个时(当然,在我将这个字符串传递给函数之前,我分成空格并将每个单独的字符放在 char* [] 中):
到 execve() 函数,我有一个错误:
/usr/bin/cat: -c: line 0: 寻找匹配的'''时出现意外的EOF
/usr/bin/cat: -c: 第 1 行:语法错误:文件意外结束
这是我使用execve () 函数运行多个 linux 命令(位于 PATH 中的应用程序)的建议(出于安全原因)
但是这个解决方案并没有像我预期的那样工作。
有什么想法可以解决我的解决方案吗?也许我可以使用 execve() 否则,但我不知道如何..
编辑:添加简化(对不起,由于公司限制,我无法粘贴原始形式)源代码:
linux - execve后,前一个进程addr的内存是否被释放?
在 execve 函数中,参数由指针数组传递。如果这些指针指向前一个堆栈中的内存,那么这些内存是否仍然可以在新的进程映像中访问。
c - 编译器错误导致 execve 失败?
我在使用 C 程序时遇到了一些神秘的事情,该程序在我的电脑上运行良好,但在我正在处理的服务器上编译它时却失败了。基本上 execve 的执行失败。原来的程序不是太大,所以我开始剪掉一些部分,以试图了解问题可能出在哪里。
这是程序的一个剪辑(它只是一个剪辑,所以当然它没有任何意义),好吧,在这里 execve 仍然失败:
}
但是当我拿出这部分时:
该程序再次开始工作。
以下是一些信息:
- 我电脑上的 gcc 版本:4.8.4
- 服务器上的 gcc 版本:4.6.3
- 上述程序的组装:http: //pastebin.com/nTagaErP
当我使用在我的电脑上编译的版本时,该程序在服务器上正常运行,这就是为什么我认为编译器有问题。
python - 为什么我们必须在 subprocess.Popen 中使用列表?
我的问题更多的是理论而不是实际,我找到了更多的答案来解释我们如何而不是为什么subprocess.Popen
我们应该在通话中使用列表。
例如众所周知:
然后我在 UNIX 中乱搞,发现了一些有趣的东西:
可能两者execve
和使用的列表模型subprocess
都在某种程度上相关,但是任何人都可以对此给出一个很好的解释吗?
提前致谢。
c - 在 C 中从内存中加载脚本
我有一个以存储在字符串中的 shebang 开头的脚本。我想执行此脚本而不将其写入临时文件。
我看到它execve
以文件名作为参数。是否可以对内存中的脚本执行相同的操作。
macos - Execve 调用中 OS X x86_64 中的总线错误
我正在尝试在 64 位 Asm中模仿 Security Tubes execve 教程( http://hackoftheday.securitytube.net/2013/04/demystifying-execve-shellcode-stack.html )。我不确定总线错误来自哪里。我逐步浏览了 GDB 中的应用程序,但直到我超出框架后才出现错误。如果有人知道发生了什么,我很想听听你的意见。
c - 使用参数调用 Unix 外部命令
我找到了一种不带参数调用 unix 外部命令的方法(例如“ls”、“pwd”)。它是这样的:
我正在尝试转换此代码以接受带有“ls -l”等参数的外部命令