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.
マシン語によるコード実行              みむら (@mimura1133)マシン語によるコード実行 - @mimura1133        1
こんなひと。    みむら ( @mimura1133 / Satoshi Mimura )    http://mimumimu.net/    セプキャン 2011 参加したり、     U-20 プロコン出たりとか、いろいろ活動中。...
さっそく、本題。マシン語によるコード実行 - @mimura1133   3
Cのプログラムなら読めるよね!マシン語によるコード実行 - @mimura1133   4
要はどういうこと  1.   マシン語コードをメモリ上に格納。  2.   実行可能にする。  3.   実行させる。マシン語によるコード実行 - @mimura1133   5
で、結局何に使えるの。     x86 プロセッサならば、      マルチプラットフォーム! (すばらしい)     .net Framework や Java などの、      JIT コンパイラの仕掛けで使える。     ひとまず...
作り方。     自分でいきなり書く。     バイナリエディタで      EXE ファイルの .text セクションとかを      持ってくる。     コンパイラにいい感じに吐いてもらう。      (推奨)マシン語によるコード実...
作り方 for Visual C  1.   コードをかく。       (リンクとかするやつだとめんどいので、めん       どくないやつにするとヨイ。)  2.   cl /c test.c       とかやって、 obj ファイルをつ...
作り方。  4.   x86 プロセッサは 「リトルエンディアン」なの       で、格納順を考えてコードに書く。  5.   読みやすさを考えて、       NOP (何もしない : 0x90) を入れて、       見栄えを整えればで...
技術的なところについて。マシン語によるコード実行 - @mimura1133   10
動きをみてみる。     まずはこやつで、動きを確認してみる。マシン語によるコード実行 - @mimura1133   11
動きをみてみる。     どう見ても普通に値をスタックに入れている      だけ・・マシン語によるコード実行 - @mimura1133   12
動きを見てみる。     スタックに書き込みが終わった後、      書き込みはじめの位置 (EBP - 0x88)      の場所にサブルーチンコール(CALL)を掛ける。マシン語によるコード実行 - @mimura1133       13
動きを見てみる。     スタックの中のデータを実行し始める。マシン語によるコード実行 - @mimura1133   14
適当に技術面。     リトルエンディアンの格納順に注意!      dumpbin で出てくるのは、1バイトごとの値。      WORD, DWORD 単位などで格納する場合は、      気をつける。     00000000: 8B...
適当に技術面。     Mac X (without Power PC)とか      Linux, UNIX で、作ったコードを動かす時は、      gcc -m32      というように、 32bit であることを示すのを      ...
適当に技術面。   普通に配列に入れたバイトコードは実行で    きない。( CALL 時にエラーで落ちる )   下記のAPIを使って実行可能状態にする。    OS        API    Windows   VirtualProt...
適当に技術面     参考資料:      自分のブログの該当記事:        http://go.mimumimu.net/rtYMKr      Mono Project のソースコード:        http://download...
最後に。     クリスマスですんで、      かっこいいところを見せたかった。     あとクリスマスぼっちもいやなので、      ぜひよろしければ、      Twitter とかフォローお願いします。     Twitter: ...
マシン語によるコード実行            みむら (@mimura1133)マシン語によるコード実行 - @mimura1133      20
Upcoming SlideShare
Loading in …5
×

マシン語によるコード実行

2,619 views

Published on

https://skydrive.live.com/redir.aspx?cid=f1748ef2c5b240b8&resid=F1748EF2C5B240B8!2872&parid=F1748EF2C5B240B8!210&authkey=!AGDgM-rUItjBHMg
ここからアニメーション付きで見てください・・w

http://pronama.wordpress.com/2011/11/19/pronama-12-at-shinagawa/
これでプレゼンした資料です。

Published in: Technology
  • Be the first to comment

