アセンブラ短歌 On web

2,423 views

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,423
On SlideShare
0
From Embeds
0
Number of Embeds
87
Actions
Shares
0
Downloads
0
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

アセンブラ短歌 On web

  1. 1. 「アセンブラ短歌 on Web」を 作ってみよう 愛甲健二 @07c00 kenjiaiko@gmail.com
  2. 2. アセンブラ短歌とは? 「アセンブラ短歌」とは、 5・7・5・7・7の31バイト(みそひ とバイト)から成る機械語コードでプログ ラムを書いてみるという近未来の文化的趣 味 http://kozos.jp/asm-tanka/
  3. 3. アセンブラ短歌 on Web とは? 「アセンブラ短歌 on Web」 とは ブラウザ上からアセンブラ短歌をカジュア ルに試せる環境, スマホからもアクセスでき, 通勤電車やちょっとした待ち時間にも気軽 に短歌れる
  4. 4. どうやってブラウザ上で アセンブラ短歌を実現するのか … 任意のマシン語が実行できる環境 をどうやって用意するのか…
  5. 5. 実現方法 1. エミュレーション方式 – 各種CPUをエミュレーション – 例:JavaScriptでx86/ARM/PPCなどを作る 2. サンドボックス方式 – 隔離された環境(SandBox)で実行 – 例:VM環境内で実行→結果をブラウザへ
  6. 6. 実現方法 1. エミュレーション方式 – 各種CPUをエミュレーション – 例:JavaScriptでx86/ARM/PPCなどを作る 2. サンドボックス方式 – 隔離された環境(SandBox)で実行 – 例:VM環境内で実行→結果をブラウザへ
  7. 7. CPU Emulation on JavaScript jslinux http://bellard.org/jslinux/ Virtual x86 http://copy.sh/v24/
  8. 8. Assembly Tanka on JavaScript xor eax,eax = 31 C0 … eax = 0x00 cpux86.js
  9. 9. Assembly Tanka on JavaScript xor eax,eax = 31 C0 … eax = 0x00 cpux86.js ※ I/Oは決めておく必要あ り ← PUSH! ■Demo Assembly Tanka on JavaScript http://07c00.com/asmtanka_on_js/
  10. 10. Demo http://07c00.com/asmtanka_on_js/
  11. 11. 実現方法 1. エミュレーション方式 – 各種CPUをエミュレーション – 例:JavaScriptでx86/ARM/PPCなどを作る 2. サンドボックス方式 – 隔離された環境(SandBox)で実行 – 例:VM環境内で実行→結果をブラウザへ
  12. 12. SandBox for analyzing malwares VirtualBox https://www.virtualbox.org/ https://www.virtualbox.org/wiki/Screenshots VMWare http://www.vmware.com/jp
  13. 13. でも たった31バイトを実行するため に VM立ち上げるとかさすがに厳 しい
  14. 14. そこで「デバッガ⇔デバッギ」 の関係になる2つのプロセスを 立ち上げ 実行コードをデバッギに渡し 結果をデバッガが受け取る仕組み を 作る
  15. 15. Assembly Tanka on Server-side ③ ① Debugging ⑤ tanka.cgi ④ ② New process Return the result Execute • Debugging API – DebugActiveProcess (Win系) – ptrace(UNIX系) 6a 68 6a 68 59 00 79 08 57 cd 58 61 5a 61 80 50 6d 5b 6b 58 40 61 50 40 40 61 54 40 58 58 c3
  16. 16. Assembly Tanka on Server-side STEP ステップ実行毎に デバッガが命令を検査 tanka.cgi New process push 0x00 = 6a 00 6a 68 6a 68 59 00 79 08 57 cd 58 61 5a 61 80 50 6d 5b 6b 58 40 61 50 40 40 61 54 40 58 58 c3
  17. 17. Assembly Tanka on Server-side STEP ステップ実行毎に デバッガが命令を検査 tanka.cgi New process pop eax = 58 6a 68 6a 68 59 00 79 08 57 cd 58 61 5a 61 80 50 6d 5b 6b 58 40 61 50 40 40 61 54 40 58 58 c3
  18. 18. Assembly Tanka on Server-side STEP ステップ実行毎に デバッガが命令を検査 tanka.cgi New process push eax = 50 6a 68 6a 68 59 00 79 08 57 cd 58 61 5a 61 80 50 6d 5b 6b 58 40 61 50 40 40 61 54 40 58 58 c3
  19. 19. Assembly Tanka on Server-side STEP ステップ実行毎に デバッガが命令を検査 tanka.cgi New process inc eax = 40 6a 68 6a 68 59 00 79 08 57 cd 58 61 5a 61 80 50 6d 5b 6b 58 40 61 50 40 40 61 54 40 58 58 c3
  20. 20. Assembly Tanka on Server-side STEP ステップ実行毎に デバッガが命令を検査 tanka.cgi sys-callが呼ばれたら 引数を確認し int 0x80 = cd 80 OKなら実行を許す ダメならそこでストップ →sys-callさえ監視しておけば ok New process 6a 68 6a 68 59 00 79 08 57 cd 58 61 5a 61 80 50 6d 5b 6b 58 40 61 50 40 40 61 54 40 58 58 c3
  21. 21. Demo http://x86.seccon.jp/99.html
  22. 22. アセンブラ短歌の楽しみかた • いろんなCPUでやってみる • いろんなOS(環境)でやってみる • 何文字printできるかに挑戦してみる • 味わい深さを追求してみる • 短歌を簡単に作れる環境を作ってみる • 短歌を自動生成できないか考えてみる
  23. 23. 好きな楽しみかたをすれば いいと思います でも一回は短歌やってみてほしいです ぜったい楽しいので
  24. 24. 最後に その他の on JS を紹介
  25. 25. バイナリかるた on JS http://x86.seccon.jp/karuta/test.html Demo
  26. 26. アセンブラテトリス on JS http://07c00.com/asmtetris_on_js/ Demo
  27. 27. バイナリを楽しもう!
  28. 28. 絶賛発売中! Thank you! https://book.mynavi.jp/ec/products/detail/id=24267

×