『ソードアート・オンライン』
映画もやるようですね。近い将来SAOのようなゲームシステムができたら、私は完全に引きこもりになるかもしれません。今はちゃんと会社行ってますが、平日は自宅との往復のみ、土日は自分を自宅に幽閉してるので半引きこもりです。ゲームの中で仕事ができる時代が来るのが本当に待ち遠しいです。そうですねえ、職業はアーチャー(弓矢使い)が良いでしょう。バーチャルな世界の中なので、安全ではあるのですが、さらにその中でも、より安全なアーチャーがいいです。こちらは相手を攻撃できるけども、相手はこちらを攻撃できません。容姿も変えられるので、美しいエルフとかになってみたいです。
ゲームといえども仕事になると、大変かもしれません。ああ、いろいろ考えたら、ゲームの中でもストレスはついてきそうです。敵は攻撃してこないけども、上司は怒ってくるに違いありません。でも、怒られそうになったら、ログアウトで避難すればいいので、心配要りませんね。
readelfっでELFファイルを読んでみましょう。まずは、-hでヘッダから。
takk@deb83:~$ readelf -h a.out ELF ヘッダ: マジック: 7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00 クラス: ELF32 データ: 2 の補数、リトルエンディアン バージョン: 1 (current) OS/ABI: UNIX - System V ABI バージョン: 0 型: EXEC (実行可能ファイル) マシン: Intel 80386 バージョン: 0x1 エントリポイントアドレス: 0x8048300 プログラムの開始ヘッダ: 52 (バイト) セクションヘッダ始点: 10128 (バイト) フラグ: 0x0 このヘッダのサイズ: 52 (バイト) プログラムヘッダサイズ: 32 (バイト) プログラムヘッダ数: 8 セクションヘッダ: 40 (バイト) セクションヘッダサイズ: 35 セクションヘッダ文字列表索引: 32 takk@deb83:~$
-sでシンボルが表示されます。
takk@deb83:~$ readelf -s a.out シンボルテーブル '.dynsym' は 5 個のエントリから構成されています: 番号: 値 サイズ タイプ Bind Vis 索引名 0: 00000000 0 NOTYPE LOCAL DEFAULT UND 1: 00000000 0 FUNC GLOBAL DEFAULT UND printf@GLIBC_2.0 (2) 2: 00000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ 3: 00000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@GLIBC_2.0 (2) 4: 080493ac 4 OBJECT GLOBAL DEFAULT 15 _IO_stdin_used シンボルテーブル '.symtab' は 84 個のエントリから構成されています: 番号: 値 サイズ タイプ Bind Vis 索引名 0: 00000000 0 NOTYPE LOCAL DEFAULT UND 1: 08048134 0 SECTION LOCAL DEFAULT 1 2: 08048148 0 SECTION LOCAL DEFAULT 2 3: 08048168 0 SECTION LOCAL DEFAULT 3 4: 0804818c 0 SECTION LOCAL DEFAULT 4 5: 080481ac 0 SECTION LOCAL DEFAULT 5 6: 080481fc 0 SECTION LOCAL DEFAULT 6 7: 08048248 0 SECTION LOCAL DEFAULT 7 8: 08048254 0 SECTION LOCAL DEFAULT 8 9: 08048274 0 SECTION LOCAL DEFAULT 9 10: 0804827c 0 SECTION LOCAL DEFAULT 10 11: 08048294 0 SECTION LOCAL DEFAULT 11 12: 080482c0 0 SECTION LOCAL DEFAULT 12 13: 08048300 0 SECTION LOCAL DEFAULT 13 14: 08049394 0 SECTION LOCAL DEFAULT 14 15: 080493a8 0 SECTION LOCAL DEFAULT 15 16: 080493c0 0 SECTION LOCAL DEFAULT 16 17: 0804943c 0 SECTION LOCAL DEFAULT 17 18: 0804a634 0 SECTION LOCAL DEFAULT 18 19: 0804a638 0 SECTION LOCAL DEFAULT 19 20: 0804a63c 0 SECTION LOCAL DEFAULT 20 21: 0804a640 0 SECTION LOCAL DEFAULT 21 22: 0804a728 0 SECTION LOCAL DEFAULT 22 23: 0804a72c 0 SECTION LOCAL DEFAULT 23 24: 0804a744 0 SECTION LOCAL DEFAULT 24 25: 0804a74c 0 SECTION LOCAL DEFAULT 25 26: 00000000 0 SECTION LOCAL DEFAULT 26 27: 00000000 0 SECTION LOCAL DEFAULT 27 28: 00000000 0 SECTION LOCAL DEFAULT 28 29: 00000000 0 SECTION LOCAL DEFAULT 29 30: 00000000 0 SECTION LOCAL DEFAULT 30 31: 00000000 0 SECTION LOCAL DEFAULT 31 32: 00000000 0 FILE LOCAL DEFAULT ABS crtstuff.c 33: 0804a63c 0 OBJECT LOCAL DEFAULT 20 __JCR_LIST__ 34: 08048340 0 FUNC LOCAL DEFAULT 13 deregister_tm_clones 35: 08048370 0 FUNC LOCAL DEFAULT 13 register_tm_clones 36: 080483b0 0 FUNC LOCAL DEFAULT 13 __do_global_dtors_aux 37: 0804a74c 1 OBJECT LOCAL DEFAULT 25 completed.6279 38: 0804a638 0 OBJECT LOCAL DEFAULT 19 __do_global_dtors_aux_fin 39: 080483d0 0 FUNC LOCAL DEFAULT 13 frame_dummy 40: 0804a634 0 OBJECT LOCAL DEFAULT 18 __frame_dummy_init_array_ 41: 00000000 0 FILE LOCAL DEFAULT ABS hello.c 42: 00000000 0 FILE LOCAL DEFAULT ABS crtstuff.c 43: 08049630 0 OBJECT LOCAL DEFAULT 17 __FRAME_END__ 44: 0804a63c 0 OBJECT LOCAL DEFAULT 20 __JCR_END__ 45: 00000000 0 FILE LOCAL DEFAULT ABS 46: 0804a638 0 NOTYPE LOCAL DEFAULT 18 __init_array_end 47: 0804a640 0 OBJECT LOCAL DEFAULT 21 _DYNAMIC 48: 0804a634 0 NOTYPE LOCAL DEFAULT 18 __init_array_start 49: 0804a72c 0 OBJECT LOCAL DEFAULT 23 _GLOBAL_OFFSET_TABLE_ 50: 08049390 2 FUNC GLOBAL DEFAULT 13 __libc_csu_fini 51: 0804907c 47 FUNC GLOBAL DEFAULT 13 clcd_print 52: 00000000 0 NOTYPE WEAK DEFAULT UND _ITM_deregisterTMCloneTab 53: 08048330 4 FUNC GLOBAL HIDDEN 13 __x86.get_pc_thunk.bx 54: 0804a744 0 NOTYPE WEAK DEFAULT 24 data_start 55: 00000000 0 FUNC GLOBAL DEFAULT UND printf@@GLIBC_2.0 56: 0804a74c 0 NOTYPE GLOBAL DEFAULT 24 _edata 57: 0804912c 80 FUNC GLOBAL DEFAULT 13 get_clock_string 58: 08049394 0 FUNC GLOBAL DEFAULT 14 _fini 59: 08048881 2043 FUNC GLOBAL DEFAULT 13 clcd_init 60: 0804a744 0 NOTYPE GLOBAL DEFAULT 24 __data_start 61: 0804878b 246 FUNC GLOBAL DEFAULT 13 write_data 62: 080490ab 129 FUNC GLOBAL DEFAULT 13 to_string 63: 00000000 0 NOTYPE WEAK DEFAULT UND __gmon_start__ 64: 0804a748 0 OBJECT GLOBAL HIDDEN 24 __dso_handle 65: 08048416 27 FUNC GLOBAL DEFAULT 13 _delay_ms 66: 080493ac 4 OBJECT GLOBAL DEFAULT 15 _IO_stdin_used 67: 08048552 268 FUNC GLOBAL DEFAULT 13 display_clear 68: 080483fb 27 FUNC GLOBAL DEFAULT 13 _delay_us 69: 08048431 289 FUNC GLOBAL DEFAULT 13 display_onoff 70: 00000000 0 FUNC GLOBAL DEFAULT UND __libc_start_main@@GLIBC_ 71: 0804865e 301 FUNC GLOBAL DEFAULT 13 entry_mode_set 72: 0804a74d 1 OBJECT GLOBAL DEFAULT 25 PORTB 73: 08049320 97 FUNC GLOBAL DEFAULT 13 __libc_csu_init 74: 0804a750 0 NOTYPE GLOBAL DEFAULT 25 _end 75: 08048300 0 FUNC GLOBAL DEFAULT 13 _start 76: 080493a8 4 OBJECT GLOBAL DEFAULT 15 _fp_hw 77: 0804a74e 1 OBJECT GLOBAL DEFAULT 25 DDRB 78: 0804a74c 0 NOTYPE GLOBAL DEFAULT 25 __bss_start 79: 0804917c 410 FUNC GLOBAL DEFAULT 13 main 80: 00000000 0 NOTYPE WEAK DEFAULT UND _Jv_RegisterClasses 81: 0804a74c 0 OBJECT GLOBAL HIDDEN 24 __TMC_END__ 82: 00000000 0 NOTYPE WEAK DEFAULT UND _ITM_registerTMCloneTable 83: 08048294 0 FUNC GLOBAL DEFAULT 11 _init takk@deb83:~$
関数一覧を抽出するには、FUNCでフィルタリングすれば良いです。
takk@deb83:~$ readelf -s a.out | awk '/FUNC/{print $8}' printf@GLIBC_2.0 __libc_start_main@GLIBC_2.0 deregister_tm_clones register_tm_clones __do_global_dtors_aux frame_dummy __libc_csu_fini clcd_print __x86.get_pc_thunk.bx printf@@GLIBC_2.0 get_clock_string _fini clcd_init write_data to_string _delay_ms display_clear _delay_us display_onoff __libc_start_main@@GLIBC_ entry_mode_set __libc_csu_init _start main _init takk@deb83:~$
コメント