第8回オープンソーステクノロジー勉強会 −開催のご報告−
2006年10月24日(火)、国際大学グローコムにて、第8回「オープンソーステクノロジー勉強会」が開催され、約80名の方にお越しいただきました。
第一部では、鵜飼 文敏氏にご講演いただき、
(発表資料は
こちら)。
第二部ではグリー株式会社の澤 智明から、GREEにおけるモバイルウェブサービスの開発についてお話をさせていただきました。
(発表資料は
こちら)。
また、懇親会も前回同様盛況となりました。ご参加いただいた皆様、誠にありがとうございました。
来月の勉強会は、12月上旬を予定しております。近日ご案内を掲示いたしますので、ぜひとも奮ってご参加ください。
講演資料(1) 「プログラムがmain()にたどりつくまで」
- BINARY HACKS のなかから1ハック
- プログラムがmainにたどりつくまで
- CodeReading:基本ソフトウェアのコードを読み解く
- Binary Hacks:基本ソフトウェアの隠された機能を調べる
- 性能
- 信頼性
- プログラムがmainにたどりつくまで
- Hello, World
- helloプログラムを実行するとmain()から処理が行われる
- shellがプロセスを生成してhelloを実行開始してmain()にくるまで。この行間を読む
- Linuxのプロセス実行
- シェルが文字解析
- fork(2)して新しいプロセスを作る
- リダイレクト等の前処理
- exec(2)でhelloプログラムにかわる
- helloのmainから
- execve
- 呼び出し
- 実行ファイルをメモリーにロード
- エントリーぽいんとから
- 実行ファイル
- faleコマンドを使用する
- ELF
- LSB
- 実行ファイル
$ readelf -h -l hello
- fileはELFヘッダの内容をみて
- 実行ファイル:Program Header
- 資料参照
- OS、カーネルはProgramHeaderをみてメモリのマッピングを行う
- オブジェクトファイルでは
- 実行できるとか、書き込みができるとか
- 実行ファイル
$ objdump -f -p hello
- 共有ライブラリ
% ldd hello
- lddをつかうとどの共有ライブラリを使用してるかわかる
- execve呼び出し
- glibc sysdeps/unix/sysv/linux
- INLINE_SYSCALL
- glibc
sysdeps/unix/sysv/linux/i386
- マクロのくせに可変長引数をつかってるのがポイント
- 式を評価する
- builtin_expect gccが所有、ifの中に入るほうがよくあるのか、入らないほうがよくあるのか
- IFが成立しないほうがするっといくため
- glibc
- INTERNAL_SYSCALL
- glibc
sysdeps/unix/sysv/linux/i386/sysdep.h
- asm文
- ASMFMT
- execve呼び出し
- movl <envp>,%edx
- int ユーザーモードから遷移
- system call
- 0x80
- boot時に system_callラベルにジャンプ
- SYMBOL_NAME
- call_tabel eaxの4倍のアドレスを呼び出す
- sys_execve
- struct pt_regs レジスタの名前と同じメンバーがあり、参照
- ポインタの整合性チェック
- execve呼び出し
- glibc sysdeps/unix/sysv/linux
- INLINE_SYSCALL
- glibc
sysdeps/unix/sysv/linux/i386
- マクロのくせに可変長引数をつかってるのがポイント
- 式を評価する
- builtin_expect gccが所有、ifの中に入るほうがよくあるのか、入らないほうがよくあるのか
- IFが成立しないほうがするっといくため
- glibc
- INTERNAL_SYSCALL
- glibc
sysdeps/unix/sysv/linux/i386/sysdep.h
- asm文
- ASMFMT
- execve呼び出し
- movl <envp>,%edx
- int ユーザーモードから遷移
- system call
- 0x80
- boot時に system_callラベルにジャンプ
- SYMBOL_NAME
- call_tabel eaxの4倍のアドレスを呼び出す
- sys_execve
- struct pt_regs レジスタの名前と同じメンバーがあり、参照
- ポインタの整合性チェック
- do_execveを実行して戻り値を返す
- search_binary_handler 一番適合するバイナリフォーマットはどれかを探す
- search_binary_handler
- load_binary関数のポインタを返してくるので、適宜試す
- linux_binfmt
- 何番目かというのを覚えておかなくてもstructの指定をできる
- load_elf_binary
- 指定したファイルの先頭を呼び出し
- ELFのヘッダとして読み込む
- ELFMAGと一致するかためし、だめなら次のフォーマットへ
- プログラムヘッダを読み込む
- load_elf_binary
- PT_INTERPを探して一致すればとってくる
- これのオフセットでリードしてくる
- open_execしてできればOK
- ELF program header
- バイナリのくせにインタープリター
% objdump -p hello % od -t x1z -j 0x114 -N 0x13 hello
- バイナリのくせにインタープリター
- load_elf_binary
- 前のプロセスを忘れて、新しいプロセスが動作する
- メモリにマップ(対応づけているだけ)
- メモリにアクセスしにいったときにはじめてReadされる
- プログラムセグメント単位にどういうプロテクションがかかるか決まってくる
- ELFのLOAD
- 資料参考
- 左側
- 右側どのぐらいのファイルで、どのぐらいのサイズになるか
- 青の部分が同じメモリで…
- 緑の部分が実際に読み書きできないけど…
- カーネルが適宜メモリを割り当てて、…
- のこりがヒープとかにあたる
- DYNAMIC グローバルアクセプトテープとか、その辺
- load_elf_binary
- load_elf_interpで読み出してきて、インタープリタ自体もメモリに呼び出してきて
- start_thread
- ユーザプロセスに戻るときにどうするか
- return from system call
- ユーザ空間にもどってきて…
- ELFインタプリタの実行
- RTLD_START ELFインタプリタのエントリポイント
- dl_start()
- ElfV Cのプログラムです
- ちょっとした初期設定をして
- dlmain を呼び出して、どこがスタートアドレスかを調べる
- dl_main()
- 環境変数
- LD_PRELOAD
- LD_LIBRARY_PATH
- LD_DEBUG
- LD_DEBUG
% LD_DEBUG=help
- 共有ライブラリを探してくるときにどういうパスを探してるのか
- どのオブジェクトのどの関数を
- これを使うと一目瞭然!
- /lib/ld-2.3.6.so
- エグゼキュータブルの中にある・・・
- list:lddとほぼ同じ動作をする
- LD_TRAC・・・ 環境変数一番下のに1をいれて実行
- 共有オブジェクトのロード
- /がはいってるか、入ってないかで動作が違うので注意
- あるかどうかをチェックしてから、ロード(じゃないと重たくなるから)
- DT_NEEDED
- 必要としてる他のオブジェクトがかいてあるので、適宜マップ
- relocation
- あるバイナリファイルをメモリ上にもってきたときに常に同じアドレスになるとは限らないので、そのあたりを処理してくれる
- DYNAMIC_DO_REL どうとぶかを制御
- 3つめ以降を外への
- PLTとGOT
- call で相対アドレス取得
- PLTのところには、GOTへのアドレスへのジャンプ
- レゾルバにジャンプして
- どの
- エントリー
- 本来とぶべきものに書き換えて・・・
- リゾルブ処理は行わずいきなりジャンプ(一番最初が遅い)
- LD_BIND_NOW=1で起動時間はかかるが最初にマッピングできる
- ELFバイナリのエントリ
- Helloのエントリーにいくが、
- _startにきてここにオブジェクトが・・・?
- cout.
- 相対アドレスを絶対アドレスに書き換え
- __libc_start_main
- argv,argcをプッシュしてmainのアドレスがプッシュされる
- fin 終了時に実行するもの
- initがあると、ここで実行してくれる(mainが実行される前)
- initが終わるとmainが実行されreturnされる
- まとめ
- kernel
- ELF interpreter(ユーザ空間)
- binaryエントリー
- 来月発売!
- 11月21、22?日にGPL V3カンファレンスが秋葉原で開催
- 各国のえらい人がフリーソフトウェアのライセンスについて
講演資料(2) 「モバイルWebサービス開発@GREE」
- アジェンダ
- 自己紹介
- などなど
- 自己紹介
- 資料参考
- 最近のモバイル事情@GREE
- 実は色々リリースしています
- 女の子向けモバイルサイト「ZiZi」
- 実は色々リリースしています
- ZiZi
- 女性専用サービス
- Q&A、読者モデル日記
- GREEとしての初の今時
- 基盤2週間、アプリ2週間
- GREE Q&A
- 開発期間1週間
- デザインリニューアル
- いまどきのデザインにかわりました
- ZiZiなどのノウハウを横展開
- それらを支えた開発基盤
- UI
- システム
- ウェブデザインパターン
- デザインパターンのような確立したものではなく
- デザパタ
- PCだけでなくモバイルの方にも適用
- marquree きらきら文字が流れる
- list-builder image,title,textがセット
- 各パターン毎にwikiへ
- デザパタ
- タイトルのような単純な部品もパターン化
- もっと見る
- 絵文字とかまで決めれると、開発者は迷うことなくできる
- 各種規定
- これらすべてをwikiへまとめてある
- 調査ヒアリング
- モバイルとPCは利用実態が違うので調査が必要
- 生のこえ! 女子高生に!
- システム編
- 基盤
- OS等はPCと同じで学習コストなし
- Ethnaフル活用
- 基盤
- frontendとserviceで分離
- serviceがビジネスロジック
- frontendがView、Controller
- serviceを増やすことで、横連携が可能
- XHTML対応
- PHPのmbstringが動作せず、文字コードを変換してくれない
- 弊社、小泉が修正
- このドキュメントを参考にするか、いずれ本体にコミットしますよ
- Smarty
- モバイルサービス最大の難点のひとつ
- キャリア毎のhtml記述が必要
- カスタムタグ化することで
- (ex)画像の回りこみこみとか、
{gree_block class="warning"} ←デザパタと合致
- 絵文字
- 入力フィルタと出力フィルタで対応
- 入力フィルタ
- 資料参考
- キャリア用の絵文字で保存
- 出力フィルタ
- 共通絵文字コードに一度変換してから出力
- 入力でやっちゃうと仕様変更があるとまずいから
- その他ライブラリ
- IPフィルタ
- エミュを教えてください
- まとめ
- 資料参考
- モバイルに特化したサービスでないと、女子高生とかにつかってもらえないよね
- モバイル特有の問題を解決できたら新サービスの開発は驚くこと簡単で楽しい
- ビジネスチャンス的にもおもしろい
- 今後
- Selenium自動テスト
- 共通の基盤、ルール作りのさらなる推進
- モバイルSEOとかもやろう!
- 分離しているのは物理的?
- ディレクトリです。将来的に
- 絵文字がすばらしい。公開の予定は?
- 検討しますw
- Smartyで独自タグいれるとデザイナーが大変では?
- エンジニアの手でつくれてしまう
- wikiをベースにしてコミュニケーション
- デザイナーさんのレベルも高いってこと?w
- 1週間でリリースはすごいけどドキュメントは?
- 開発が終わった段階でドキュメント化しました
- キャリア対応は?
- 3G携帯とそれ以外についてはタグで出しわけ
- テンプレートは1つで管理(なるべくカスタムタグで対応)
- SEOは?
- GREEではこれからです
- MSN Yahoo Geogleでアクセスフィルタをあけてますよ
- DocomoとかのUAだったらOKみたいな対応してますよ



