Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

アセンブラ短歌 - 坂井弘亮

2,918 views

Published on

http://ja.avtokyo.org/MediaArchives

Published in: Technology
  • Be the first to comment

アセンブラ短歌 - 坂井弘亮

  1. 1. アセンブラ短歌 坂井弘亮 (KOZOSプロジェクト) TwitterID:kozossakai
  2. 2. アセンブラ短歌?
  3. 3. アセンブラ短歌とは 5・7・5・7・7の機械語 コードでプログラムを 書いてみるという 近未来の文化的趣味
  4. 4. こんな感じです
  5. 5. 68 72 6c 64 21 68 6f 20 57 6f 90 90 68 48 65 6c 6c 89 e5 6a 0c 55 6a 02 50 90 6a 04 58 cd 80
  6. 6. 札に詠むと こんな感じ
  7. 7. 実行結果
  8. 8. Hello World!
  9. 9. ちなみに 他の言語では
  10. 10. 「XX短歌」は 他の言語では 難しい
  11. 11. スクリプト言語では これが邪魔
  12. 12. #!/bin/sh (9文字)
  13. 13. C言語では これが邪魔
  14. 14. #include <stdio.h> (18文字)
  15. 15. XSS短歌は?
  16. 16. 短歌ismが 感じられない
  17. 17. アセンブラは もっとも短歌に向いた 高級(な)言語です
  18. 18. ところで
  19. 19. SECCON 長野大会の 品評会で 披露されたもの
  20. 20. アセンブラ短歌 作品の
  21. 21. 掛軸
  22. 22. 拡大すると
  23. 23. タイトル「新潟」
  24. 24. では
  25. 25. 作品を一首 鑑賞して みましょう
  26. 26. タイトル 「夏休み」 詠み人:私
  27. 27. 鑑賞ポイント
  28. 28. アセンブラを見るとpush $0 pop %eax push %eax inc %eax push $0x616d6179 push %eax inc %eax push $8 pop %edx pop %ebx inc %eax push $0x616b6157 push %esp inc %eax pop %ecx int $0x80 pop %eax pop %eax pop %eax ret 上の句 下の句
  29. 29. アセンブラを見るとpush $0 pop %eax push %eax inc %eax push $0x616d6179 push %eax inc %eax push $8 pop %edx pop %ebx inc %eax push $0x616b6157 push %esp inc %eax pop %ecx int $0x80 pop %eax pop %eax pop %eax ret 上の句 下の句 各句の末尾に同じ命令が
  30. 30. つまり
  31. 31. 韻をふんでいる わけです
  32. 32. 0x40で 韻をふむ
  33. 33. 他にも
  34. 34. push $0 pop %eax push %eax inc %eax push $0x616d6179 push %eax inc %eax push $8 pop %edx pop %ebx inc %eax push $0x616b6157 push %esp inc %eax pop %ecx int $0x80 pop %eax pop %eax pop %eax ret
  35. 35. push $0 pop %eax push %eax inc %eax push $0x616d6179 push %eax inc %eax push $8 pop %edx pop %ebx inc %eax push $0x616b6157 push %esp inc %eax pop %ecx int $0x80 pop %eax pop %eax pop %eax ret EAXの値を流用して レジスタ設定している
  36. 36. まるで
  37. 37. 流れる小川の せせらぎのよう
  38. 38. 命令に注目 すると
  39. 39. push $0 pop %eax push %eax inc %eax push $0x616d6179 push %eax inc %eax push $8 pop %edx pop %ebx inc %eax push $0x616b6157 push %esp inc %eax pop %ecx int $0x80 pop %eax pop %eax pop %eax ret
  40. 40. push $0 pop %eax push %eax inc %eax push $0x616d6179 push %eax inc %eax push $8 pop %edx pop %ebx inc %eax push $0x616b6157 push %esp inc %eax pop %ecx int $0x80 pop %eax pop %eax pop %eax ret 命令のリズムもある
  41. 41. 総評 最初にゼロ設定したEAXがinc命令で1ずつ増加 していく際に,その値を流用して EBXや戻り値の EAXを設定していくさまは, 流れる小川のせせら ぎ のようです.またニーモニックを見ると「push- pop-push-inc, push-push-inc」 「push- pop-pop-inc, push-push-inc」という スキップ するようなリズム があり,小川のほとりで遊ぶ 子 供たちの情景 を思い起こさせ, 「夏休み」 という テーマがよく表現されています.
  42. 42. 短歌への情熱 (tankassion) にあふれた作品です
  43. 43. そんなアセンブラ短歌 ですが
  44. 44. アセンブラ短歌が 書籍化されてます! (オンデマンド&電子)
  45. 45. 31バイトでつくる アセンブラプログラミング アセンブラ短歌の世界
  46. 46. 短歌ists 坂井 弘亮 愛甲 健二 松田 和樹 坂井 丈泰 竹迫 良範
  47. 47. すでに販売開始 しています (オンデマンドなので 書店には並びません)
  48. 48. 発刊記念イベント! (1月20日(月)) 「二〇一四アセンブラ短歌詠みはじめ」 竹橋 パレスサイドビル マイナビルーム
  49. 49. ここからが 今日の本題
  50. 50. アセンブラ短歌に もっとも向いた アーキテクチャは 何か?
  51. 51. RISC系プロセッサ → 4バイト固定長命令 可変長命令でも → 偶数バイト命令が多 原理的に不可能
  52. 52. 以下のアーキで 原理的に可能な ことが判明 x86(Intel) M32C(三菱) MN10300(松下) RL78(ルネサス) RX(ルネサス) Xtensa(テンシリカ)
  53. 53. やってみた
  54. 54. まず、RX
  55. 55. こんな感じかmov.l #1, r1 mov.l #10, r3 nop mov.l #0x6c6c6548, [r0] nop mov.l #0x6c72, 8[r0] mov.l #0x6f57206f, 4[r0] mov.l r0, r2 mov.l #5, r5 int #255 上の句 下の句
  56. 56. 実行結果は
  57. 57. Hello Worl (10文字)
  58. 58. 次、RL78
  59. 59. Hello Wor (9文字)
  60. 60. 他のは こんな感じ
  61. 61. MN10300 M32C Hello Wo Hello! (8文字) (6文字)
  62. 62. i386/FreeBSD x86/Linux Hello World! Hello World!! (12文字) (13文字)
  63. 63. 比較してみる
  64. 64. 比較の前に
  65. 65. 定量化の ためには 単位が必要
  66. 66. 単位を制定する BPT (Byte per Tanka) ...アセンブラ短歌の やりやすさの指標
  67. 67. たとえばRXでは hello Worl で10文字なので 10BPT
  68. 68. 集計すると
  69. 69. M32C 6BPT MN10300 8BPT RL78 9BPT RX 10BPT i386/FreeBSD12BPT x86/Linux 13BPT
  70. 70. x86は非常に 短歌に向いている ことが判明 (あとLinuxも)
  71. 71. どうもありがとう ございました
  72. 72. 総評 最初にゼロ設定したEAXがinc命令で1ずつ増加 していく際に,その値を流用して EBXや戻り値の EAXを設定していくさまは, 流れる小川のせせら ぎ のようです.またニーモニックを見ると「push- pop-push-inc, push-push-inc」 「push- pop-pop-inc, push-push-inc」という スキップ するようなリズム があり,小川のほとりで遊ぶ 子 供たちの情景 を思い起こさせ, 「夏休み」 という テーマがよく表現されています.
  73. 73. 総評 最初にゼロ設定したEAXがinc命令で1ずつ増加 していく際に,その値を流用して EBXや戻り値の EAXを設定していくさまは, 流れる小川のせせら ぎ のようです.またニーモニックを見ると「push- pop-push-inc, push-push-inc」 「push- pop-pop-inc, push-push-inc」という スキップ するようなリズム があり,小川のほとりで遊ぶ 子 供たちの情景 を思い起こさせ, 「夏休み」 という テーマがよく表現されています.
  74. 74. 総評 最初にゼロ設定したEAXがinc命令で1ずつ増加 していく際に,その値を流用して EBXや戻り値の EAXを設定していくさまは, 流れる小川のせせら ぎ のようです.またニーモニックを見ると「push- pop-push-inc, push-push-inc」 「push- pop-pop-inc, push-push-inc」という スキップ するようなリズム があり,小川のほとりで遊ぶ 子 供たちの情景 を思い起こさせ, 「夏休み」 という テーマがよく表現されています.
  75. 75. 総評 最初にゼロ設定したEAXがinc命令で1ずつ増加 していく際に,その値を流用して EBXや戻り値の EAXを設定していくさまは, 流れる小川のせせら ぎ のようです.またニーモニックを見ると「push- pop-push-inc, push-push-inc」 「push- pop-pop-inc, push-push-inc」という スキップ するようなリズム があり,小川のほとりで遊ぶ 子 供たちの情景 を思い起こさせ, 「夏休み」 という テーマがよく表現されています.
  76. 76. まず最初に 紹介
  77. 77. SECCON 2013 SECCON 2013 SECCON 2013 SECCON 2013
  78. 78. 10月の長野大会では アセンブラ短歌の コンテストと品評会が 行われました
  79. 79. それならば、 これもできるだろうと いうことで
  80. 80. アセンブラ川柳
  81. 81. 6a 48 89 e5 90 6a 01 55 6a 02 50 90 6a 04 58 cd 80
  82. 82. 実行結果
  83. 83.
  84. 84. 1文字が せいいっぱいでした 下の句が無いと けっこう難しい
  85. 85. まてよ
  86. 86. ということは
  87. 87. こういうのも 可能ということか
  88. 88. アセンブラ かるた
  89. 89. 作ってみた
  90. 90. 68 a5 f3 a5 b0 68 a1 bc a5 ea 90 90 68 a5 d5 a5 a3 89 e5 6a 0c 55 6a 02 50 90 6a 04 58 cd 80 68 00 00 a5 a2 68 a5 bb a5 f3 90 90 68 a5 d6 a5 e9 89 e5 6a 0c 55 6a 02 50 90 6a 04 58 cd 80 実行 → フィーリング 実行 → ブラセンア
  91. 91. しかし問題あり
  92. 92. バイナリダンプを 見ると
  93. 93. 00000000 68 a5 f3 a5 b0 68 a1 bc |hングhー| 00000008 a5 ea 90 90 68 a5 d5 a5 |リ..hフ| 00000010 a3 89 e5 6a 0c 55 6a 02 |.j.Uj.| 00000018 50 90 6a 04 58 cd 80 |P.j.X.| 00000000 68 00 00 a5 a2 68 a5 bb |h..アhセ| 00000008 a5 f3 90 90 68 a5 d6 a5 |ン..hブ| 00000010 e9 89 e5 6a 0c 55 6a 02 |.j.Uj.| 00000018 50 90 6a 04 58 cd 80 |P.j.X.|
  94. 94. 00000000 68 a5 f3 a5 b0 68 a1 bc |hングhー| 00000008 a5 ea 90 90 68 a5 d5 a5 |リ..hフ| 00000010 a3 89 e5 6a 0c 55 6a 02 |.j.Uj.| 00000018 50 90 6a 04 58 cd 80 |P.j.X.| 00000000 68 00 00 a5 a2 68 a5 bb |h..アhセ| 00000008 a5 f3 90 90 68 a5 d6 a5 |ン..hブ| 00000010 e9 89 e5 6a 0c 55 6a 02 |.j.Uj.| 00000018 50 90 6a 04 58 cd 80 |P.j.X.|
  95. 95. 読み札を 読み上げた時点で 取り札が わかってしまう
  96. 96. これでは 競技にできない
  97. 97. xorにかけて 難読化 してみる
  98. 98. b8 5b 0c 5a 29 f7 d8 50 b8 5b 5d 5a 44 (字余り) f7 d8 50 89 e5 6a 08 55 6a 02 50 90 90 90 6a 04 58 cd 80
  99. 99. 実行結果
  100. 100. アセンブ
  101. 101. 4文字が せいいっぱい でした
  102. 102. バイナリダンプは
  103. 103. 00000000 b8 5b 0c 5a 29 f7 d8 50 |[.Z)P| 00000008 b8 5b 5d 5a 44 f7 d8 50 |[]ZDP| 00000010 89 e5 6a 08 55 6a 02 50 |.j.Uj.P| 00000018 90 90 90 6a 04 58 cd 80 |...j.X.|
  104. 104. これなら 読めまい
  105. 105. ふだんは趣味で こんなことを やっています
  106. 106. GCCが対応している CPUアーキテクチャの アセンブラを 片っ端から出力させて 片っ端から読んでみる
  107. 107. この技術を アセンブラ短歌に 活かしたい
  108. 108. こんな感じmov 0xfff10, #72 mov a, #108 mov 0xfff10, #101 mov 0xfff10, a mov 0xfff10, a mov 0xfff10, #111 mov a, #32 mov 0xfff10, a mov 0xfff10, #87 mov a, #111 mov 0xfff10, a mov 0xfff10, #114 nop nop上の句 下の句
  109. 109. こんな かんじ
  110. 110. 実行結果は
  111. 111. SoftwareDesign誌 懐かしの連載 「全国津々浦々! 勉強会&イベント 探訪記」
  112. 112. 電子書籍に なります!
  113. 113. 電子書籍に なります! した!
  114. 114. 達人出版会
  115. 115. TechLIONも 収録されてます! (vol.1〜4)
  116. 116. 高橋さん ありがとう ございます (深謝)
  117. 117. あともうひとつ
  118. 118. マイナビ すげえ
  119. 119. タイトル 「我思う」 詠み人:私
  120. 120. 鑑賞ポイント
  121. 121. 実はQuineに なってます
  122. 122. Quineとは 自分自身を出力する プログラムのことです
  123. 123. つまり
  124. 124. これを実行すると
  125. 125. これが出力されます
  126. 126. さらに 機械語コードに 注目!
  127. 127. "QUINE"の 5文字が 埋め込んで あります
  128. 128. つまり
  129. 129. Quineにより 「QUINE」と 出力される!
  130. 130. 総評 Quineにより「QUINE」と出力させていることは, 内面 をさらけ出した上で「私を見ろ!」「私は私 だ!」と言っているような 強い自我と 誇りの高さ, 情熱を感じさせ, タイトルの「我思う」にふさわし い作品になっています. 言いたいことを言った後は retでなくexitシステムコールで 終わっていることも 過去を振り返らない 意志の強さ が感じられてい さぎ良く, 一本筋 の通っている作品と言うことが できるでしょう.
  131. 131. 総評 Quineにより「QUINE」と出力させていることは, 内面 をさらけ出した上で「私を見ろ!」「私は私 だ!」と言っているような 強い自我と 誇りの高さ, 情熱を感じさせ, タイトルの「我思う」にふさわし い作品になっています. 言いたいことを言った後は retでなくexitシステムコールで 終わっていることも 過去を振り返らない 意志の強さ が感じられてい さぎ良く, 一本筋 の通っている作品と言うことが できるでしょう.
  132. 132. 総評 Quineにより「QUINE」と出力させていることは, 内面 をさらけ出した上で「私を見ろ!」「私は私 だ!」と言っているような 強い自我と 誇りの高さ, 情熱を感じさせ, タイトルの「我思う」にふさわし い作品になっています. 言いたいことを言った後は retでなくexitシステムコールで 終わっていることも 過去を振り返らない 意志の強さ が感じられてい さぎ良く, 一本筋 の通っている作品と言うことが できるでしょう.
  133. 133. 総評 Quineにより「QUINE」と出力させていることは, 内面 をさらけ出した上で「私を見ろ!」「私は私 だ!」と言っているような 強い自我と 誇りの高さ, 情熱を感じさせ, タイトルの「我思う」にふさわし い作品になっています. 言いたいことを言った後は retでなくexitシステムコールで 終わっていることも 過去を振り返らない 意志の強さ が感じられてい さぎ良く, 一本筋 の通っている作品と言うことが できるでしょう.
  134. 134. 総評 Quineにより「QUINE」と出力させていることは, 内面 をさらけ出した上で「私を見ろ!」「私は私 だ!」と言っているような 強い自我と 誇りの高さ, 情熱を感じさせ, タイトルの「我思う」にふさわし い作品になっています. 言いたいことを言った後は retでなくexitシステムコールで 終わっていることも 過去を振り返らない 意志の強さ が感じられてい さぎ良く, 一本筋 の通っている作品と言うことが できるでしょう.
  135. 135. 総評 Quineにより「QUINE」と出力させていることは, 内面 をさらけ出した上で「私を見ろ!」「私は私 だ!」と言っているような 強い自我と 誇りの高さ, 情熱を感じさせ, タイトルの「我思う」にふさわし い作品になっています. 言いたいことを言った後は retでなくexitシステムコールで 終わっていることも 過去を振り返らない 意志の強さ が感じられてい さぎ良く, 一本筋 の通っている作品と言うことが できるでしょう.
  136. 136. 総評 Quineにより「QUINE」と出力させていることは, 内面 をさらけ出した上で「私を見ろ!」「私は私 だ!」と言っているような 強い自我と 誇りの高さ, 情熱を感じさせ, タイトルの「我思う」にふさわし い作品になっています. 言いたいことを言った後は retでなくexitシステムコールで 終わっていることも 過去を振り返らない 意志の強さ が感じられてい さぎ良く, 一本筋 の通っている作品と言うことが できるでしょう.
  137. 137. バイナリカレンダー 持ってきてます
  138. 138. こんなの です
  139. 139. ほしいかたには あげます お声がけください
  140. 140. さて本題
  141. 141. そんな アセンブラ短歌 ですが
  142. 142. いちおう セキュリティ教育の 目的があります (詳しくはHP参照) http://kozos.jp/asm-tanka/
  143. 143. 機械語コードは こんな感じ
  144. 144. SECCONとは何か セキュリティ競技の コンテストです
  145. 145. 昨年度はCTFという 競技大会が メインでしたが
  146. 146. 今年度のSECCONでは 様々なコンテストが 行われています

×