SlideShare a Scribd company logo
Binary2.0 Conference 2006 発表資料




さとう ゆうすけ <ads01002 @ nifty.com>
自己紹介
さとう ゆうすけ (d:id:yupo5656)

  ソフトウェア エンジニア

 Hello World愛好家


    Binary Hacks の執筆に参加

     主な担当ハック:
     #25 「glibcを使わないでHello Worldを書く」
自己紹介
    好きな休日の過ごし方

     コードを読む、書く
     読書
      ○ The Single UNIX Specification
      ○ ISO/IEC 9899:1999 (C)
      ○ ISO/IEC 14882:2003 (C++)
     SICPの問題をC++で解く
     Z80マイコン製作


     Hello World
自己紹介 + 本日の話のレベル
 user-space バイナリアン


         kernel-space バイナリアン




               リアルバイナリアン
本日の内容
  バイナリアンの分類

 Hello World愛好家の分類
 GCC拡張入門
 GCC拡張を使ったHello World 5連発
 まとめ



目標:
いつのまにかGCC拡張機能をマスター
Hello world 愛好家の分類


      GCC拡張すごいよ派


         ELF Golf派
1. ELF Golf派
  “Hello, world!” を出力する、世界最小最軽量

  のELFバイナリを追求
 深追い対象:
     ELFフォーマット
     ローダ(linux-2.6.xx/fs/binfmt_elf.c)
 会話例:

 「アリアリで58Bですか。それはすごい」
        アリアリ: Hello, World!
    
        アリナシ: Hello, World
    
        ナシアリ: Hello World!
    
        ナシナシ: Hello World
    
58B
2. GCC拡張すごいよ派 (私)
  本日のメインテーマ

 無駄に華麗なCのコードを追及
 GCC拡張機能を無意味に活用


  一見意味のわからないコード

 実はHello world
 [これはすごい] [これは便利] [lifehack]   1024 users




    実はELF Golfについていけないだけ

予習: GCC拡張入門
__attribute__((constructor))
void before_main(){
  puts(quot;mainの前に呼ばれるよquot;);
}
                 GCC拡張機能
int main(){ puts(quot;mainだよquot;); }
                                constructor
__attribute__((destructor))     destructor
void after_main(){
 puts(quot;mainの後に呼ばれるよquot;);          section
}
                                cleanup
ctor/dtor関数が呼ばれるしくみ                        (概要)



 _start()
     _libc_start_main()
         _do_global_ctors_aux()
             コンストラクタ関数1()
             …
         main()           libcが呼んでくれる!
                     exit()
                         _do_global_dtors_aux()
mainからreturnで
 戻った場合は、
                             デストラクタ関数1()
_libc_start_main()
                             …
  がexit()を呼ぶ
                         _exitシステムコール
本日のハローワールド 5種類

二度呼ばれるmain(によるハローワールド)

蹂躙されるmain

呼ばれるのに関数にしてもらえないmain

スルー力の高いmain

何もしないmain
二度呼ばれるmain

 蹂躙されるmain
 呼ばれるのに関数にしてもらえないmain
 スルー力の高いmain
 何もしないmain
(ネタ1/5) 二度呼ばれるmain
__attribute__((constructor)) int main() {
  static int i = 0;
  if (i) puts(quot;world!quot;);
  else i = printf(quot;hello, quot;);
}

mainの前に好きな関数を呼べる
じゃあ、mainの前にmainを呼ん
 でみるのはどう?
                     d:id:shinichiro_h:20060809より、一部改変
デモ
大切なお知らせ

 以降のネタにつきましては、出力がいつ