マシン語によるコード実行

  1. 1. マシン語によるコード実行 みむら (@mimura1133)マシン語によるコード実行 - @mimura1133 1
  2. 2. こんなひと。  みむら ( @mimura1133 / Satoshi Mimura )  http://mimumimu.net/  セプキャン 2011 参加したり、 U-20 プロコン出たりとか、いろいろ活動中。  Phi16 さん誘った(遺伝的てとりす。)けど、 ぼく、すごくないですごめんなさい。  .net とか C# とかいいよね!!  WP7 もやるけど、ネタがかぶるのでやめた。  このまえ Console Twitter が窓の杜のった!マシン語によるコード実行 - @mimura1133 2
  3. 3. さっそく、本題。マシン語によるコード実行 - @mimura1133 3
  4. 4. Cのプログラムなら読めるよね!マシン語によるコード実行 - @mimura1133 4
  5. 5. 要はどういうこと 1. マシン語コードをメモリ上に格納。 2. 実行可能にする。 3. 実行させる。マシン語によるコード実行 - @mimura1133 5
  6. 6. で、結局何に使えるの。  x86 プロセッサならば、 マルチプラットフォーム! (すばらしい)  .net Framework や Java などの、 JIT コンパイラの仕掛けで使える。  ひとまずかっこいいコードが書ける。マシン語によるコード実行 - @mimura1133 6
  7. 7. 作り方。  自分でいきなり書く。  バイナリエディタで EXE ファイルの .text セクションとかを 持ってくる。  コンパイラにいい感じに吐いてもらう。 (推奨)マシン語によるコード実行 - @mimura1133 7
  8. 8. 作り方 for Visual C 1. コードをかく。 (リンクとかするやつだとめんどいので、めん どくないやつにするとヨイ。) 2. cl /c test.c とかやって、 obj ファイルをつくる。 3. dumpbin /rawdata /out:test.txt test.obj とかやって、テキストファイルに出力する。マシン語によるコード実行 - @mimura1133 8
  9. 9. 作り方。 4. x86 プロセッサは 「リトルエンディアン」なの で、格納順を考えてコードに書く。 5. 読みやすさを考えて、 NOP (何もしない : 0x90) を入れて、 見栄えを整えればできあがり。マシン語によるコード実行 - @mimura1133 9
  10. 10. 技術的なところについて。マシン語によるコード実行 - @mimura1133 10
  11. 11. 動きをみてみる。  まずはこやつで、動きを確認してみる。マシン語によるコード実行 - @mimura1133 11
  12. 12. 動きをみてみる。  どう見ても普通に値をスタックに入れている だけ・・マシン語によるコード実行 - @mimura1133 12
  13. 13. 動きを見てみる。  スタックに書き込みが終わった後、 書き込みはじめの位置 (EBP - 0x88) の場所にサブルーチンコール(CALL)を掛ける。マシン語によるコード実行 - @mimura1133 13
  14. 14. 動きを見てみる。  スタックの中のデータを実行し始める。マシン語によるコード実行 - @mimura1133 14
  15. 15. 適当に技術面。  リトルエンディアンの格納順に注意! dumpbin で出てくるのは、1バイトごとの値。 WORD, DWORD 単位などで格納する場合は、 気をつける。  00000000: 8B 44 24 04 -> dat[0] = 0x0424448b;マシン語によるコード実行 - @mimura1133 15
  16. 16. 適当に技術面。  Mac X (without Power PC)とか Linux, UNIX で、作ったコードを動かす時は、 gcc -m32 というように、 32bit であることを示すのを 忘れずに。  ・・ Windows でも gcc では必要なのかも。マシン語によるコード実行 - @mimura1133 16
  17. 17. 適当に技術面。  普通に配列に入れたバイトコードは実行で きない。( CALL 時にエラーで落ちる )  下記のAPIを使って実行可能状態にする。 OS API Windows VirtualProtect http://msdn.microsoft.com/ja-jp/library/cc430214.aspx Mac OS X vm_protect http://www.gnu.org/software/hurd/gnumach-doc/Memory-Attributes.html http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/vm_protect.html Linux mprotect http://linuxjm.sourceforge.jp/html/LDP_man-pages/man2/mprotect.2.htmlマシン語によるコード実行 - @mimura1133 17
  18. 18. 適当に技術面  参考資料: 自分のブログの該当記事: http://go.mimumimu.net/rtYMKr Mono Project のソースコード: http://download.mono-project.com/sources/マシン語によるコード実行 - @mimura1133 18
  19. 19. 最後に。  クリスマスですんで、 かっこいいところを見せたかった。  あとクリスマスぼっちもいやなので、 ぜひよろしければ、 Twitter とかフォローお願いします。  Twitter: @mimura1133  そのほか : http://mimumimu.net/マシン語によるコード実行 - @mimura1133 19
  20. 20. マシン語によるコード実行 みむら (@mimura1133)マシン語によるコード実行 - @mimura1133 20

×