最近自分がプログラマーでもあるという事を忘れつつあるので、ここらで一つ披露。
鈴木島男に学ぶ ウィルス撃退法 - にぽたん研究所ここで、私からこんな島男スタイルを提唱する。 これをやればあなたも一見天才プログラマーだ。 結線していないキーボードをものすごい勢いで打鍵しながら
% tail -f /usr/local/apache/logs/access_log
それでは私が本当のHackerもうならせる奴を披露しよう。
ソースコードに patch あてて脆弱性対策をして復旧したのかも知れないが「コンパイル」という作業を経ずに復旧してしまう。
もちろん、コンパイル不要。
% perl -e '$f="t.c";open F, ">$f";print F qq(#include "/dev/tty"\n);close F;system "cc $f";system "./a.out";'
以下、証拠写真。FreeBSD 5-Stableを使用。
% perl -e '$f="t.c";open F, ">$f";print F qq(#include "/dev/tty"\n);close F;system "cc $f";system "./a.out";' int main(){ printf("hello, world!\n");} hello, world!
島男クンならこれで何とかするはず。
Dan the JAPH
追伸:Mac OS X はこういう冗句は嫌いみたいで動きません。
追々伸:ありゃ?Panther + XCode 1.5 だと動いちゃうぞ!?
以前#include "/dev/tty"やった時には動かなかったんでその時の記憶が....さらに追試をしてみる。
% perl -e '$f="t.c";open F, ">$f";print Fq(#include "/dev/tty"\n);close F;system "gcc2 $f";system "./a.out";' /usr/bin/ld: Undefined symbols: _main
どうやらgccのversionによるみたい。レポートThx>JDE::Pyuutaの作者様
追記2006.09.20
等価変換な日々 Moe Effective C 第 2048 項 「標準入力をコンパイルしたい時は /dev/tty を include しよう」こんなことができたのか…
>ついでに unlink $f, "a.out"; もしておくとお行儀が良いっすよね(いいってそこは)
a.outも消しちゃうとさすがに島男タン、というよりも和久井タン(番組内名知らん)がまずいのでは:)