问题标签 [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 回答
1970 浏览

stack - Shellcode中的堆栈内存地址

我在这里阅读了一篇关于编写 shellcode(使用堆栈方法执行)的基本文章:http: //hackoftheday.securitytube.net/2013/04/demystifying-execve-shellcode-stack.html

在第 6 步中:它推送一个空字符,因为字符串“/bin/sh”是空终止的。之后,它以相反的顺序推送字符串“/bin/sh”

为什么字符串以相反的顺序推入堆栈,为什么终止字符串的空字符在将字符串推入堆栈“之前”被推入?

0 投票
1 回答
2492 浏览

c++ - 重写一个小的 execve shellcode

通过http://hackoftheday.securitytube.net/2013/04/demystifying-execve-shellcode-stack.html

execve我理解调用并试图重写它的 nasm 程序。

一些背景资料:

因此,(函数调用eax = 11execve)应该ebx指向_ _ _ )。char* filenameecxargv[]ebx*filenameedxenvp[]null

原始nasm代码:

堆栈如下:

在此处输入图像描述

现在我试图通过减少一些指令来优化它。我同意直到mov ebx, esp代码保持不变。但是,由于ecx需要指向ebx,我可以重写代码如下:

但是,当我运行重新编写的代码时出现分段错误。

我的堆栈如下:在此处输入图像描述

任何想法为什么重新编写的代码不起作用?我也运行过 gdb 并且地址值是根据我的想法,但它不会运行。

0 投票
1 回答
1409 浏览

c - 使用 execve() 运行子进程的环境变量

我正在使用一个父进程,它使用 execve() 来运行具有我在父进程中定义的特定环境变量的子进程。在父进程中,如果我查看内存位置 $esp + 0x240 我会找到所有环境变量。但是,一旦启动子进程,我就无法找到存储预定义环境变量的内存地址。

我会认为由于 execve() 用子进程替换父进程,传递给子进程的环境变量将位于 0xbffffffa 减去环境变量字符串的长度(在 Linux 中)。但是,当启动子进程时,我不再可以访问内存中的那个位置。父进程调用execve()前的esp为0xbffff120,子进程启动后esp跳转到0xbf9835a0。(我猜这是因为子进程具有父进程没有的root权限)现在当我从堆栈顶部查看内存直到我不再可以访问内存时,没有对从父进程传递的任何环境变量进行签名。他们将位于哪里?同样在更一般的说明中,

0 投票
1 回答
1994 浏览

c - 如何使用 execve 和管道从读取程序获取数据到主程序?

我正在做一个项目,我必须使用 fork 创建一个子进程,然后父进程告诉子进程执行另一个 C 程序“read.c”(它从 .txt 文件中读取所有整数并计算平均值)使用 execve 然后我必须通过管道将该平均值发送到父进程。我不知道如何在“process.c”程序的子进程中获得“read.c”程序的结果“平均值”。有些朋友说我必须将对管道(pfd [2])有用的文件描述符传递给execve,而从其他程序(read.c)我必须使用管道将数据写入process.c程序。但我不知道该怎么做,所以它不能正常工作。我正在发布我的 process.c 和 read.c 代码,请告诉我应该进行哪些更改以使其运行良好。

进程.c

读.c

如果您有任何解决方案可以将 read.c 文件的输出输出到 process.c 的子进程,请告诉我。

0 投票
1 回答
3855 浏览

c - 在 fork() 之后,通过 execve/l 在 C 程序上执行 omxplayer 不会在子进程的非 X 控制台上输出视频

海。

