O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
続・
ハロー・ワールド
入門
坂井弘亮
(KOZOSプロジェクト)
TwitterID:kozossakai
毎年恒例
バイナリカレンダー
あります
バイナリカレンダー
とは何か
(普通のカレンダー)
風景や人物がテーマ
(バイナリカレンダー)
バイナリデータがテーマ
こんな感じです
(バイナリカレンダー2014) (アーキテクチャカレンダー2015)
そして今年
乱数カレンダー
乱数カレンダー
とは何か
乱数データをテーマとした
バイナリカレンダーの
一種です
こんな感じです
乱数データの
ダンプ
日付は16進数と
2進数を併記
(さすがにここは
乱数ではない)
乱数一覧
1月 /dev/urandom 7月 bashの$RANDOM
2月 rand() 8月 Pythonの
random.randint()
3月 ガウス分布 9月 random()
4月 旧rand() 10月 Numpyの
rand...
特徴的な月
4月
(旧libcの
rand()関数)
4月
(旧libcの
rand()関数)
パターンが
規則的
4月
(旧libcの
rand()関数)
パターンが
規則的
rv = rv * 1103515245 + 12345;
他にも
5月
(M系列)
5月
(M系列)
先頭に
ゼロデータの
連続
5月
(M系列)
先頭に
ゼロデータの
連続
乱数の種を適切に選ばないと
乱数性が低くなる
(この例では seed = 1)
前置き終わり
続・
ハロー・ワールド
入門
坂井弘亮
(KOZOSプロジェクト)
TwitterID:kozossakai
「ハロー・ワールド入門」
とは何か
1年前の
OSC東京春の
LTでの発表
「ハロー・ワールド入門」
C言語の入門時に
必ずと言っていいほど書く
「ハロー・ワールド」
こんなのです
#include <stdio.h>
int main()
{
printf("Hello, World!n");
return 0;
}
実行結果
Hello, World!
単に
「Hello, World!」
と出力するだけの
プログラム
たいていのプログラミング
入門書はこれで始まる
これを徹底的に
解析する,という話
1年前の
OSC東京春の
LTで言ったこと
マニアックな技術書を
書くのはもう卒業だ!
今年は入門書を書くぞ!
入門書と言えば
ハロー・ワールドだろう
じゃあハロー・ワールドだけに
ついて解説する本を書けば,
入門書の前に読むべき
スーパー入門書になるのでは?
そして今年
続・
ハロー・ワールド
入門
坂井弘亮
(KOZOSプロジェクト)
TwitterID:kozossakai
そもそもの
きっかけ
こんなことを
言われたことが
ある
「ハロー・ワールド」について
レポートを書けという
課題が出れば,
5枚でも6枚でも書ける!
(要するにそれほど奥が深い)
これを聞いたときの
正直な感想
いやいや
無理でしょ
足りないでしょ
50枚は必要でしょ
ということで
書いてみた
「ハロー "Hello, World"」
(当初の予定)
ハロー・ワールドについて
いろんな視点から説明した
150ページくらいの薄い本
(できあがったもの)
ハロー・ワールドについて
徹底的に解析した
450ページくらいの
薄くない本(またか)
注意
C言語によるハロー・ワールド
の入門です
ハロー・ワールドによるC言語
の入門ではありません
つまり
K&Rの前に読むべき
スーパー入門書
ハロー・ワールドの
入門書なので
この本には
リスト1しか
ありません
利用しているOSS
(たいへんありがたい)
Linuxカーネル glibc
FreeBSD Newlib
GDB GCC binutils
CentOS
内容
(第1章)
CentOS環境でハロー・ワー
ルドをビルドして 逆アセンブ
ル結果や実行ファイルの解析
結果を眺めてみたりする
(第2章)
printf()の動作を知るために
デバッガで動的解析して シ
ステムコールの呼出しまでを
追う
(第3章)
Linuxカーネルのソースコー
ドを読んで,Linuxのシステム
コール処理を探る
(第4章)
標準ライブラリのソースコー
ドを読んでシステムコールの
呼出し処理を知る. ついでに
ビルドして動的解析で処理を
追う
(第5章)
main()関数が呼ばれる前の
スタートアップの処理と,
main()関数から戻った後の
終了処理を探る
(第6章)
標準ライブラリのソースコー
ドを読んでprintf()の実装を
知る. FreeBSDやNewlibの
実装も見てみる
こんなのが延々と続く,
(自己評価で)最高に面白い本
他にも実行ファイル解析
共有ライブラリ
最適化
可変長引数などの話もあり
Linux/x86だけでなく
FreeBSDやARMなど
他実装/アーキの話題もあり
(このへんが特色)
どうもありがとう
ございました
続・ハロー・ワールド入門(オープンソースカンファレンス2016 Tokyo/Spring ライトニングトーク)
続・ハロー・ワールド入門(オープンソースカンファレンス2016 Tokyo/Spring ライトニングトーク)
Próximos SlideShares
Carregando em…5
×

続・ハロー・ワールド入門(オープンソースカンファレンス2016 Tokyo/Spring ライトニングトーク)

820 visualizações

Publicada em

OSCライトニングトーク「続・ハロー・ワールド入門」
オープンソースカンファレンス2016 Tokyo/Spring

Publicada em: Tecnologia
  • Seja o primeiro a comentar

