« 次期オフィス設計担当に任命されました | メイン | IT技術業界の重言(じゅうげん) »

Binary2.0カンファレンス2005に行ってきました。

ふと自分の過去を振り返ってみると、人生で一番最初に触ったPCは富士通の「FM-TOWNS」というi386(16MHz)のマシンで、学生時代にx86のハンドアセンブルやコードチューニングにハマッていた時期がありました。そんな私にとってBinary 2.0カンファレンス2005はとても楽しめる内容でした。期待以上に楽しかったです。簡単にカンファレスの概要と感想をレポートします。

追記:まとめのページができたようです。


■ 1. Binary 2.0 時代の到来 - 高林哲

binary1keynote.jpg

satoru先生による基調講演。なぜ今さらバイナリなのか?

「Binary2.0は高度なWeb2.0サービスの構築に必要不可欠な技術」というのは表向きの説明で・・・
実は「Web2.0についていけない」のが本音。(w
今のうちに新しいバズワードを提唱して「既得権益を確保」しておこうという狙い。
つかみはOK。会場大爆笑の渦でした。

[発表資料]


■ 2. プログラムはなぜ Mona OS で動くか?fork?何それ? - ひげぽんさん

binary2mona.jpg

Mona OS とは?

2ch生まれのオープンソースOSで、カーネルはC++で書かれている。
ソースコードも5万行で、他OSよりも圧倒的に短い。オブジェクト指向万歳。
中身はマイクロカーネルっぽくって、バッファオーバーフローありありのノーガードOS。w

ユーザモードで各種サーバ(プロセスサーバ・PE or ELFサーバ・ファイルサーバ)が動作。
ユーザモードでできることはユーザモードで実装し、割り込みまでメッセージベースでやりとりしている。
Hello Worldでも一苦労、OSの中のひとは大変・・・という内容でした。

[発表資料]

Binary2.0 のはてなリングもあるので、興味のある方は是非参加してみてくださいとのこと。


■ 3. Dynamic Programming Language C -- 私は誰? - 浜地慎一郎さん

binary3shinh.jpg

SDLプレゼンテーションシステム(SPS)によるプレゼン。

嫌いなもの
- 似たコードの連続

解決方法
- スクリプトでコード生成
 ダサいよね
 生成してからコードを再編集するとイヤなことに
- C/C++のマクロ
 CppUnitとか
 少しマシになっただけ
そうだリフレクションだ
でもCには・・・リフレクションがない
 Javaを使う→(自分にとっては)論外www

道のり

* which $0
 私は誰?
 実行しているEXEを取得
 環境依存、#ifdefの嵐、バッドノウハウの山
 ライブラリ化したい(グッドラッパーを目指す)

* ldd
 ロードされているDLLを取得

* nm
 オブジェクトファイルを見てシンボルを取ってくる
 080xxxxxxx T bfd_make_readable とか

* libbfdで関数アドレスを取得
 GNU binutilsのライブラリ
 オブジェクトファイルを読み書きできる
 多数の対応フォーマット

* c++filt
 C++のシンボルは読めない
 デマングル(w

* 取得した関数のcall
 関数のシグネチャが決まっていれば簡単
 わかっていない場合
 - libffi
  GCJで利用されている
  動的ディスパッチが可能
 - ffall
  GNUStepで利用されている

JavaやRubyなどと比較すると・・・
 可搬性にやや難
 わかりにくいエラーメッセージ(w
 言語に統合されていない
 構造体メンバが見れない

いいところ
 楽しい!

[活用事例]

しー言語(言語というよりかバッチに近い)
#!./she
puts "hello world!"
!load "m"
dx = cos 3.2
printf "%f" dx

Dynamic Test Runner
 .o ファイルをロード・再配置
 内部の dtr_test を含む関数をかたっぱしから実行

Ruby/C++ Ruby/D ちょっと作ってみた
 RubyからC++のクラスを直に、SWIGは面倒
 Objective-C++、Java & Groovy みたいに
 バインディング不要

[言いたかったこと]

コピペでコード書きたくない!(笑)

[発表資料]


■ 4. G-Inspector -- GTK+ ランタイムインスペクション - 青笹茂さん(順番入れ替え)

binary4ginspector.jpg

GTK+はメジャーな言語をサポート
 Ada、Eiffel、Haskell、SmallTalkって・・・(テラワロス

typedef、マクロ、データ構造、リスト、
バイナリツリー、イテレータ、
イベントループ、フレームワーク、抽象化したI/O

GObject
- GTK+の肝
- C言語でオブジェクト指向するためのフレームワーク

ここに実行バイナリがあります
 stripされてる
 ソースもない
そこで G-Inspector の登場!
- editresみたいなもの
- オブジェクト一覧
- 実行中にプロパティを変更
- ウィジェットツリーをシリアライズ(XMLとか)
- メモリ領域をダンプ

* ついでに GNU Autotools のクイックツアー

Autoconf/Automake/Libtool/pkg-config

個人的にはバッドなノウハウがとても一杯の感覚が抜けないんだけど、最近は

configure.ac
Makefile.am
{name}.pc

の3つのファイルを書くだけでいけるようになったらしい。
pkg-config は知らなかったので今度から使ってみよう。


■ 5. g++と例外キャッチボール - 中村孝史さん(順番入れ替え)

binary5dwrf2.jpg

スーツ族?クールビズです 地球にやさしいwoです

g++の例外処理を解明します
でも、キャッチボールはできません(www

gccで一番良く使うオプションは -S です(w

例外処理は何でできてる?
 unwind - 超return
 type_info - do_catch()メソッド

名前 mangling ルールを覚えて extern
(大爆笑

unwind-SjLj
unwind-dwarf2

DWRF2 デバッグ情報フォーマット
 いくつかのレジスタ
 オフセット、状態、CFA、リターンアドレス
 オフセット計算アドレス
 命令セット
→ 実はプログラミング言語?

余談:makefileでクイックソートとかも(すげー)

[発表資料]


■ 6. 実行時自己書き換え佳境 - 首藤一幸さん

binary6corewars.jpg

Core Wars知ってますか?(私ははじめて知りました)

マルチスレッドなプログラム
 実行の流れ(スレッド)が複数あって、メモリ空間を共有する。
 これってリアル Core Wars ですか?

なんで自己書き換えなんかするの?
- HotSpot VM (SunのJava仮想マシン)
 アプリのスレッドを任意の箇所で停止させるために、
 ソフトウェア割り込み命令を上書きする。
 後で元のコードを書き戻す。
 ガベージコレクションやOn-stack replacementが目的。
- IBMのJava仮想マシン (by IBM東京基礎研)
 バッドなノウハウ満載
- shuJIT (x86用 Java JITコンパイラ)
 クラスの初期化
 インスタンス生成時の諸チェック
 Interface実行時のチェック・・・

Core Wars のテクニックを利用して:
   nop
   nop
   初回実行時のみの処理
   nop を jump done に書き換え
done:

x86でプログラムカウンタを読む小技

他のスレッドを妨害しないために
Atomicに書き換える
 x86だとXCHG命令など
ロック
 モニタ、セマフォ
 一時停止

 EB FE をアトミックに書き込む
 他のスレッドはループして待機

[発表資料]


■ 7. ハードコアバイナリアンへの道 - 八重樫剛史さん

binary7hardcore.jpg

[下には下がいる]

ユーザランド C/C++/Java/Perl/...
カーネル Assenmbly/C/C++
--------------------------------
ハードウェア VHDL/VerilogHDL
半導体プロセス ???

ゲート、プリップフロップ
バイナリを生で扱う
I/O(実世界)と直接つながっている

ハードウェア記述言語(HDL)で回路を書く

実際にFPGAボードのVGA出力でプレゼンテーション。
しかも世界初のリモートGDBプレゼン(テラスゴス
→ これにはぶったまげました。ハードコアバイナリアン第一号に認定します。w

[発表資料]


■ 8. ライトニングトーク

binary8lightningtalk.jpg

ここから一人5分間の怒涛の Lightning Talk が開始(時間厳守です)


■ 8-1. Binareal - バイナリファイルの構造と解釈 - 大和正武さん

binary81binareal.jpg

Etherealにインスパイアされて開発を始めたBinarealの紹介
構造改革前と後(うまいなぁ)
バイナリデータを可視化するためのツール


■ 8-2. いけないお化粧magic(5) - 野首貴嗣 5分

binary82magic.jpg

Flashでプレゼン
magicでファイル判定
 M$ Office と OpenOffice.org
 Namazu と Sary(一部自虐ネタ)
トリビアの紹介などなど
期待以上の内容でとても面白かったです。w

[発表資料]


■ 8-3. livepatch - 概念と技法 - 鵜飼文敏さん

binary83livepatch.jpg

実行中のプロセスにパッチをあてる(CGLの要求仕様のひとつ)
- Pannusプロジェクト
- livepatch

ptrace(2) - 黒魔術のシステムコール
MDFライブラリ

[発表資料]


■ 8-4. 斜め下を行くバイナリ書き換えの探求 - 後藤正徳さん

binary84binedit.jpg

Linuxに数行のスペシャルパッチを適用すると・・・
実行時バイナリをバイナリエディタで直接書き換えが可能に!w
アイデア勝負ですね。

[発表資料]


■ 8-5. Cache Pollution Aware Patch - よしおかひろたかさん

binary85cache.jpg

Miracle Linux の中のひと。

CPUの速度向上(+50%/年)
メモリの速度向上(+7%/年)

L1 < L2 < メモリ

ユーザ空間からのコピー
copy_from_user_ll()
をチューニングすると早くなる

カーネル読書会やってます

[発表資料]


■ 8-6. Inside QEMU - BEROさん

binary86qemu.jpg

QEMU
 複数のターゲット、ホストに対応したエミュレータ
Cによる移植性の高いJITコンパイルをどうやって実現しているか?
 TARGET CPUの命令をC言語の関数で実装したものをコンパイル&リンク
→惜しくも時間切れ・・・

[発表資料]


■ 8-7. GNP --- 'g' Network Protocol-Stack (for Boot Loader) - g新部裕さん

binary87gnp.jpg

m32r-g00ffに実装したプロトコルスタックの話のはずだったけど・・・
Binary 2.0カンファレンスのドレスコードは「ブラックandホワイト」だったらしい(w
しかもバイナリアンだったら指折りは2進法で数を数えますよね?って(www


次回は「Binary 2.0 カンファレンス MaxHeart」と改名して、ドレスコードは「ブラックandホワイト」に新しく「ピンク」を加えてみましょう。:-)


それでは、みなさん、Happy hacking!

トラックバック

この一覧は、次のエントリーを参照しています: Binary2.0カンファレンス2005に行ってきました。:

» Binary 2.0で発表。 from 未来のいつか/hyoshiokの日記
大盛況である。100名を越す参加者。うーん、すごい。IIJの会場がとってもりっぱでうらやましい。(カーネル読書会でもぜひお借りしたいところだ) ネタはCa... [詳しくはこちら]

» cybozu.nite 2.0 に行ってきた from 秋元@サイボウズ研究所プログラマーBlog
cybozu.nite 2.0 に行ってきた。新 cybozu.net 社のお... [詳しくはこちら]