CVE-2012-どさにっき 〜2012年8月上旬〜

by やまや
<< = >>

2012年8月5日(日)

大弛峠〜金峰山

_ このクソ暑い時期に車中泊するには北海道あたりまで北上するか、そうでなければ標高を稼ぐしかない。車で行ける高いところだと乗鞍岳畳平(2700m)とか立山室堂平(2450m)とか富士山スカイライン新五合目(2400m)というのがあるけど、畳平と室堂は通年、富士山は登山シーズン中、マイカー規制がかかっていて車中泊できない。今の季節、自分の車で行けるいちばん高いところというと、奥秩父の大弛峠(2360m)ということになる。

_ そんなわけで大弛峠で車中泊してきた。寒かった。毛布1枚じゃ足りない。

_ で、わざわざこんなところまで車で登ってきて車中泊する物好きなアホというのは、……いっぱいいる。駐車スペースがあふれるくらいに。もっとも、車中泊したくてしてるわけではなく、早朝から山に登るためだが。

_ とゆーことで、わしも登ってきた。金峰山(2599m)まで。登山口の標高がバカ高いので、登りがあんまりなくてラクちん。下界は雲がひろがってるものの、山の上は雲ひとつない青空。道中は森の中が多いので展望はあまりないものの、見晴しのよい場所では富士山から八ヶ岳から南アルプスまでくっきりはっきり見える。

_ 金峰山には山頂直下に五丈岩という巨大な岩塊が鎮座しておりまして。こいつの存在感がデカすぎて頂上がひじょーに影が薄い:-)。巨大な1個の岩というわけでなく、いくつもの岩が積み重なってできてるようで、岩の反対側が見通せるような隙間がたくさんあったりする。こういう大きな岩というのは、そこらの山なら鎖や鉄梯子やらが設置されて誰でも登れるようになってるだろうけど、そんな甘っちょろいものはここにはない。手がかり足がかりを自分で探して這い上がらなければならない。ボルダリングの心得がある人ならこの程度は楽勝なんだろうけど、そんなもんはまるでないのでちょー難しい。仮に登れたとしても降りられなくなりそうで、途中まで登ったところで尻尾を巻いて逃げかえる。

_ 巨大な岩と格闘しているうちに雲が上がってきて遠くの山が見えなくなってしまった。だいぶ長居もしたのでそろそろ帰る。来た道を引き返して車に戻り、途中で温泉で汗を長して帰宅。

_ 瑞牆山(手前)と八ヶ岳(奥)

五丈岩。写真に写ってるおっちゃんがいるあたりまではわしも登ったが、そこから先はどうにもならずに撤退(このおっちゃんはいちばん上まで登ってた)。


2012年8月9日(木)

sh で brainfuck

_ 仕事に飽きてくると逃げたくなるよね。sh で動く brainfuck インタプリタを書いてみた。

% cat hello.bf
+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.
------------.<++++++++.--------.+++.------.--------.>+.
% sh brainfuck.sh hello.bf 
Hello, world!

_ 以下、スクリプト。#! 行がないけど /bin/sh で動きます。

