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.
_ ホットコーナーの舞台裏 - 2012年04月27日 07時54分11秒
ASAHIネット(http://asahi-net.jp )のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
実践活用編」
こんな本が出ている。
http://www.amazon.co.jp/exec/obidos/A
---
実践活用編」
こんな本が出ている。
http://www.amazon.co.jp/exec/obidos/A
_ ホットコーナーの舞台裏 - 2014年02月17日 10時42分38秒
ASAHIネット(http://asahi-net.jp )のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
お買い上げありがとうございます。
http://www.amazon.co.jp/exec/obidos/ASIN
---
お買い上げありがとうございます。
http://www.amazon.co.jp/exec/obidos/ASIN
_ ホットコーナーの舞台裏 - 2014年05月15日 10時47分25秒
ASAHIネット(http://asahi-net.jp )のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
和田英一先生(日本のコンピュータ黎明期からのハッカー、日本初の
---
和田英一先生(日本のコンピュータ黎明期からのハッカー、日本初の
_ ホットコーナーの舞台裏 - 2014年05月23日 10時17分45秒
ASAHIネット(http://asahi-net.jp )のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
お買い上げありがとうございます。
http://www.amazon.co.jp/exec/obidos/ASIN
---
お買い上げありがとうございます。
http://www.amazon.co.jp/exec/obidos/ASIN
_ ホットコーナーの舞台裏 - 2014年07月16日 10時45分06秒
ASAHIネット(http://asahi-net.jp )のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
これ、だいぶ前に読んでブログに書いたと思っていたが、途中でや
---
これ、だいぶ前に読んでブログに書いたと思っていたが、途中でや
_ ホットコーナーの舞台裏 - 2014年08月12日 10時38分40秒
ASAHIネット(http://asahi-net.jp )のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
パラメトロンに反応しました。\(^O^)/
リンクのみ。
https://twitte
---
パラメトロンに反応しました。\(^O^)/
リンクのみ。
https://twitte
_ ホットコーナーの舞台裏 - 2015年11月18日 10時49分46秒
ASAHIネット(http://asahi-net.jp )のjouwa/salonからホットコーナー(http://www.asahi-net.or.jp/~ki4s-nkmr/ )に転載したものから。
---
お買い上げありがとうございます。
珍しい。著者は、韓国の人た
---
お買い上げありがとうございます。
珍しい。著者は、韓国の人た
_ ホットコーナー - 2016年03月31日 11時05分46秒
ASAHIネット(http://asahi-net.jp )のjouwa/salonから。
---
日本最古のハッカー、もちろん、Lispハッカーでもある和田英一先生のツイートから、至言、金言を。
https://twitter.com/eiitiwada/status/7150
---
日本最古のハッカー、もちろん、Lispハッカーでもある和田英一先生のツイートから、至言、金言を。
https://twitter.com/eiitiwada/status/7150
_ ホットコーナー - 2016年05月24日 11時13分12秒
ASAHIネット(http://asahi-net.jp )のjouwa/salonから。
---
お買い上げありがとうございます。
名著の誉れ高い「ディジタル回路設計とコンピュータアーキテクチャ」のARM版ですね。
ぼく
---
お買い上げありがとうございます。
名著の誉れ高い「ディジタル回路設計とコンピュータアーキテクチャ」のARM版ですね。
ぼく
_ ホットコーナー - 2019年08月22日 02時52分57秒
ASAHIネット(http://asahi-net.jp )のブログサービス、アサブロ(https://asahi-net.jp/asablo/ )を使っています。
---
https://twitter.com/shownakamura/status/1145742434971729920
--- ここから ---
これ、今のHappy Hacking K
---
https://twitter.com/shownakamura/status/1145742434971729920
--- ここから ---
これ、今のHappy Hacking K
_ ホットコーナー - 2022年02月01日 11時23分07秒
ASAHIネット(http://asahi-net.jp )のブログサービス、アサブロ(https://asahi-net.jp/asablo/ )を使っています。
---
ウェブのフロントエンド技術者になったものの、基本的なデータ構造やアルゴリ
---
ウェブのフロントエンド技術者になったものの、基本的なデータ構造やアルゴリ
_ ホットコーナー - 2022年06月18日 15時33分59秒
ASAHIネット(http://asahi-net.jp )のブログサービス、アサブロ(https://asahi-net.jp/asablo/ )を使っています。
---
ツイートしたけど、勘違いがあったので訂正ツイートもした。
https://twitter.com/show
---
ツイートしたけど、勘違いがあったので訂正ツイートもした。
https://twitter.com/show
コメントをどうぞ
※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。
※なお、送られたコメントはブログの管理者が確認するまで公開されません。
※投稿には管理者が設定した質問に答える必要があります。