gpt4 book ai didi

Ruby - fork 进程上的 set_trace_func

转载 作者:数据小太阳 更新时间:2023-10-29 07:00:58 25 4
gpt4 key购买 nike

我想实现以下目标:

构建一个 Ruby 命令行实用程序来注册一些 set_trace_func 事件,然后调用您传递给它的任何 ruby​​ 可执行参数(比如 rspec)。注册的事件然后转移到调用的命令。

myutility的伪代码:

set_trace_func() # Set some events here

exec(ARGV.join(' ')) # Execute argument passed

然后调用 myutility rspec

我的目标是实际在任意命令上注册跟踪点(只要它们使用 ruby​​ 垫片)。

我尝试过的事情:

  1. exec 不起作用,原因很明显(它完全取代了进程)。
  2. popen、系统、反引号。这些启动了一个独立的过程。

我可以使用某种形式的 IPC,但它假定控制我使用我的实用程序调用的命令。不是这种情况;我愿意接受任意 Ruby 可执行参数。

这可能吗?我没有仔细研究过的一件事是 drb,但这也假设了对外部参数的一些干扰。

最佳答案

您可以通过向 ruby​​ 解释器添加参数将一些代码注入(inject) ruby​​ 进程,因此您的实用程序可以分为两部分 - 运行器和有效负载。 Payload 只是另一个脚本,它根据需要注册 set_trace_func 等,runner 将前者注入(inject)到目标脚本中,如下所示:

exec('/usr/bin/env', 'ruby', '-r', payload_full_filename, *ARGV)

这将使 ruby​​ require 您的有效载荷首先进入进程,然后继续运行目标脚本本身(即使目标脚本无法编译,有效载荷也会运行)

关于Ruby - fork 进程上的 set_trace_func,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34181355/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com