____=${#__}
_____=${#____}
______=$((_____+_____))
_______=$((______+______+_____))
________=$((_______+______+_____))
_________=/???/???/??$_______???
[ "$_________" = $_________ ] && _________=/???/??$_______
[ "$_________" = $_________ ] && _________=/????/[!$____-$((________+_____))][!$____-$((________+_____))]$_______
_________=`$_________<<_
$_______
`
_________=${_________%% *}
_________=${_________#?}
__________=${_________#??}
__________=${_________%$__________}
____________=${__________%?}
______________=${_________#???}
______________=${______________%%$______*}
_______________=${_________%???}
_________________=${_______________%?}
_______________=${_______________#$_________________}
_________=${_________%$____}
_________=${_________##*$_______________?}
__________="$__________ -$_________"
___________=`$__________$________$____$______________$_______________`
_____________=`$__________$_____$_____$_______$___________`
________________=`$__________$_____$_____$((_______+_____))$___________`
________=$_________`$__________$_____$_____$________$___________[$______________]$___________$_____$____$________$___________`
_________________=`$__________$_____$_____$______$___________$_____$_____${#________}$___________$_____$____$_______$___________$_____$_____$____$___________`$________________$_______________
_______________________=$_____________`$__________$_____$____${#________}$___________$_____$____$_______$___________`$_______________$________________
______________________=`$__________"$((_______+______))$((______+_____))$___________$((_______+______))$____$___________$((${#________}*______))$((______+_____))$___________[= ]$___________$_____$_____${#________}$___________[$_________$______________$____________ -]$___________$_____$_____${#________}$___________"`
__=`$__________$_____$____$((_____+______))$___________`
_______________=`$________________$($__________$_____$_____${#________}$___________) -$____________ '
' < $@ | $_____________$_________$____________ "$_____________/[^-+><.,\[\]]//$__"`
__________________=`$_____________$_________$____________ "$_____________/./?/$__"<<_
$_______________
_`
__=$____
$________ _$____=$____
___=$_____
_(){
    ____________________="${_______________#`$_________________ %.$((___-_____))$_____________ "$__________________"`}"
    _____________________="${____________________#?}"
    ______________=${____________________%"$_____________________"}
    [ "$______________" = "" ] && $_________`$__________$_____$______$____$___________$_____$____$_______$___________`$________________
    [ "$______________" = ">" ] && { __=$((__+_____)); $________ : \${_$__=$____}; }
    [ "$______________" = "<" ] && { __=$((__-_____)); [ $__ \< $____ ] && $_________`$__________$_____$______$____$___________$_____$____$_______$___________`$________________ $_____; }
    [ "$______________" = "+" ] && $________ _$__=\$\(\(\$_$__==$______$_______$_______?____:\$_$__+_____\)\)
    [ "$______________" = "-" ] && $________ _$__=\$\(\(\$_$__==____?$______$_______$_______:\$_$__-_____\)\)
    [ "$______________" = "." ] && $________ $__________\${_$__}$___________
    [ "$______________" = "," ] && {
	[ "$___________________" = "" ] && {
	    $________ $______________________ ___________________
	    ___________________="$___________________
"
	}
	$________ _$__=`$_________________ %$____________ "'$___________________"`
	___________________="${___________________#?}"
    }
    [ "$______________" = "[" ] && {
	[ `$________ $_________________ \\$_$__` = $____ ] && {
	    ____________________="${_______________#`$_________________ %.$((___-_____))$_____________ "$__________________"`}"
	    _____________________="${____________________%%]*}"
	    ___=$((___+${#_____________________}))
	} || $_____________$_________$________________ -- $___ $@
    }
    [ "$______________" = "]" ] && {
	$________ ___=\$$_____
	___=$((___-_____))
	$_______________________
    }
    ___=$((___+_____))
    _ $@
}
_
ダウンロード

_ とりあえず、上の hello.bf は FreeBSD (ash)、MacOSX (bash), Debian (bash, dash) で動くのを確認したけど、動かない bf のコードもけっこうたくさんある。sh の read は1行単位でしか読めないけど、bf の "," は1バイト単位で読むことを要求するので、そのあたりでけっこう動かないものが多い。それから、実装上の都合上でポインタは正の値しか使えないので、< でいきなりマイナス方向に移動させるようなお行儀の悪いものはコケる。それ以外の原因で動かないものもあるようだけど、原因は追ってない。このへんは 記号化する前のスクリプトでもたいてい動かないので、記号化したのが原因ではなさげ。記号化した方はループをシェル関数の再帰呼び出しで実現してるので、大きなスクリプトは再帰が深すぎて落ちるが、でもそのぐらいの違いかな。

_ 関連: 記号で hello world記号だけ(空白なし)で hello world


<< = >>
やまや