ハチロク世代開発合宿 二日目
- 「どんだけ『上野氏』書いてんですか」(上野氏)
$ otool -tv /usr/lib/libSystem.dylib | grep "sysenter"
__sysenter_trap:
00001237 sysenter
- int80? 割り込みをかけるとレジスタの中身が退避されてカーネルに処理が渡るわけなのだけど、いちいち全部保管して終わった後に全部復元するのでパフォーマンスが悪い。sysenterを使うと退避しなくなるので自前で必要なものだけスタックに入れて必要なものだけ復元するというのができる。
- 「コミットしてから寝てくださいよー。どうしたらいいんだ俺」(上野氏)
$ cat > hoge.c void main(char* argv){ printf("Hello!"); } $ gcc hoge.c $ otool -tv a.out a.out: (__TEXT,__text) section start: 00001f74 pushl $0x00 00001f76 movl %esp,%ebp 00001f78 andl $0xf0,%esp 00001f7b subl $0x10,%esp 00001f7e movl 0x04(%ebp),%ebx 00001f81 movl %ebx,0x00(%esp) 00001f85 leal 0x08(%ebp),%ecx 00001f88 movl %ecx,0x04(%esp) 00001f8c addl $0x01,%ebx 00001f8f shll $0x02,%ebx 00001f92 addl %ecx,%ebx 00001f94 movl %ebx,0x08(%esp) 00001f98 movl (%ebx),%eax 00001f9a addl $0x04,%ebx 00001f9d testl %eax,%eax 00001f9f jne 0x00001f98 00001fa1 movl %ebx,0x0c(%esp) 00001fa5 calll 0x00001fd6 00001faa movl %eax,0x00(%esp) 00001fae calll 0x00003000 00001fb3 hlt dyld_stub_binding_helper: 00001fb4 calll 0x00001fb9 00001fb9 popl %eax 00001fba pushl 0x00000057(%eax) 00001fc0 movl 0x0000005b(%eax),%eax 00001fc6 jmp *%eax __dyld_func_lookup: 00001fc8 calll 0x00001fcd 00001fcd popl %eax 00001fce movl 0x0000004b(%eax),%eax 00001fd4 jmp *%eax _main: 00001fd6 pushl %ebp 00001fd7 movl %esp,%ebp 00001fd9 pushl %ebx 00001fda subl $0x14,%esp 00001fdd calll 0x00001fe2 00001fe2 popl %ebx 00001fe3 leal 0x00000015(%ebx),%eax 00001fe9 movl %eax,(%esp) 00001fec calll 0x00003005 00001ff1 addl $0x14,%esp 00001ff4 popl %ebx 00001ff5 leave 00001ff6 ret
うーん?そもそも"Hello"ってリテラルがないぞ?"Hello"って文字列とかprintfへの参照とかはどこか別のところに定数テーブルかなにかで持っているのかなぁ。
- 10:56 子プロセスの標準出力をウォッチして、特定のパターンの文字列が現れたら指定された音を鳴らす、ってところまでできた。合宿にありがちな突発的プロジェクトは終了。ActionScriptの続きに戻る。
- otoolの-tはテキストセクション、-dはデータセクションを表示するオプション
- objdumpがない
- hexdump -C a.outしてみたらちゃんと入っていた
- strings a.outしたらちゃんととれた。
- 入ってはいるけどotoolでうまくとれていないだけらしい。何かオプションが違うのかなぁ。
- MacでダウンロードしたソフトがZipで、解凍したら実行可能そうなファイルが1個だけはいっていた場合とか、Windowsの癖で「これはインストーラだ」と思って起動してしまっていたんだけど大概それはインストーラではない。Cmd+Nして新しいFinderを開いてApplicationsにコピーする。
- ファインダの各ウィンドウのタイトルバーへパスを表示する - yes > /dev/null
- killall Finderするとデスクトップのアイコンも消えるんだな。透明なウィンドウが一番下にあるというわけか。
- タイトルバーにPOSIXパスが表示されるようになったけど、これはコピペできないんだな。Windowsの場合、Explorerのお気に入りとWSHでブックマークレット的なことができるのだけど、MacでFinderを拡張したいと思ったらどうしたらいいのかな。
- Gimp2.2.11いれる
- 「西尾泰和」偽名説
- お祭りに遭遇
- 昼御飯のためなくなく帰宅する
- あまちゃんが寝てるので昼御飯が一個余っている。置いといていいのかな?
- via @KKI_ Mach-O入門 実践編 http://d.hatena.ne.jp/mteramoto/20070121/p2
$ otool -s __TEXT __cstring -v a.out a.out: Contents of (__TEXT,__cstring) section 00001ff7 Hello!
- おお、あった。
- コンパクトデジカメでHDRするのより、大きくてちゃんとぼけるカメラを買う方がいい写真になるという結論になった。
- GIMP起動できない。エラーで死んだ。
Process: gimp-2.2 [89722]
Path: /Applications/Gimp.app/Contents/Resources/bin/gimp-2.2
Identifier: gimp-2.2
Version: ??? (???)
Code Type: X86 (Native)
Parent Process: Gimp [89702]Date/Time: 2008-04-05 16:43:03.940 +0900
OS Version: Mac OS X 10.5.2 (9C2015)
Report Version: 6Exception Type: EXC_BREAKPOINT (SIGTRAP)
Exception Codes: 0x0000000000000002, 0x0000000000000000
Crashed Thread: 0Dyld Error Message:
Library not loaded: /usr/X11/lib/libfontconfig.1.dylib
Referenced from: /usr/X11R6/lib/libXft.2.dylib
Reason: Incompatible library version: libXft.2.dylib requires version 3.0.0 or later, but libfontconfig.1.dylib provides version 2.0.0
Wii
ボーリングでもテニスでもhayamizに負けた。とりあえずロケットサーブを打たないと100%打てない位置に返ってくるし、「前衛であわてて打つとアウトになる位置」を狙って打ったりできるらしい。
- 86合宿のチャンネルで++とか--とか発言するとマリオが増えたり減ったりするときの音を出すボットを入れた。
- 誰が最初に状況を理解するかな、って言ってたらfaultierだった。faultier++。
- hayamizが状況を理解せずitkz音声を流すなどしている。hayamiz--。
- MacのTerminal.appはタブが作れて便利だが、タブの名前を変更できないのかな。どのタブがどれか忘れる。
- 86開発合宿チャットで発言すると音が鳴ることを理解したsotarokが++弾幕を貼ったため、iPod touchが壊れるなどした。
- 晩ご飯を食べるなどした。
- Macのコンソールでコピーをするコマンドはpbcopy。paste boardの略。
- 子プロセスの標準出力を読むプログラム、行単位で読んでいるので改行がくるたびにreadlineが完了することを期待しているわけだけども、プログラムが終了して標準出力が閉じられるまでブロックされるものとされないものがある。
- Rascutはloggerを使っているためうまく読めない
- loggerの出力の後にpをつけると、loggerの出力自体も読まれる。
- 出力をflushするものとしないもの、という説
- 表示されないPythonのスクリプトにstdout.flushを付け加えると表示されるようになる。
- 子プロセスにflushを促すとか、パイプの受け先が送り元にflushを促すとか、たぶん無理だと思う。
- 標準出力を見て特定のパターンが含まれていたら音を鳴らしたりgrowlしたりするスクリプトがあればRascutでの開発にも使えて便利だと思ったんだけどそうは甘くなかった。うむむ。とりあえずあきらめよう。
- crossdomain.xmlを吐いてくれるローカル用の手軽なサーバをweb.pyで作る流れ。
- Terminal.appのタブに表示される文字って変更できないのかな。
- 「OSのバグじゃん」(上野氏)
- 「Leopardのバグであって俺のバグではない」(上野氏)
http://www.adobe.com/crossdomain.xml
<cross-domain-policy> <allow-access-from domain="*.macromedia.com"/> <allow-access-from domain="*.adobe.com"/> </cross-domain-policy>
アドビは身内にしか許していない。
http://api.flickr.com/crossdomain.xml
<cross-domain-policy> <allow-access-from domain="*"/> </cross-domain-policy>
flickrは素通し。ただしapi.filckr.comっていうサブドメインにしてあるので、www.flickr.comのクッキーとかは見えないんだと思う。
- サーバとやり取り
- とりあえずやろうとしていたことの最初の一歩ができた。
- 本当はrascutでエラーになるとマリオの死んだ音がするってはずだったのだが(ぉ
- もう26時か。眠い。寝よう。