も同じであるため、デモを省略させてい
ただきます
main2度呼びのコールツリー
_start()
    _libc_start_main()
        _do_global_ctors_aux()
             main()
        main()
        exit()
  mainを二度呼んでも全く問題なし!

 どう見ても単なる関数です。本当に (ry
 次ネタ以降、偉そうなmainの地位をどんど
  ん危うくしていきますよ(main蹂躙芸)
二度呼ばれるmain

 蹂躙されるmain
 呼ばれるのに関数にしてもらえないmain
 スルー力の高いmain
 何もしないmain
(ネタ2/5)蹂躙されるmain
 __attribute__((constructor, destructor))
 void x(){
   static int i = 0;
   if (i) puts(quot;world!quot;);
   else i = printf(quot;hello, quot;), exit(0);
 }

 mainを(二度呼ぶどころか)一度も呼ばな
  いハローワールド
 constructor関数内でexit
コールツリー

_start()
    _libc_start_main()
        _do_global_ctors_aux()
            x() ←コンストラクタ
              exit()
                  _do_global_dtors_aux()
                    x() ←デストラクタ
                  _exitシステムコール
リンク失敗..
    (.text+0x18): undefined reference to `main„



  main関数がないと実行ファイルが作成でき

  ない
 どうせ呼ばれないのに…




[Q] カラのmain関数を書けばよいのでは?
[A] だが断る。
ソリューション: main変数
int main = 0;
__attribute__((constructor, destructor))
void x(){
  if (main) puts(quot;world!quot;);
  else main = printf(quot;hello, quot;), exit(0);
}

  リンカ的には関数も変数もただの「シンボル」

 「main変数」を書いとけばよい
 変数にしたからには働いてもらう!
     main様を、x()の動作を変えるためのフラグ扱い
コンパイル風景
% gcc iyana.c
iyana.c:5:warning: ’ main ’ is usually a function
% ./a.out
Hello, World!




  知ってます
二度呼ばれるmain

 蹂躙されるmain
 呼ばれるのに関数にしてもらえないmain
 スルー力の高いmain
 何もしないmain
(ネタ3/5)
呼ばれるのに関数にしてもらえないmain


 mainをフラグとしてのみ使うのは失礼。
 存在を無視しすぎ。ゆとり教育の弊害。

 ちゃんとmainを呼んであげる
呼ばれるのに関数にしてもらえないmain
main; // 変数(フラグ)兼 関数
__attribute__((constructor, destructor))
void x(){
  if (main) puts(quot;world!quot;);
  else printf(quot;hello, quot;), main = 195;
}

    exitする代わりに、mainに謎の数値を代入

     195 = 0xC3 = x86のRET命令
    このmain変数は「RET命令だけの関数」と

    同じ
                       d:id:shinichiro_h:20060829より、一部改変
コールツリー

_start()
    _libc_start_main()
        _do_global_ctors_aux()
            x() ←コンストラクタ, mainを195に
        main変数() ← 一瞬でRET
        exit()
            _do_global_dtors_aux()
              x() ←デストラクタ
            _exitシステムコール
実行
% ./a.out
Hello, World!
微妙に使いみちがあったりする
    データ実行許可(NXなし)環境

    % ./a.out
    hello, world!


    データ実行禁止(NXあり)環境

    % ./a.out
    zsh: segmentation fault   ./a.out


    /proc/sys/kernel/exec-shield を見るまでもなく

    OSの設定状況がわかる!(見たほうが早いけど)
二度呼ばれるmain

 蹂躙されるmain
 呼ばれるのに関数にしてもらえないmain
 スルー力の高いmain
 何もしないmain
(ネタ4/5)スルー力の高いmain
__attribute__((section(quot;.textquot;))) main = 2425393296;

_() {
  __attribute__((destructor)) _(){ puts(quot;world!quot;); }
  printf(quot;hello, quot;);
}

    今回はちゃんと(?) main変数から実行開始

     constructor関数なし
  関数名が _ だけなのは、Haskellへの対抗心

 関数の中に関数を書けるのもGCC拡張
     今回はオシャレで使っただけ、深い意味はなし
見やすく整形                             ELF実行ファイル
// 同じ動作をするコード
__attribute__((section(quot;.textquot;)))       .text/.plt
                                                         実行コード
int main = 0x90909090;                   section
                                                         (関数)

void f() { printf(quot;hello, quot;); }     .got/.ctors/.dtors
                                                         雑多な色々
                                          secion
                                            …
__attribute__((destructor))
void g() { puts(quot;world!quot;); }          .data section
                                                         グローバル
                                                         変数
                                      .bss section
     0x90 = NOP命令
 
     2425393296 = 0x90909090 = NOP命令4つ
 
     main変数のELF上の位置を変更 (.data → .text)
 
      ELFバイナリ上、関数fのすぐ上にmainが配置される
新概念: 関数フォールスルー

             • main変数
  NOP4つだけ    • エントリポイント


   Hello出力   • 関数f


             • 関数g
   World出力   • デストラクタ属性
実行
% ./a.out
Hello, World!
逆アセンブルするとわかりやすい
% objdump -D a.out -j .text
08048384 <main>:
                                                ① main変数実行開始
 8048384:       90                       nop
 8048385:       90                       nop
 8048386:       90                       nop
                                                            ② 関数fに
 8048387:       90                       nop
                                                            フォールスルー
                     隙間なし
08048388 <f>:
 8048388:       55                       push %ebp
 8048389:       89   e5                  mov   %esp,%ebp
 804838b:       83   ec 08               sub   $0x8,%esp
 804838e:       c7   04 24 80 84 04 08   movl $0x8048480,(%esp)
                                         call 80482b8 <printf@plt> ③ Hello   出力
 8048395:       e8   1e ff ff ff
 804839a:       c9                       leave
                                         ret ④ main変数からリターン
 804839b:       c3

0804839c <g>:
 804839c:       55                       push   %ebp
二度呼ばれるmain

 蹂躙されるmain
 呼ばれるのに関数にしてもらえないmain
 スルー力の高いmain
 何もしないmain
(ネタ5/5)何もしないmain
    自動変数にcleanup属性付与

     自動変数がスコープから外れたとき
     指定した1引数関数を呼べる
    関数には、その自動変数へのポインタが渡る


    脊髄反射的にハローワールドに応用


// 変数しかないように見えるが・・
int main() {
  __attribute__((cleanup(puts)))
    const char hoge[] = quot;hello, world!quot;;
}
解説
ソースコード
int main() {
  __attribute__((cleanup(puts)))
    const char hoge[] = quot;hello, world!quot;;
}

                                コンパイル

GCCが出力するコードのイメージ
int main() {
    const char hoge[] = quot;hello, world!quot;;
    puts(&hoge); // GCCが自動で追加
}
何もしないmain その2
(エキスパート・ハローワールダ向け)
main;
__attribute((constructor, destructor)) _() {
  if (main++) {
    __attribute((cleanup(puts))) char _[] = quot;world!quot;;
  } else {
    __attribute((cleanup(exit)))   int __;
    __attribute((cleanup(printf))) char _[] = quot;hello,quot;;
  }
}

   積極exit型main蹂躙スタイル
 
  _() → printf() → exit() → _() → puts()
応用: C言語でRAIIイディオム
  cleanup属性を使うと、CでC++のRAIIイディ

  オムの模倣が可能
 RAIIイディオムとは!

    // C++
    void bar() {
      scoped_lock lk(mutex);
      ...
               return; // ロック自動解放
      ...
      return; // ロック自動解放
    }
普通のCだと手動解放、超面倒
 // C
 void bar() {
   mutex_lock(mutex);
   ...
            mutex_unlock(mutex); // 手動解放
            return;
   ...
   mutex_unlock(mutex); // 手動解放
   return;
 }


もの作るってレベルじゃねーぞ!
GCCならラクラク
    ほぼC++相当、RAIIもどき

    マクロの中身は d:id:yupo5656:20060609

     GCCのcleanup属性を使ってます

    // GCC
    void bar() {
      SCOPED_LOCK(mutex);
      ...
               return; // ロック自動解放
      ...
      return; // ロック自動解放
    }
まとめ

GCCの拡張機能便利!



      ご清聴ありがとうございました
参考になる資料
     Binary Hacks (宣伝)
1.


     ELF: プログラマの視点から
2.
     http://www.globe.to/~oka326/archive/elf_doc_sgml_ja/elf_doc.html



     GCCのオンラインマニュアル
3.
      Function Attributes
       http://gcc.gnu.org/onlinedocs/gcc/Function-Attributes.html
      Variable Attributes
       http://gcc.gnu.org/onlinedocs/gcc/Variable-Attributes.html
b2con2006_sato

More Related Content

What's hot

小學國語文「教材分析」深層探究:語言、文學、文化導向的分析架構試擬96.7.06修訂
小學國語文「教材分析」深層探究:語言、文學、文化導向的分析架構試擬96.7.06修訂小學國語文「教材分析」深層探究:語言、文學、文化導向的分析架構試擬96.7.06修訂
小學國語文「教材分析」深層探究:語言、文學、文化導向的分析架構試擬96.7.06修訂winston2744
 
2009年4月8日セミナー 2.Sedue新機能
2009年4月8日セミナー 2.Sedue新機能2009年4月8日セミナー 2.Sedue新機能
2009年4月8日セミナー 2.Sedue新機能
Preferred Networks
 
Letron User Dialing Guide (Chinese)
Letron User Dialing Guide (Chinese)Letron User Dialing Guide (Chinese)
Letron User Dialing Guide (Chinese)Aiken Lin
 
Hr 029 軟體工程職涯規劃
Hr 029 軟體工程職涯規劃Hr 029 軟體工程職涯規劃
Hr 029 軟體工程職涯規劃handbook
 
第1985期
第1985期第1985期
第1985期1111csf
 
2009年4月8日セミナー 3.SSD向け全文検索エンジン
2009年4月8日セミナー 3.SSD向け全文検索エンジン2009年4月8日セミナー 3.SSD向け全文検索エンジン
2009年4月8日セミナー 3.SSD向け全文検索エンジン
Preferred Networks
 
結構化程式設計
結構化程式設計結構化程式設計
結構化程式設計
David Tang
 
2009年4月8日セミナー 4.レコメンデーション Q&A
2009年4月8日セミナー 4.レコメンデーション Q&A2009年4月8日セミナー 4.レコメンデーション Q&A
2009年4月8日セミナー 4.レコメンデーション Q&A
Preferred Networks
 
宛 課程
宛 課程宛 課程
宛 課程clinic
 
Project Facilitation From Hiranabe
Project Facilitation From HiranabeProject Facilitation From Hiranabe
Project Facilitation From Hiranabe
Yasui Tsutomu
 
sigfpai2009_okanohara
sigfpai2009_okanoharasigfpai2009_okanohara
sigfpai2009_okanoharaHiroshi Ono
 
個人知識管理達人 淺談提升個人效率的方法及規劃工具的使用
個人知識管理達人 淺談提升個人效率的方法及規劃工具的使用個人知識管理達人 淺談提升個人效率的方法及規劃工具的使用
個人知識管理達人 淺談提升個人效率的方法及規劃工具的使用勝輝 周
 
入門啟示錄 Ch03簡報
入門啟示錄 Ch03簡報入門啟示錄 Ch03簡報
入門啟示錄 Ch03簡報
Chiou WeiHao
 
5D Must Be Better Than 4D
5D Must Be Better Than 4D5D Must Be Better Than 4D
5D Must Be Better Than 4D
Taiheon Choi
 
Andoroid入門 Open
Andoroid入門  OpenAndoroid入門  Open
Andoroid入門 Open
cat sin
 
整合檔案1 簡報1
整合檔案1 簡報1整合檔案1 簡報1
整合檔案1 簡報1guestb2f9ad
 
eComing Club簡介200802
eComing Club簡介200802eComing Club簡介200802
eComing Club簡介200802Robin Chen
 
「レガシーコード」とはいったい?
「レガシーコード」とはいったい?「レガシーコード」とはいったい?
「レガシーコード」とはいったい?
Hiroyuki Ohnaka
 

What's hot (20)

小學國語文「教材分析」深層探究:語言、文學、文化導向的分析架構試擬96.7.06修訂
小學國語文「教材分析」深層探究:語言、文學、文化導向的分析架構試擬96.7.06修訂小學國語文「教材分析」深層探究:語言、文學、文化導向的分析架構試擬96.7.06修訂
小學國語文「教材分析」深層探究:語言、文學、文化導向的分析架構試擬96.7.06修訂
 
2009年4月8日セミナー 2.Sedue新機能
2009年4月8日セミナー 2.Sedue新機能2009年4月8日セミナー 2.Sedue新機能
2009年4月8日セミナー 2.Sedue新機能
 
Letron User Dialing Guide (Chinese)
Letron User Dialing Guide (Chinese)Letron User Dialing Guide (Chinese)
Letron User Dialing Guide (Chinese)
 
Hr 029 軟體工程職涯規劃
Hr 029 軟體工程職涯規劃Hr 029 軟體工程職涯規劃
Hr 029 軟體工程職涯規劃
 
第1985期
第1985期第1985期
第1985期
 
2009年4月8日セミナー 3.SSD向け全文検索エンジン
2009年4月8日セミナー 3.SSD向け全文検索エンジン2009年4月8日セミナー 3.SSD向け全文検索エンジン
2009年4月8日セミナー 3.SSD向け全文検索エンジン
 
結構化程式設計
結構化程式設計結構化程式設計
結構化程式設計
 
2009年4月8日セミナー 4.レコメンデーション Q&A
2009年4月8日セミナー 4.レコメンデーション Q&A2009年4月8日セミナー 4.レコメンデーション Q&A
2009年4月8日セミナー 4.レコメンデーション Q&A
 
宛 課程
宛 課程宛 課程
宛 課程
 
Project Facilitation From Hiranabe
Project Facilitation From HiranabeProject Facilitation From Hiranabe
Project Facilitation From Hiranabe
 
sigfpai2009_okanohara
sigfpai2009_okanoharasigfpai2009_okanohara
sigfpai2009_okanohara
 
個人知識管理達人 淺談提升個人效率的方法及規劃工具的使用
個人知識管理達人 淺談提升個人效率的方法及規劃工具的使用個人知識管理達人 淺談提升個人效率的方法及規劃工具的使用
個人知識管理達人 淺談提升個人效率的方法及規劃工具的使用
 
入門啟示錄 Ch03簡報
入門啟示錄 Ch03簡報入門啟示錄 Ch03簡報
入門啟示錄 Ch03簡報
 
5D Must Be Better Than 4D
5D Must Be Better Than 4D5D Must Be Better Than 4D
5D Must Be Better Than 4D
 
7
77
7
 
Ext Ncs 20081029
Ext Ncs 20081029Ext Ncs 20081029
Ext Ncs 20081029
 
Andoroid入門 Open
Andoroid入門  OpenAndoroid入門  Open
Andoroid入門 Open
 
整合檔案1 簡報1
整合檔案1 簡報1整合檔案1 簡報1
整合檔案1 簡報1
 
eComing Club簡介200802
eComing Club簡介200802eComing Club簡介200802
eComing Club簡介200802
 
「レガシーコード」とはいったい?
「レガシーコード」とはいったい?「レガシーコード」とはいったい?
「レガシーコード」とはいったい?
 

Viewers also liked

Sepotong Roti
Sepotong RotiSepotong Roti
Sepotong RotiCynthia D
 
Socil Networking Application
Socil Networking ApplicationSocil Networking Application
Socil Networking ApplicationS S Ram
 
Rodičovská kontrola vo Windows Vista
Rodičovská kontrola vo Windows VistaRodičovská kontrola vo Windows Vista
Rodičovská kontrola vo Windows Vista
Rastislav Turek
 
El Computador
El ComputadorEl Computador
El Computador
roiyury
 
Offer 12 02 09
Offer 12 02 09Offer 12 02 09
Offer 12 02 09
Con Archis
 
Ch 6 7 Silmarilliion
Ch 6 7 SilmarilliionCh 6 7 Silmarilliion
Ch 6 7 Silmarilliionguest679de6
 
Characterizing the Splogosphere
Characterizing the SplogosphereCharacterizing the Splogosphere
Characterizing the SplogosphereHiroshi Ono
 
A Scalable, Commodity Data Center Network Architecture
A Scalable, Commodity Data Center Network ArchitectureA Scalable, Commodity Data Center Network Architecture
A Scalable, Commodity Data Center Network ArchitectureHiroshi Ono
 
Elasticfox Owners Manual
Elasticfox Owners ManualElasticfox Owners Manual
Elasticfox Owners ManualHiroshi Ono
 
The Evolution of Internet-Scale Event Notification Services
The Evolution of Internet-Scale Event Notification ServicesThe Evolution of Internet-Scale Event Notification Services
The Evolution of Internet-Scale Event Notification ServicesHiroshi Ono
 
genpaxospublic-090703114743-phpapp01.pdf
genpaxospublic-090703114743-phpapp01.pdfgenpaxospublic-090703114743-phpapp01.pdf
genpaxospublic-090703114743-phpapp01.pdfHiroshi Ono
 
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdfstateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdfHiroshi Ono
 
kademlia-1227143905867010-8.pdf
kademlia-1227143905867010-8.pdfkademlia-1227143905867010-8.pdf
kademlia-1227143905867010-8.pdfHiroshi Ono
 
TwitterOct2008.pdf
TwitterOct2008.pdfTwitterOct2008.pdf
TwitterOct2008.pdfHiroshi Ono
 
nodalities_issue7.pdf
nodalities_issue7.pdfnodalities_issue7.pdf
nodalities_issue7.pdfHiroshi Ono
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdfHiroshi Ono
 
SACSIS2009_TCP.pdf
SACSIS2009_TCP.pdfSACSIS2009_TCP.pdf
SACSIS2009_TCP.pdfHiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfHiroshi Ono
 

Viewers also liked (20)

Sepotong Roti
Sepotong RotiSepotong Roti
Sepotong Roti
 
Socil Networking Application
Socil Networking ApplicationSocil Networking Application
Socil Networking Application
 
Rodičovská kontrola vo Windows Vista
Rodičovská kontrola vo Windows VistaRodičovská kontrola vo Windows Vista
Rodičovská kontrola vo Windows Vista
 
El Computador
El ComputadorEl Computador
El Computador
 
Ec502
Ec502Ec502
Ec502
 
Offer 12 02 09
Offer 12 02 09Offer 12 02 09
Offer 12 02 09
 
Ch 6 7 Silmarilliion
Ch 6 7 SilmarilliionCh 6 7 Silmarilliion
Ch 6 7 Silmarilliion
 
Characterizing the Splogosphere
Characterizing the SplogosphereCharacterizing the Splogosphere
Characterizing the Splogosphere
 
A Scalable, Commodity Data Center Network Architecture
A Scalable, Commodity Data Center Network ArchitectureA Scalable, Commodity Data Center Network Architecture
A Scalable, Commodity Data Center Network Architecture
 
Elasticfox Owners Manual
Elasticfox Owners ManualElasticfox Owners Manual
Elasticfox Owners Manual
 
The Evolution of Internet-Scale Event Notification Services
The Evolution of Internet-Scale Event Notification ServicesThe Evolution of Internet-Scale Event Notification Services
The Evolution of Internet-Scale Event Notification Services
 
genpaxospublic-090703114743-phpapp01.pdf
genpaxospublic-090703114743-phpapp01.pdfgenpaxospublic-090703114743-phpapp01.pdf
genpaxospublic-090703114743-phpapp01.pdf
 
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdfstateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
 
kademlia-1227143905867010-8.pdf
kademlia-1227143905867010-8.pdfkademlia-1227143905867010-8.pdf
kademlia-1227143905867010-8.pdf
 
TwitterOct2008.pdf
TwitterOct2008.pdfTwitterOct2008.pdf
TwitterOct2008.pdf
 
nodalities_issue7.pdf
nodalities_issue7.pdfnodalities_issue7.pdf
nodalities_issue7.pdf
 
camel-scala.pdf
camel-scala.pdfcamel-scala.pdf
camel-scala.pdf
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
 
SACSIS2009_TCP.pdf
SACSIS2009_TCP.pdfSACSIS2009_TCP.pdf
SACSIS2009_TCP.pdf
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
 

More from Hiroshi Ono

Voltdb - wikipedia
Voltdb - wikipediaVoltdb - wikipedia
Voltdb - wikipediaHiroshi Ono
 
Gamecenter概説
Gamecenter概説Gamecenter概説
Gamecenter概説Hiroshi Ono
 
EventDrivenArchitecture
EventDrivenArchitectureEventDrivenArchitecture
EventDrivenArchitectureHiroshi Ono
 
program_draft3.pdf
program_draft3.pdfprogram_draft3.pdf
program_draft3.pdfHiroshi Ono
 
nodalities_issue7.pdf
nodalities_issue7.pdfnodalities_issue7.pdf
nodalities_issue7.pdfHiroshi Ono
 
genpaxospublic-090703114743-phpapp01.pdf
genpaxospublic-090703114743-phpapp01.pdfgenpaxospublic-090703114743-phpapp01.pdf
genpaxospublic-090703114743-phpapp01.pdfHiroshi Ono
 
kademlia-1227143905867010-8.pdf
kademlia-1227143905867010-8.pdfkademlia-1227143905867010-8.pdf
kademlia-1227143905867010-8.pdfHiroshi Ono
 
downey08semaphores.pdf
downey08semaphores.pdfdowney08semaphores.pdf
downey08semaphores.pdfHiroshi Ono
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdfHiroshi Ono
 
TwitterOct2008.pdf
TwitterOct2008.pdfTwitterOct2008.pdf
TwitterOct2008.pdfHiroshi Ono
 
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdfstateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdfHiroshi Ono
 
SACSIS2009_TCP.pdf
SACSIS2009_TCP.pdfSACSIS2009_TCP.pdf
SACSIS2009_TCP.pdfHiroshi Ono
 
scalaliftoff2009.pdf
scalaliftoff2009.pdfscalaliftoff2009.pdf
scalaliftoff2009.pdfHiroshi Ono
 
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdfstateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdfHiroshi Ono
 
program_draft3.pdf
program_draft3.pdfprogram_draft3.pdf
program_draft3.pdfHiroshi Ono
 
nodalities_issue7.pdf
nodalities_issue7.pdfnodalities_issue7.pdf
nodalities_issue7.pdfHiroshi Ono
 
kademlia-1227143905867010-8.pdf
kademlia-1227143905867010-8.pdfkademlia-1227143905867010-8.pdf
kademlia-1227143905867010-8.pdfHiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfHiroshi Ono
 
downey08semaphores.pdf
downey08semaphores.pdfdowney08semaphores.pdf
downey08semaphores.pdfHiroshi Ono
 

More from Hiroshi Ono (20)

Voltdb - wikipedia
Voltdb - wikipediaVoltdb - wikipedia
Voltdb - wikipedia
 
Gamecenter概説
Gamecenter概説Gamecenter概説
Gamecenter概説
 
EventDrivenArchitecture
EventDrivenArchitectureEventDrivenArchitecture
EventDrivenArchitecture
 
program_draft3.pdf
program_draft3.pdfprogram_draft3.pdf
program_draft3.pdf
 
nodalities_issue7.pdf
nodalities_issue7.pdfnodalities_issue7.pdf
nodalities_issue7.pdf
 
genpaxospublic-090703114743-phpapp01.pdf
genpaxospublic-090703114743-phpapp01.pdfgenpaxospublic-090703114743-phpapp01.pdf
genpaxospublic-090703114743-phpapp01.pdf
 
kademlia-1227143905867010-8.pdf
kademlia-1227143905867010-8.pdfkademlia-1227143905867010-8.pdf
kademlia-1227143905867010-8.pdf
 
downey08semaphores.pdf
downey08semaphores.pdfdowney08semaphores.pdf
downey08semaphores.pdf
 
BOF1-Scala02.pdf
BOF1-Scala02.pdfBOF1-Scala02.pdf
BOF1-Scala02.pdf
 
TwitterOct2008.pdf
TwitterOct2008.pdfTwitterOct2008.pdf
TwitterOct2008.pdf
 
camel-scala.pdf
camel-scala.pdfcamel-scala.pdf
camel-scala.pdf
 
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdfstateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
 
SACSIS2009_TCP.pdf
SACSIS2009_TCP.pdfSACSIS2009_TCP.pdf
SACSIS2009_TCP.pdf
 
scalaliftoff2009.pdf
scalaliftoff2009.pdfscalaliftoff2009.pdf
scalaliftoff2009.pdf
 
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdfstateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
stateyouredoingitwrongjavaone2009-090617031310-phpapp02.pdf
 
program_draft3.pdf
program_draft3.pdfprogram_draft3.pdf
program_draft3.pdf
 
nodalities_issue7.pdf
nodalities_issue7.pdfnodalities_issue7.pdf
nodalities_issue7.pdf
 
kademlia-1227143905867010-8.pdf
kademlia-1227143905867010-8.pdfkademlia-1227143905867010-8.pdf
kademlia-1227143905867010-8.pdf
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
 
downey08semaphores.pdf
downey08semaphores.pdfdowney08semaphores.pdf
downey08semaphores.pdf
 

b2con2006_sato