加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Ruby – 在分叉进程上的set_trace_func

发布时间:2020-12-17 04:13:25 所属栏目:百科 来源:网络整理
导读:我想实现以下目标: 构建一个注册一些set_trace_func事件的Ruby命令行实用程序,然后调用传递给它的任何ruby-executable参数(比如rspec).然后,已注册的事件将继承到调用的命令. myutility的伪代码: set_trace_func() # Set some events hereexec(ARGV.join('
我想实现以下目标:

构建一个注册一些set_trace_func事件的Ruby命令行实用程序,然后调用传递给它的任何ruby-executable参数(比如rspec).然后,已注册的事件将继承到调用的命令.

myutility的伪代码:

set_trace_func() # Set some events here

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

然后称为myutility rspec.

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

我尝试过的事情:

> exec由于显而易见的原因(它完全取代了这个过程)不起作用.
> popen,系统,反引号.这些开始一个独立的过程.

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

这可能吗?我没有密切关注的一件事是drb,但这也假设对外界争论有些干扰.

解决方法

您可以通过向ruby解释器添加参数将一些代码注入ruby进程,因此您的实用程序可以分为两部分 – runner和payload. Payload只是另一个脚本,它根据需要注册set_trace_func等,并且运行器将前者注入目标脚本,如下所示:
exec('/usr/bin/env','ruby','-r',payload_full_filename,*ARGV)

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读