Re: バイナリ・プログラミング、バイナリ・ハック ― 2006年12月28日 15時42分11秒
ASAHIネット(http://www.asahi-net.or.jp)のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
やっと暇ができたので、
http://iiyu.asablo.jp/blog/2006/12/22/1041912
バイナリ・プログラミング、バイナリ・ハック
のコメントにまとめて返事です。
笑われ者さん
>でもビット操作も低レベルかっていえばスクリプト言語でもサポートしてい
るし微妙
リスト操作しかないと誤解している人が多いCommon Lispでも、ビット演算
はありますからね。
生のマシンに近いという意味で低抽象度というほうがいいのかな。
紹介した
http://www.amazon.co.jp/exec/obidos/ASIN/4434046683/showshotcorne-22/ref=nosim
ジュニア,ヘンリー・S. ウォーレン著, 滝沢徹, 赤池英夫, 藤波順久, 鈴木
貢, 葛毅, 玉井浩訳「ハッカーのたのしみ―本物のプログラマはいかにして問
題を解くか」
にあるコードの例も、ほとんどは、Cで書いてあります。
とんこうさん、
> アセンブラの勉強をする時にビット操作もやるはずです。
古市(takechi)さんのメール
--- ここから ---
さて、22日のhot corner、binary hackの話題のときに、「ホワイトマジック」
「ブラックマジック」として、例にXOR3連発を挙げていらっしゃいましたが、
その他にもこの手のネタは豊富にあるんでしょうか? こういうのを集めた書籍
なんて面白そうだと思い、メール差し上げた次第です。
--- ここまで ---
「ハッカーのたのしみ」にあるのは、アセンブラの勉強ですぐわかる程度の
ビット操作じゃないんです。
どうして、こんなのを思いつくのか、実際に詳しい解説をされてコードをみ
てもなお、なんで動くんだろうと思うようなテクニックが満載。
和田先生やガイ・スティール・ジュニアが本書を絶賛というオビがついてま
すけど、目次がアマゾンの紹介にはないので、探したら、
http://www.bk1.co.jp/product/2482678/review/377386
にありますね。これで雰囲気をつかんでください。
ガイ・スティールは、アメリカの誇るベスト&ブライテストの一人。
Common Lispとともに広く使われているSchemeの設計・開発者の一人だし、
Javaの設計者の一人でもあります。
Common Lispの仕様をまとめた人物でもあり、初代ハッカーズディスクショ
ナリの編纂など、自分がハッカーであるだけではなく、ハッカーの仕事をまと
めて後世に伝える重要な仕事もしてきた人。いまは、SunでFORTRANを葬り去る?
新しい言語Fortressを研究しています。
http://research.sun.com/people/mybio.php?uid=25706
や
http://en.wikipedia.org/wiki/Fortress_programming_language
Fortress (programming language)
を参照。
和田英一先生は、いわずとしれた日本最初のハッカーであり、スーパーハッ
カー。昔のbitの別冊で日本の計算機の黎明期の話があって、和田先生は、自
己書き換えコードのエディタなど作ったりしてたんですね。いまから50年前の
当時の計算機って、パラメトロン計算機ですよ。何か知らない人は、勝手にグ
グってください。
と思ってググったら、和田先生のウェブページに行きました。\(^O^)/
http://www.iijlab.net/~ew/index-j.html
にPC-1ってあるでしょ。それが東大で作ったパラメトロン計算機。1語が18ビ
ットで、メモリがたったの512語。1語16ビットの現代に置き換えると、512語
(word) = 1024バイト。そういう世界で和田先生はプログラミングをやってた
わけですね。
いまの30歳以下の計算機やソフト屋は知らない世界だと思うけど、ひょっ
として40歳以下でも知らないかな。おれも文献でしか知らないんだけど、
http://www.iijlab.net/~ew/pc1/pc1.1.pdf
はPC-1のハードウェアがどういうものがわかる解説。
昔の人はすごいね。何もないところからこういうもの作るんだもの。割りだ
しという言葉も懐かしいし、PC-1は世界初のマルチプログラミングをやった計
算機だったかもしれないんですね。
俗にいうIT企業でPerlやRubyでCGIばかり作ってる人とか、ネットワークの
お守りばかりやっててつまんない人は、こういうの読むとリフレッシュされる
んじゃないかな。
「ないなら作る」。これと「何でも面白がる」。これがハッカーの精神で一
番重要なことでしょうね。
あ、そうそう、ハッカーのためのキーボード。Happy Hacking Keyboardの設
計も和田先生ですね。これもないなら自分で作るの精神ですね。
「ハッカーのたのしみ」にある和田先生の序文から少し。どういう本か雰囲
気つかめるかな。
--- ここから ---
当時はもちろんマシン語であった。以下の例はC言語だが、例えばasciiコー
ドの0から9、aからfを入力し、対応する16進数を出力する関数は、(0から9の
コードは48から57、aからfのコードは97から102なので)常識的には、
c2n(x)
{ return x-(x&64?87:48); }
と書くであろう。しかし私は、
c2n(x)
{ return x%87%48; }
と書きたい。(%は剰余をとる演算)実はこういう精神が本書に漲(みなぎ)って
いるのである。
--- ここまで ---
以下、和田先生が本書で注目したテクニックの感想をいくつか述べてらっし
ゃるのですが、おれも知ってるのがあった。
--- ここから ---
32ビットの語が32個の32×32の行列がある。これを転置したビット列を作る
には、n=0,1,2,3,4について、2^n×2^n(中村注:2^nは2のn乗の意味。本では
ちゃんと2の右肩にnがある)の行列を要素とする2×2の行列を全ビット領域で
絨毯爆撃よろしくそれぞれ転置する。ビットマップの回転もそうやったっけ。
[7-3節の項「32×32のビット行列の転置」]
--- ここまで ---
そうです。和田先生。ビットマップの回転もそうやるんです。この話、和田
先生ご自身が、bitでいつかお書きになってたと思います。
ぼくがそれを知ったのは、もう廃刊になりましたがアメリカの有名なパソコ
ン雑誌BYTEの中でも特別の価値をもつ「BYTE 1981年8月号」。この号は、
Smalltalk大特集号だったんです。
SmalltalkはそれまでXeroxのPARC(パロアルト研究所)のベールに包まれてい
て、詳細がわからなかった。ところが、この号で世界にその全貌が公開された
んです。それで、世界中の研究者がこの号を入手したというほどの号です。
ぼくもこれが九大工学部情報工学科の学科図書館にあるのを知って、借りて
読みました。
Smalltalkは、ハードソフト一体のマシンでしたから、ハードからソフトま
でいろんな記事が載っていたんですが、その中にSmalltalkマシンのビットマ
ップディスプレイの解説記事がありました。そこにビットマップの回転の説明
があり、そこでこのアルゴリズムの紹介があったんです。
記事には、ミッキーマウスのビットマップを左か右に90度回転させる連続
写真があって、写真が載っていたこともあって、視覚的にもわかりやすく、途
中ぐちゃぐちゃになったミッキーの絵が、最後はちゃんと横倒しになるので、
すごい不思議なマジックをみせられた気になりました。
余談だけど、ビットマップ処理といえば、BitBlt(ビットブリット)という演
算を使います。Windowsにもあって、実装は、スタック上に処理コードを展開
して、どの演算を使うかのコードを埋めて処理する自己書き換えコードだった
と思います。スタック上にコードを展開するのは、昔と違って、プログラム領
域の書き換えは、プロセッサとOSが監視していて禁止しているからで、スタッ
クならそれが可能ということですね。
とんこうさん。
>XORを使ったものにグレイコードがありますね。交番コードとも言います。
本書にもグレイコードが出てきます。次の数になったときの変化が1ビット
だけなので、センサの世界ではよく使われるんですってね。
http://www.i.h.kyoto-u.ac.jp/~tsuiki/bit/gray.html
立木秀樹「グレイコードと実数」
をみると、実数のグレイコード展開なんてのもあるんですね。
いやあ、ビットの世界は深いわ。
実は、本書「ハッカーのたのしみ」で一番、こいつらどういう頭しとるんじ
ゃと思ったのが、第12章の「数の表現のための一風変わった基数」。
-2進数なんてのが最初に出てきて、どういう世界だこれはと思うのですが、
さらに驚くのは、-1+i進数の世界。つまり複素数進数の世界もあるんです。\(^O^)/
1940年にはベル研で、複素数計算器が作られていたのも驚くし、4進虚数な
んてもあって、なんじゃそりゃ。そこらのハードSFよりすごいな。
「事実は小説よりワイキキなり」(Copyrigt (c) 中村正三郎)。\(^O^)/
---
やっと暇ができたので、
http://iiyu.asablo.jp/blog/2006/12/22/1041912
バイナリ・プログラミング、バイナリ・ハック
のコメントにまとめて返事です。
笑われ者さん
>でもビット操作も低レベルかっていえばスクリプト言語でもサポートしてい
るし微妙
リスト操作しかないと誤解している人が多いCommon Lispでも、ビット演算
はありますからね。
生のマシンに近いという意味で低抽象度というほうがいいのかな。
紹介した
http://www.amazon.co.jp/exec/obidos/ASIN/4434046683/showshotcorne-22/ref=nosim
ジュニア,ヘンリー・S. ウォーレン著, 滝沢徹, 赤池英夫, 藤波順久, 鈴木
貢, 葛毅, 玉井浩訳「ハッカーのたのしみ―本物のプログラマはいかにして問
題を解くか」
にあるコードの例も、ほとんどは、Cで書いてあります。
とんこうさん、
> アセンブラの勉強をする時にビット操作もやるはずです。
古市(takechi)さんのメール
--- ここから ---
さて、22日のhot corner、binary hackの話題のときに、「ホワイトマジック」
「ブラックマジック」として、例にXOR3連発を挙げていらっしゃいましたが、
その他にもこの手のネタは豊富にあるんでしょうか? こういうのを集めた書籍
なんて面白そうだと思い、メール差し上げた次第です。
--- ここまで ---
「ハッカーのたのしみ」にあるのは、アセンブラの勉強ですぐわかる程度の
ビット操作じゃないんです。
どうして、こんなのを思いつくのか、実際に詳しい解説をされてコードをみ
てもなお、なんで動くんだろうと思うようなテクニックが満載。
和田先生やガイ・スティール・ジュニアが本書を絶賛というオビがついてま
すけど、目次がアマゾンの紹介にはないので、探したら、
http://www.bk1.co.jp/product/2482678/review/377386
にありますね。これで雰囲気をつかんでください。
ガイ・スティールは、アメリカの誇るベスト&ブライテストの一人。
Common Lispとともに広く使われているSchemeの設計・開発者の一人だし、
Javaの設計者の一人でもあります。
Common Lispの仕様をまとめた人物でもあり、初代ハッカーズディスクショ
ナリの編纂など、自分がハッカーであるだけではなく、ハッカーの仕事をまと
めて後世に伝える重要な仕事もしてきた人。いまは、SunでFORTRANを葬り去る?
新しい言語Fortressを研究しています。
http://research.sun.com/people/mybio.php?uid=25706
や
http://en.wikipedia.org/wiki/Fortress_programming_language
Fortress (programming language)
を参照。
和田英一先生は、いわずとしれた日本最初のハッカーであり、スーパーハッ
カー。昔のbitの別冊で日本の計算機の黎明期の話があって、和田先生は、自
己書き換えコードのエディタなど作ったりしてたんですね。いまから50年前の
当時の計算機って、パラメトロン計算機ですよ。何か知らない人は、勝手にグ
グってください。
と思ってググったら、和田先生のウェブページに行きました。\(^O^)/
http://www.iijlab.net/~ew/index-j.html
にPC-1ってあるでしょ。それが東大で作ったパラメトロン計算機。1語が18ビ
ットで、メモリがたったの512語。1語16ビットの現代に置き換えると、512語
(word) = 1024バイト。そういう世界で和田先生はプログラミングをやってた
わけですね。
いまの30歳以下の計算機やソフト屋は知らない世界だと思うけど、ひょっ
として40歳以下でも知らないかな。おれも文献でしか知らないんだけど、
http://www.iijlab.net/~ew/pc1/pc1.1.pdf
はPC-1のハードウェアがどういうものがわかる解説。
昔の人はすごいね。何もないところからこういうもの作るんだもの。割りだ
しという言葉も懐かしいし、PC-1は世界初のマルチプログラミングをやった計
算機だったかもしれないんですね。
俗にいうIT企業でPerlやRubyでCGIばかり作ってる人とか、ネットワークの
お守りばかりやっててつまんない人は、こういうの読むとリフレッシュされる
んじゃないかな。
「ないなら作る」。これと「何でも面白がる」。これがハッカーの精神で一
番重要なことでしょうね。
あ、そうそう、ハッカーのためのキーボード。Happy Hacking Keyboardの設
計も和田先生ですね。これもないなら自分で作るの精神ですね。
「ハッカーのたのしみ」にある和田先生の序文から少し。どういう本か雰囲
気つかめるかな。
--- ここから ---
当時はもちろんマシン語であった。以下の例はC言語だが、例えばasciiコー
ドの0から9、aからfを入力し、対応する16進数を出力する関数は、(0から9の
コードは48から57、aからfのコードは97から102なので)常識的には、
c2n(x)
{ return x-(x&64?87:48); }
と書くであろう。しかし私は、
c2n(x)
{ return x%87%48; }
と書きたい。(%は剰余をとる演算)実はこういう精神が本書に漲(みなぎ)って
いるのである。
--- ここまで ---
以下、和田先生が本書で注目したテクニックの感想をいくつか述べてらっし
ゃるのですが、おれも知ってるのがあった。
--- ここから ---
32ビットの語が32個の32×32の行列がある。これを転置したビット列を作る
には、n=0,1,2,3,4について、2^n×2^n(中村注:2^nは2のn乗の意味。本では
ちゃんと2の右肩にnがある)の行列を要素とする2×2の行列を全ビット領域で
絨毯爆撃よろしくそれぞれ転置する。ビットマップの回転もそうやったっけ。
[7-3節の項「32×32のビット行列の転置」]
--- ここまで ---
そうです。和田先生。ビットマップの回転もそうやるんです。この話、和田
先生ご自身が、bitでいつかお書きになってたと思います。
ぼくがそれを知ったのは、もう廃刊になりましたがアメリカの有名なパソコ
ン雑誌BYTEの中でも特別の価値をもつ「BYTE 1981年8月号」。この号は、
Smalltalk大特集号だったんです。
SmalltalkはそれまでXeroxのPARC(パロアルト研究所)のベールに包まれてい
て、詳細がわからなかった。ところが、この号で世界にその全貌が公開された
んです。それで、世界中の研究者がこの号を入手したというほどの号です。
ぼくもこれが九大工学部情報工学科の学科図書館にあるのを知って、借りて
読みました。
Smalltalkは、ハードソフト一体のマシンでしたから、ハードからソフトま
でいろんな記事が載っていたんですが、その中にSmalltalkマシンのビットマ
ップディスプレイの解説記事がありました。そこにビットマップの回転の説明
があり、そこでこのアルゴリズムの紹介があったんです。
記事には、ミッキーマウスのビットマップを左か右に90度回転させる連続
写真があって、写真が載っていたこともあって、視覚的にもわかりやすく、途
中ぐちゃぐちゃになったミッキーの絵が、最後はちゃんと横倒しになるので、
すごい不思議なマジックをみせられた気になりました。
余談だけど、ビットマップ処理といえば、BitBlt(ビットブリット)という演
算を使います。Windowsにもあって、実装は、スタック上に処理コードを展開
して、どの演算を使うかのコードを埋めて処理する自己書き換えコードだった
と思います。スタック上にコードを展開するのは、昔と違って、プログラム領
域の書き換えは、プロセッサとOSが監視していて禁止しているからで、スタッ
クならそれが可能ということですね。
とんこうさん。
>XORを使ったものにグレイコードがありますね。交番コードとも言います。
本書にもグレイコードが出てきます。次の数になったときの変化が1ビット
だけなので、センサの世界ではよく使われるんですってね。
http://www.i.h.kyoto-u.ac.jp/~tsuiki/bit/gray.html
立木秀樹「グレイコードと実数」
をみると、実数のグレイコード展開なんてのもあるんですね。
いやあ、ビットの世界は深いわ。
実は、本書「ハッカーのたのしみ」で一番、こいつらどういう頭しとるんじ
ゃと思ったのが、第12章の「数の表現のための一風変わった基数」。
-2進数なんてのが最初に出てきて、どういう世界だこれはと思うのですが、
さらに驚くのは、-1+i進数の世界。つまり複素数進数の世界もあるんです。\(^O^)/
1940年にはベル研で、複素数計算器が作られていたのも驚くし、4進虚数な
んてもあって、なんじゃそりゃ。そこらのハードSFよりすごいな。
「事実は小説よりワイキキなり」(Copyrigt (c) 中村正三郎)。\(^O^)/
コメント
トラックバック
_ ホットコーナーの舞台裏 - 2009年07月16日 05時33分56秒
ASAHIネット(http://www.asahi-net.or.jp)のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
マーヴィン・ミンスキーの新刊が出てますね。
http://www.amazon.co.
---
マーヴィン・ミンスキーの新刊が出てますね。
http://www.amazon.co.

コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。
※投稿には管理者が設定した質問に答える必要があります。