Fedora 9のLinuxカーネルをSystemTapでライブに改造して『ゆの』対応にしてみます。x / _ / x
#「ゆの in language」の趣旨とは申し訳ないくらいに違うかもだけど。。
元ネタ: ゆの in Ruby - 冬通りに消え行く制服ガールは、夢物語にリアルを求めない。 - subtech
試すにはちょっと事前準備が要ります。
1. SystemTapと必要なモノをインストール。
# yum install kernel-devel systemtap # debuginfo-install kernel
(Fedora9の場合。8ならyum -enablerepo=debuginfo install kernel-debuginfo とかかな?)
2. 以下のスクリプトをファイル「yuno.stp」に保存。
function memset(buf:long, src:string, size:long) %{ /* DANGER !! */ char *buf = (void*)(long)THIS->buf; char *src = (void*)(long)THIS->src; memcpy(buf, src, (int)THIS->size); %} probe kernel.function("sys_read").return { if (execname() == "cat") { if ($count >= 4096 && $return < 1024) { x = "ひだまり" for (c = 0; c < $return; c++) { t = substr(user_string($buf), c, 1) if (t == "x") { if (k) x .= "x365" k = 1 } else if (t == "_") { x .= "スケッチ" } else if (t == "<") { x .= substr(user_string($buf), c+1, $return - c); } else if (t != " " && t != "/") { // printf("%s\n", x) memset($buf, x, strlen(x)) $return = strlen(x) next; } } } } }
3. 以下の内容の「ゆの」ファイルを作ります。
% cat yuno
x / _ / x < 来週も見てくださいね!
4. 別窓で実行開始(要root権限)。これだけでは何も起こりませんが…
# stap -vg yuno.stp ... Pass 5: starting run.
5. catでyunoを読んでみると…
% cat yuno ひだまりスケッチx365 来週も見てくださいね!
ファイルの中身が「ひだまりスケッチ×365」に変わった!?
いえいえ、tacとかlessで見てみればゆののままであることが分かります。
% tac yuno
x / _ / x < 来週も見てくださいね!
また、stapコマンドをCtrl-Cで止めると元に戻ります。
なお、正しいゆの以外を読ませると何が起こるか分からない(最悪カーネルがお亡くなりになる)のでやめた方が良いと思います。
解説 → id:NeoCat:20080713:1215944363