続・ハロー・ワールド入門(オープンソースカンファレンス2016 Tokyo/Spring ライトニングトーク)

  1. 1. 続・ ハロー・ワールド 入門 坂井弘亮 (KOZOSプロジェクト) TwitterID:kozossakai
  2. 2. 毎年恒例
  3. 3. バイナリカレンダー あります
  4. 4. バイナリカレンダー とは何か
  5. 5. (普通のカレンダー) 風景や人物がテーマ (バイナリカレンダー) バイナリデータがテーマ
  6. 6. こんな感じです
  7. 7. (バイナリカレンダー2014) (アーキテクチャカレンダー2015)
  8. 8. そして今年
  9. 9. 乱数カレンダー
  10. 10. 乱数カレンダー とは何か
  11. 11. 乱数データをテーマとした バイナリカレンダーの 一種です
  12. 12. こんな感じです
  13. 13. 乱数データの ダンプ
  14. 14. 日付は16進数と 2進数を併記 (さすがにここは 乱数ではない)
  15. 15. 乱数一覧 1月 /dev/urandom 7月 bashの$RANDOM 2月 rand() 8月 Pythonの random.randint() 3月 ガウス分布 9月 random() 4月 旧rand() 10月 Numpyの random.randint() 5月 M系列 11月 Awkのrand() 6月 Perlのrand() 12月 openssl rand
  16. 16. 特徴的な月
  17. 17. 4月 (旧libcの rand()関数)
  18. 18. 4月 (旧libcの rand()関数) パターンが 規則的
  19. 19. 4月 (旧libcの rand()関数) パターンが 規則的 rv = rv * 1103515245 + 12345;
  20. 20. 他にも
  21. 21. 5月 (M系列)
  22. 22. 5月 (M系列) 先頭に ゼロデータの 連続
  23. 23. 5月 (M系列) 先頭に ゼロデータの 連続 乱数の種を適切に選ばないと 乱数性が低くなる (この例では seed = 1)
  24. 24. 前置き終わり
  25. 25. 続・ ハロー・ワールド 入門 坂井弘亮 (KOZOSプロジェクト) TwitterID:kozossakai
  26. 26. 「ハロー・ワールド入門」 とは何か
  27. 27. 1年前の OSC東京春の LTでの発表
  28. 28. 「ハロー・ワールド入門」
  29. 29. C言語の入門時に 必ずと言っていいほど書く 「ハロー・ワールド」
  30. 30. こんなのです
  31. 31. #include <stdio.h> int main() { printf("Hello, World!n"); return 0; }
  32. 32. 実行結果
  33. 33. Hello, World!
  34. 34. 単に 「Hello, World!」 と出力するだけの プログラム
  35. 35. たいていのプログラミング 入門書はこれで始まる
  36. 36. これを徹底的に 解析する,という話
  37. 37. 1年前の OSC東京春の LTで言ったこと
  38. 38. マニアックな技術書を 書くのはもう卒業だ! 今年は入門書を書くぞ!
  39. 39. 入門書と言えば ハロー・ワールドだろう
  40. 40. じゃあハロー・ワールドだけに ついて解説する本を書けば, 入門書の前に読むべき スーパー入門書になるのでは?
  41. 41. そして今年
  42. 42. 続・ ハロー・ワールド 入門 坂井弘亮 (KOZOSプロジェクト) TwitterID:kozossakai
  43. 43. そもそもの きっかけ
  44. 44. こんなことを 言われたことが ある
  45. 45. 「ハロー・ワールド」について レポートを書けという 課題が出れば, 5枚でも6枚でも書ける! (要するにそれほど奥が深い)
  46. 46. これを聞いたときの 正直な感想
  47. 47. いやいや 無理でしょ
  48. 48. 足りないでしょ
  49. 49. 50枚は必要でしょ
  50. 50. ということで 書いてみた
  51. 51. 「ハロー "Hello, World"」
  52. 52. (当初の予定) ハロー・ワールドについて いろんな視点から説明した 150ページくらいの薄い本
  53. 53. (できあがったもの) ハロー・ワールドについて 徹底的に解析した 450ページくらいの 薄くない本(またか)
  54. 54. 注意
  55. 55. C言語によるハロー・ワールド の入門です ハロー・ワールドによるC言語 の入門ではありません
  56. 56. つまり K&Rの前に読むべき スーパー入門書
  57. 57. ハロー・ワールドの 入門書なので
  58. 58. この本には リスト1しか ありません
  59. 59. 利用しているOSS (たいへんありがたい) Linuxカーネル glibc FreeBSD Newlib GDB GCC binutils CentOS
  60. 60. 内容
  61. 61. (第1章) CentOS環境でハロー・ワー ルドをビルドして 逆アセンブ ル結果や実行ファイルの解析 結果を眺めてみたりする
  62. 62. (第2章) printf()の動作を知るために デバッガで動的解析して シ ステムコールの呼出しまでを 追う
  63. 63. (第3章) Linuxカーネルのソースコー ドを読んで,Linuxのシステム コール処理を探る
  64. 64. (第4章) 標準ライブラリのソースコー ドを読んでシステムコールの 呼出し処理を知る. ついでに ビルドして動的解析で処理を 追う
  65. 65. (第5章) main()関数が呼ばれる前の スタートアップの処理と, main()関数から戻った後の 終了処理を探る
  66. 66. (第6章) 標準ライブラリのソースコー ドを読んでprintf()の実装を 知る. FreeBSDやNewlibの 実装も見てみる
  67. 67. こんなのが延々と続く, (自己評価で)最高に面白い本
  68. 68. 他にも実行ファイル解析 共有ライブラリ 最適化 可変長引数などの話もあり
  69. 69. Linux/x86だけでなく FreeBSDやARMなど 他実装/アーキの話題もあり (このへんが特色)
  70. 70. どうもありがとう ございました

×