[#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:
[#49997] Re: メソッド呼び出し時の引数の値を VM 側で取得する方法について
— Tetsuo Handa <penguin-kernel@...>
2017/02/28
SASADA Koichi さんは書きました:
[#49999] Re: メソッド呼び出し時の引数の値を VM 側で取得する方法について
— SASADA Koichi <ko1@...>
2017/02/28
On 2017/02/28 14:53, Tetsuo Handa wrote:
[#50000] Re: メソッド呼び出し時の引数の値を VM 側で取得する方法について
— Tetsuo Handa <penguin-kernel@...>
2017/03/01
SASADA Koichi さんは書きました:
[ruby-dev:49998] Re: メソッド呼び出し時の引数の値を VM 側で取得する方法について
From:
SASADA Koichi <ko1@...>
Date:
2017-02-28 07:50:06 UTC
List:
ruby-dev #49998
On 2017/02/28 14:47, Tetsuo Handa wrote: >> まず、後者から。TracePoint#return_value にて採れますので、そのあたりの >> コードをチェックされると良いと思います。 > > TracePoint では .rb ファイルの側からAPIを呼び出すための修正が > 必要ですよね?下記の理由により、 .rb ファイルに対する変更は避けたいです。 いえ、意図としては、return_value メソッドをどう実装しているか見るのはど うでしょうか、という提案でした。 >> 引数については、全部をチェックする方法はありませんが、例えば rb_inspect >> が問題であるのなら、rb_obj_info_dump() や rb_raw_obj_info() を使うと、 >> inspect 呼び出しをせずに、全部じゃないですが、なんとなく値を取得すること >> が可能です。 > > ruby-2.0.0 には rb_obj_info_dump() も rb_raw_obj_info() も存在しないようです。 なるほど! 2.1 以降(できれば、最新版)を参考にされるのも良いかもしれません。 >> これらは、Ruby 的な正攻法では、TracePoint を利用して下さい、ということに >> なるかと思いますが、Ruby を弄るようでしたら、これらも選択肢ということで。 >> >> 用途がはっきりわかると、もう少し何か言えるかもしれません。 > > イベントのシーケンスを用いた侵入検知システム(WAF)の研究です。 > カーネルレイヤではシステムコールに渡される引数を、アプリケーション > レイヤでは関数呼び出しに渡される引数を追跡し、発生する筈のない > シーケンスが渡されたら攻撃と判断するというものです。そのため、 > オブジェクトとしてメソッドに渡される引数の内容(例: HTTP リクエストや > レスポンス)を、スクリプトに対して特定のAPIを呼び出すための修正を > 要求せず、かつ、パフォーマンス以外には動作への影響が出ないように > 取得したいと考えています。 なるほど。本当は(おそらくライブラリの) .rb 側にモンキーパッチを入れる のが適切な気がしますね。シーケンスだけなら、method id だけでも良さそうで すが、パラメータはどの辺で必要になるんでしょうか(ちょっと、脱線になっ ちゃいますが)。 -- // SASADA Koichi at atdot dot net