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

linux - 尽管缺少基于文件系统的功能,如何执行进程并保留功能?

我想让系统在没有setuid文件“+p”功能的情况下可用,并且通常没有在我设置PR_SET_NO_NEW_PRIVS时被禁用的东西。

使用这种方法(init集合PR_SET_NO_NEW_PRIVS和基于文件系统的能力提升不再可能)你不能“重新填充”你的能力,只需要小心不要“飞溅”它们。

如何在execve不“破坏”任何授予功能的情况下进行其他进程(例如,如果新程序的文件是setcap =ei)?只是“我相信这个新过程,就像我相信自己一样”。例如,给用户一个能力(并且用户想在他启动的任何程序中锻炼它)......

我可以永久制作整个文件系统=ei吗?我想保持文件系统不干扰方案,不能授予或撤销功能;通过父->子控制一切。

0 投票
3 回答
1067 浏览

c - 带有 execve 系统调用的 C 网络编程

我正在尝试创建一个简单的客户端/服务器程序,该程序允许客户端使用 TCP 套接字连接到服务器,然后允许用户从客户端向服务器端发出系统调用并将回复返回给用户。例如:

客户端问题:ls

服务器将在 /usr/bin 或 w/e 中找到 ls,然后使用 execve() 执行它

我还会有一些喜欢 lls 或 lmkdir 等的东西。它将在客户端发出系统调用。

问题是我的 execve() 似乎没有正确运行,因为实际上没有调用“ls”或任何其他命令。我之前只使用本地端(没有服务器或任何东西)完成了同样的程序,并且 execve() 工作正常。这是一些代码:

由于某种原因,PID 语句的子部分中的 printfs 根本没有执行。我不认为系统实际上会分叉一个进程。由于它是客户端/服务器类型的程序,我是否需要做一些特别的事情才能完成这项工作,还是应该完全一样?

谢谢

0 投票
4 回答
473 浏览

bash - 如何知道叉子中所有叉子的pid?

例子:

目标:编写一个脚本follow.sh,它运行 $1 并收集所有分叉的 pid。像那样:

该示例为 4 个数字)。这些数字可能会在一段时间后出现。也许实用程序follow.sh有一个已知名称,例如pidtracer

0 投票
1 回答
1497 浏览

linux - 内核:在 do_execve_common 中获取命令行和 pid_parent?

是否可以在Linux内核的do_execve_common中获取即将创建的进程的命令行?换句话说,如何从 argv 中提取命令行并将其 printk 到 dmesg。

其次,是否也可以获取进程的pid和父pid?这些信息在 do_execve_common 附近是否可用?

我只需要在内核中做这些事情。

0 投票
1 回答
2999 浏览

linux - sys_execve 挂钩 3.5 内核

我正在尝试在 x86_32 上的 Linux 内核 v3.5 中挂钩 sys_execve 系统调用。我只是将 sys_call_table 入口地址更改为我的钩子函数

我确实为修改 sys_call_table 条目设置了页面权限,并且提到的方案适用于其他系统调用(chdir、mkdir 等)。但是在 execve 挂钩时,我得到了空指针取消引用:

我用三个参数调用 sys_execve,因为arch/x86/kernel/entry_32.S它包含PTREGSCALL3(execve). 但是,我尝试使用四个参数(添加struct pt_regs*)调用它,但我得到了同样的错误。也许这种执行方法完全有问题?还是我错过了什么?

更新#1

我发现它sys_call_table[ __NR_execve ]实际上包含ptregs_execve(不是sys_execve)的地址。在 中定义如下arch/x86/kernel/entry_32.S

所以为了修改sys_execve我需要替换它的代码而不修改它的地址?我在这里读过类似的东西,这是要走的路吗?

更新#2

实际上我发现了以下调用序列:do_execve->do_execve_common->search_binary_handler->security_bprm_check,这security_bprm_check是一个围绕 LSM(Linux 安全模块)操作的包装器,它控制二进制文件的执行。之后,我阅读并关注了这个链接,我得到了它的工作。它解决了我的问题,因为现在我可以看到要执行的进程的名称,但我仍然不确定它的正确性。也许其他人会对所有这些东西增加一些清晰度。

0 投票
0 回答
619 浏览

linux - 在没有 execve 的情况下执行二进制文件?

我在某处看到有人提到可以“模拟” execve(主要使用 open 和 mmap)以加载其他二进制文件(没有实际的“execve”系统调用)。

  1. 有没有已经实现的例子?
  2. 我们可以同时加载静态和动态二进制文件吗?
  3. 可以便携吗?

此类功能对于将工作委派给忽略文件系统位的任意二进制文件或安装不允许实际执行的 seccomp 策略可能很有用。

0 投票
1 回答
563 浏览

c++ - 如何在 C++ execve 命令中将字符串转换为 char[]*?

尝试使用 execve 命令时,我收到关于我最后 2 个参数的错误。

我尝试使用几种不同的选项来复制字符串,例如:

但我无法让它工作并收到一条错误消息:

错误:无法将参数 3 的 char* 转换为 char* const* 到 int execve(const char*, char* const*, char* const*)

0 投票
2 回答
731 浏览

c - Shellcode:执行 2 次 execve() 调用

我正在尝试在汇编中编写 shellcode。我需要执行一个/usr/bin/killall命令和一个/usr/bin/wget命令。我有两个命令在execve()系统调用的 shellcode 中完美运行。但是现在我想将这两个结合起来,但是这是不可能的,因为程序在execve()执行第一次调用时就退出了。(来自execve():的手册页execve()不会返回成功)。

如何进行 2 次execve()通话?还是有另一种方法可以从同一个 shell 代码/usr/bin/killall中调用两者?/usr/bin/wget

提前问候和感谢!

0 投票
1 回答
3900 浏览

assembly - pass arguments to execve program in shellcode

I'm having a go at learning assembly and writing shellcode. I have a question about execve and passing arguments to the program it will execute.

I have working code to execute a bash shell but am unsure of the input format of execve to pass additional arguments to it. Can I do stdin stdout redirects too? I wanted to create a reverse tcp connection with this type of command line:

Should the arguments be separated with NULL's? I got it to execute a shell but it didn't connect back to the listening nc.

I know this is an unusual way of doing this but I just wanted to try something different :-)

Cheers

0 投票
1 回答
380 浏览

linux - 为什么 strace 不显示 HDD IOCTL 系统调用?

在执行时,strace -ttT date我会在可执行文件发布后立即错过很多系统调用。在 execve() 之后没有进一步的系统调用将dateELF 从 HDD 复制到内存,这是否发生在内核中?我以为我会在 HDD 控制器上看到很多 IOCTL,每个字节都会按块加载到内存中?