[#49993] メソッド呼び出し時の引数の値を VM 側で取得する方法について — Tetsuo Handa <penguin-kernel@...>

初めまして。 Linux カーネルプログラマの熊猫と申します。

12 messages 2017/02/28
[#49995] Re: メソッド呼び出し時の引数の値を VM 側で取得する方法について — SASADA Koichi <ko1@...> 2017/02/28

On 2017/02/28 14:06, Tetsuo Handa wrote:

[ruby-dev:49996] Re: メソッド呼び出し時の引数の値を VM 側で取得する方法について

From: Tetsuo Handa <penguin-kernel@...>
Date: 2017-02-28 05:47:06 UTC
List: ruby-dev #49996
SASADA さん、早速の回答ありがとうございます。

SASADA Koichi さんは書きました:
> On 2017/02/28 14:06, Tetsuo Handa wrote:
> > 現在、 Ruby VM に手を加えることで、メソッド呼び出し時の引数の値/メソッドから
> > 復帰する時の戻り値の値を取得する方法を探しています。
> 
> まず、後者から。TracePoint#return_value にて採れますので、そのあたりの
> コードをチェックされると良いと思います。

TracePoint では .rb ファイルの側からAPIを呼び出すための修正が
必要ですよね?下記の理由により、 .rb ファイルに対する変更は避けたいです。

> 
> 引数については、全部をチェックする方法はありませんが、例えば rb_inspect
> が問題であるのなら、rb_obj_info_dump() や rb_raw_obj_info() を使うと、
> inspect 呼び出しをせずに、全部じゃないですが、なんとなく値を取得すること
> が可能です。

ruby-2.0.0 には rb_obj_info_dump() も rb_raw_obj_info() も存在しないようです。

> 
> これらは、Ruby 的な正攻法では、TracePoint を利用して下さい、ということに
> なるかと思いますが、Ruby を弄るようでしたら、これらも選択肢ということで。
> 
> 用途がはっきりわかると、もう少し何か言えるかもしれません。

イベントのシーケンスを用いた侵入検知システム(WAF)の研究です。
カーネルレイヤではシステムコールに渡される引数を、アプリケーション
レイヤでは関数呼び出しに渡される引数を追跡し、発生する筈のない
シーケンスが渡されたら攻撃と判断するというものです。そのため、
オブジェクトとしてメソッドに渡される引数の内容(例: HTTP リクエストや
レスポンス)を、スクリプトに対して特定のAPIを呼び出すための修正を
要求せず、かつ、パフォーマンス以外には動作への影響が出ないように
取得したいと考えています。

> 
> -- 
> // SASADA Koichi at atdot dot net
> 

In This Thread