我试图通过 execve 或 execl 函数在 C fork() 之后在 Raspberry Pi 上执行 omxplayer (http://elinux.org/Omxplayer),以便我可以保存视频播放过程的 PID(因此系统将不做这项工作)。如果我在 X 控制台/终端上执行程序,它可以工作,但如果它通过标准终端(不启动 X)它会运行,但如果在子进程上调用 execve,它不会将视频输出到屏幕上。顺便说一句,通过控制台中的“omxplayer ...”命令执行播放器将播放视频并输出到屏幕。我对这种事情有点陌生,所以这是我无法解决或找到答案的情况。这里的任何人都对如何解决这个问题有一个想法,或者有一个方向可以让我找到可能的解决方案?

注意:代码只是一个 execve 调用,我知道这是正确的,因为在 X 中它可以完美运行。

0 投票
1 回答
1459 浏览

c - execve 和管道问题 - 如何读取最后一个输出?

我正在尝试执行以下命令并读取它的输出。

我必须execve直接使用(否popen)。我相信我在最后一步失败了,将第二个孩子的输出读入父母的缓冲区。我收到“阅读问题”消息。

0 投票
3 回答
2915 浏览

c - SIGCHLD 未被捕获

我打算在父进程休眠 10 秒时将以下代码作为子进程分叉并执行“sleep 3”。我希望父进程在 3 秒后收到 SIGCHLD,当“睡眠 3”完成时。

这不会发生,而是我得到:

ps -ef显示一个

其次是:

在接下来的 7 秒内(此时父进程退出)。

问题是clean_up_child_process永远不会被调用。

我犯了什么错误?

僵尸测试.c:

0 投票
1 回答
2105 浏览

c - /usr/bin/xfce4-terminal 的 execve 给出“会话管理器变量未定义”

我正在尝试创建一个进程分支并execve在子进程中运行,以便它将打开一个新的终端窗口并在那里执行自定义命令。

我要执行的程序是gestore

这些是我传递给的论点execve

我在这里打电话execve

但我不断得到Session manager variable not defined

任何人都对为什么这不起作用或我怎样才能做得更好有什么建议?

0 投票
4 回答
4095 浏览

c - 在哪里可以找到在 C 程序的 .data 部分中创建静态变量的程序集?

第一次海报。CS二年级学生。

我正在探索在 C 源代码->GCC 编译->Linux 执行环境的上下文中在虚拟地址空间的 .data 部分中创建静态变量。

C程序是test.c

要求 GDB ' disass /m' 显示没有用于创建 staticVar[] 的代码,因为检查 .s 文件显示该变量驻留在虚拟地址空间的读/写 .data 段中,该段在创建进程时已放置在那里(这个过程是我感兴趣的)。

检查(我虽然它是' readelf -A test.o')的输出,目标文件包含我假设是在数据段中创建数组的程序集。这是 ELF 输出。

(如果你能告诉我是什么命令生成了这个输出,那么奖励。我无法使用 readelf 复制它。我从网站上获取了命令并保存了输出。我不记得是如何生成的)

[剪辑]

[剪辑]

假设(请正确):该程序集存在于可执行文件中,由 load_elf_binary() 或 execve() 启动的一系列函数的某些部分运行。我没有 at&t(基本英特尔)语法知识,但即使直观地我也看不到这些指令如何构建数组。看起来他们只是将寄存器值加在一起。

底线:我想尽可能多地了解这个静态数组的生命周期,特别是构建它的“缺失代码”在哪里以及如何查看它?或者更好的是如何调试(逐步执行)加载程序过程?我曾尝试在 __start_libc 条目(或类似条目)的 main 之前设置断点,但无法确定该区域有任何前景。

附加信息的链接很棒!谢谢你的时间!

0 投票
1 回答
649 浏览

c - execve 不会运行可执行程序集文件

我正在尝试创建 ac 程序,该程序采用可执行文件及其参数并使用 execve 运行它们,然后执行一些其他无关紧要的事情。我遇到的问题是 execve 在可执行程序集文件上调用它时不起作用。我认为问题出在我的路径上,因为我可以让 unix shell 命令正常工作,但是我无法在当前目录中获取可执行文件(使用 ./spy ./executableName,其中 spy 是我的 c 程序的名称)运行. 这是代码: