72
続・ 続・ ハロー・ワールド ハロー・ワールド 入門 入門 坂井弘亮 坂井弘亮 (KOZOSプロジェクト) (KOZOSプロジェクト) TwitterID:kozossakai TwitterID:kozossakai

坂井弘亮 - kozos.jp

  • Upload
    others

  • View
    6

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 坂井弘亮 - kozos.jp

続・続・ハロー・ワールドハロー・ワールド

入門入門坂井弘亮坂井弘亮(KOZOSプロジェクト)(KOZOSプロジェクト)TwitterID:kozossakaiTwitterID:kozossakai

Page 2: 坂井弘亮 - kozos.jp

毎年恒例毎年恒例

Page 3: 坂井弘亮 - kozos.jp

バイナリカレンダーバイナリカレンダーありますあります

Page 4: 坂井弘亮 - kozos.jp

バイナリカレンダーバイナリカレンダーとは何かとは何か

Page 5: 坂井弘亮 - kozos.jp

(普通のカレンダー)(普通のカレンダー)風景や人物がテーマ風景や人物がテーマ

(バイナリカレンダー)(バイナリカレンダー)バイナリデータがテーマバイナリデータがテーマ

Page 6: 坂井弘亮 - kozos.jp

こんな感じですこんな感じです

Page 7: 坂井弘亮 - kozos.jp

(バイナリカレンダー2014) (バイナリカレンダー2014) (アーキテクチャカレンダー2015)(アーキテクチャカレンダー2015)

Page 8: 坂井弘亮 - kozos.jp

そして今年そして今年

Page 9: 坂井弘亮 - kozos.jp

乱数カレンダー乱数カレンダー

Page 10: 坂井弘亮 - kozos.jp

乱数カレンダー乱数カレンダーとは何かとは何か

Page 11: 坂井弘亮 - kozos.jp

乱数データをテーマとした 乱数データをテーマとした バイナリカレンダーの バイナリカレンダーの

一種です一種です

Page 12: 坂井弘亮 - kozos.jp

こんな感じですこんな感じです

Page 13: 坂井弘亮 - kozos.jp
Page 14: 坂井弘亮 - kozos.jp

乱数データの乱数データのダンプダンプ

Page 15: 坂井弘亮 - kozos.jp

日付は16進数と日付は16進数と2進数を併記2進数を併記(さすがにここは(さすがにここは乱数ではない)乱数ではない)

Page 16: 坂井弘亮 - kozos.jp

乱数一覧乱数一覧1月1月 /dev/urandom/dev/urandom 7月7月 bashの$RANDOMbashの$RANDOM

2月2月 rand()rand() 8月8月 PythonのPythonのrandom.randint()random.randint()

3月3月 ガウス分布ガウス分布 9月9月 random()random()

4月4月 旧rand()旧rand() 10月10月 NumpyのNumpyのrandom.randint()random.randint()

5月5月 M系列M系列 11月11月 Awkのrand()Awkのrand()

6月6月 Perlのrand()Perlのrand() 12月12月 openssl randopenssl rand

Page 17: 坂井弘亮 - kozos.jp

特徴的な月特徴的な月

Page 18: 坂井弘亮 - kozos.jp

4月4月(旧libcの(旧libcのrand()関数)rand()関数)

Page 19: 坂井弘亮 - kozos.jp

4月4月(旧libcの(旧libcのrand()関数)rand()関数)

パターンがパターンが規則的規則的

Page 20: 坂井弘亮 - kozos.jp

4月4月(旧libcの(旧libcのrand()関数)rand()関数)

パターンがパターンが規則的規則的

rv = rv * 1103515245 + 12345;rv = rv * 1103515245 + 12345;

Page 21: 坂井弘亮 - kozos.jp

他にも他にも

Page 22: 坂井弘亮 - kozos.jp

5月5月(M系列)(M系列)

Page 23: 坂井弘亮 - kozos.jp

5月5月(M系列)(M系列)

先頭に先頭にゼロデータのゼロデータの連続連続

Page 24: 坂井弘亮 - kozos.jp

5月5月(M系列)(M系列)

先頭に先頭にゼロデータのゼロデータの

連続連続

乱数の種を適切に選ばないと 乱数の種を適切に選ばないと 乱数性が低くなる 乱数性が低くなる

(この例では seed = 1)(この例では seed = 1)

Page 25: 坂井弘亮 - kozos.jp

前置き終わり前置き終わり

Page 26: 坂井弘亮 - kozos.jp

続・続・ハロー・ワールドハロー・ワールド

入門入門坂井弘亮坂井弘亮(KOZOSプロジェクト)(KOZOSプロジェクト)TwitterID:kozossakaiTwitterID:kozossakai

Page 27: 坂井弘亮 - kozos.jp

「ハロー・ワールド入門」 「ハロー・ワールド入門」 とは何かとは何か

Page 28: 坂井弘亮 - kozos.jp

1年前の1年前のOSC東京春のOSC東京春のLTでの発表LTでの発表

Page 29: 坂井弘亮 - kozos.jp

「ハロー・ワールド入門」「ハロー・ワールド入門」

Page 30: 坂井弘亮 - kozos.jp

C言語の入門時に C言語の入門時に 必ずと言っていいほど書く 必ずと言っていいほど書く

「ハロー・ワールド」「ハロー・ワールド」

Page 31: 坂井弘亮 - kozos.jp

こんなのですこんなのです

Page 32: 坂井弘亮 - kozos.jp

#include <stdio.h>#include <stdio.h>

int main()int main(){{ printf("Hello, World!\n"); printf("Hello, World!\n"); return 0; return 0;}}

Page 33: 坂井弘亮 - kozos.jp

実行結果実行結果

Page 34: 坂井弘亮 - kozos.jp

Hello, World!Hello, World!

Page 35: 坂井弘亮 - kozos.jp

単に 単に 「Hello, World!」 「Hello, World!」 と出力するだけの と出力するだけの

プログラムプログラム

Page 36: 坂井弘亮 - kozos.jp

たいていのプログラミング たいていのプログラミング 入門書はこれで始まる入門書はこれで始まる

Page 37: 坂井弘亮 - kozos.jp

これを徹底的に これを徹底的に 解析する,という話解析する,という話

Page 38: 坂井弘亮 - kozos.jp

1年前の1年前のOSC東京春のOSC東京春のLTで言ったことLTで言ったこと

Page 39: 坂井弘亮 - kozos.jp

マニアックな技術書を マニアックな技術書を 書くのはもう卒業だ!書くのはもう卒業だ!

今年は入門書を書くぞ!今年は入門書を書くぞ!

Page 40: 坂井弘亮 - kozos.jp

入門書と言えば入門書と言えばハロー・ワールドだろうハロー・ワールドだろう

Page 41: 坂井弘亮 - kozos.jp

じゃあハロー・ワールドだけに じゃあハロー・ワールドだけに ついて解説する本を書けば, ついて解説する本を書けば,

入門書の前に読むべき 入門書の前に読むべき スーパー入門書になるのでは?スーパー入門書になるのでは?

Page 42: 坂井弘亮 - kozos.jp

そして今年そして今年

Page 43: 坂井弘亮 - kozos.jp

続・続・ハロー・ワールドハロー・ワールド

入門入門坂井弘亮坂井弘亮(KOZOSプロジェクト)(KOZOSプロジェクト)TwitterID:kozossakaiTwitterID:kozossakai

Page 44: 坂井弘亮 - kozos.jp

そもそものそもそものきっかけきっかけ

Page 45: 坂井弘亮 - kozos.jp

こんなことをこんなことを言われたことが言われたことが

あるある

Page 46: 坂井弘亮 - kozos.jp

「ハロー・ワールド」について 「ハロー・ワールド」について レポートを書けという レポートを書けという

課題が出れば, 課題が出れば, 5枚でも6枚でも書ける! 5枚でも6枚でも書ける!

(要するにそれほど奥が深い)(要するにそれほど奥が深い)

Page 47: 坂井弘亮 - kozos.jp

これを聞いたときの これを聞いたときの 正直な感想正直な感想

Page 48: 坂井弘亮 - kozos.jp

いやいやいやいや無理でしょ無理でしょ

Page 49: 坂井弘亮 - kozos.jp

足りないでしょ足りないでしょ

Page 50: 坂井弘亮 - kozos.jp

50枚は必要でしょ50枚は必要でしょ

Page 51: 坂井弘亮 - kozos.jp

ということで ということで 書いてみた書いてみた

Page 52: 坂井弘亮 - kozos.jp

「ハロー "Hello, World"」「ハロー "Hello, World"」

Page 53: 坂井弘亮 - kozos.jp
Page 54: 坂井弘亮 - kozos.jp

(当初の予定)(当初の予定)

ハロー・ワールドについて ハロー・ワールドについて いろんな視点から説明した いろんな視点から説明した 150ページくらいの薄い本150ページくらいの薄い本

Page 55: 坂井弘亮 - kozos.jp

(できあがったもの)(できあがったもの)

ハロー・ワールドについて ハロー・ワールドについて 徹底的に解析した 徹底的に解析した 450ページくらいの450ページくらいの薄くない本(またか)薄くない本(またか)

Page 56: 坂井弘亮 - kozos.jp

注意注意

Page 57: 坂井弘亮 - kozos.jp

C言語によるハロー・ワールドC言語によるハロー・ワールドの入門ですの入門です

ハロー・ワールドによるC言語ハロー・ワールドによるC言語の入門ではありませんの入門ではありません

Page 58: 坂井弘亮 - kozos.jp

つまり つまり K&Rの前に読むべき K&Rの前に読むべき

スーパー入門書スーパー入門書

Page 59: 坂井弘亮 - kozos.jp

ハロー・ワールドの ハロー・ワールドの 入門書なので入門書なので

Page 60: 坂井弘亮 - kozos.jp

この本には この本には リスト1しか リスト1しか ありませんありません

Page 61: 坂井弘亮 - kozos.jp

利用しているOSS 利用しているOSS (たいへんありがたい)(たいへんありがたい)

Linuxカーネル glibc Linuxカーネル glibc FreeBSD Newlib FreeBSD Newlib

GDB GCC binutils GDB GCC binutils CentOSCentOS

Page 62: 坂井弘亮 - kozos.jp

内容内容

Page 63: 坂井弘亮 - kozos.jp

(第1章)(第1章)

CentOS環境でハロー・ワーCentOS環境でハロー・ワールドをビルドして 逆アセンブルドをビルドして 逆アセンブル結果や実行ファイルの解析ル結果や実行ファイルの解析

結果を眺めてみたりする結果を眺めてみたりする

Page 64: 坂井弘亮 - kozos.jp

(第2章)(第2章)

printf()の動作を知るためにprintf()の動作を知るためにデバッガで動的解析して シデバッガで動的解析して シ

ステムコールの呼出しまでをステムコールの呼出しまでを追う追う

Page 65: 坂井弘亮 - kozos.jp

(第3章)(第3章)

LinuxカーネルのソースコーLinuxカーネルのソースコードを読んで,Linuxのシステムドを読んで,Linuxのシステム

コール処理を探るコール処理を探る

Page 66: 坂井弘亮 - kozos.jp

(第4章)(第4章)

標準ライブラリのソースコー標準ライブラリのソースコードを読んでシステムコールのドを読んでシステムコールの呼出し処理を知る. ついでに呼出し処理を知る. ついでにビルドして動的解析で処理をビルドして動的解析で処理を

追う追う

Page 67: 坂井弘亮 - kozos.jp

(第5章)(第5章)

main()関数が呼ばれる前のmain()関数が呼ばれる前のスタートアップの処理と,スタートアップの処理と,main()関数から戻った後のmain()関数から戻った後の

終了処理を探る終了処理を探る

Page 68: 坂井弘亮 - kozos.jp

(第6章)(第6章)

標準ライブラリのソースコー標準ライブラリのソースコードを読んでprintf()の実装をドを読んでprintf()の実装を知る. FreeBSDやNewlibの知る. FreeBSDやNewlibの

実装も見てみる実装も見てみる

Page 69: 坂井弘亮 - kozos.jp

こんなのが延々と続く, こんなのが延々と続く, (自己評価で)最高に面白い本(自己評価で)最高に面白い本

Page 70: 坂井弘亮 - kozos.jp

他にも実行ファイル解析 他にも実行ファイル解析 共有ライブラリ 共有ライブラリ

最適化 最適化 可変長引数などの話もあり可変長引数などの話もあり

Page 71: 坂井弘亮 - kozos.jp

Linux/x86だけでなく Linux/x86だけでなく FreeBSDやARMなど FreeBSDやARMなど

他実装/アーキの話題もあり 他実装/アーキの話題もあり (このへんが特色)(このへんが特色)

Page 72: 坂井弘亮 - kozos.jp

どうもありがとうどうもありがとうございましたございました