Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.

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

Avatar for Satoshi MIMURA

Satoshi MIMURA

December 25, 2011
Tweet

More Decks by Satoshi MIMURA

Other Decks in Programming

Transcript

  1. こんなひと。 ⚫ みむら ( @mimura1133 / Satoshi Mimura ) ⚫

    http://mimumimu.net/ ⚫ セプキャン 2011 参加したり、 U-20 プロコン出たりとか、いろいろ活動中。 ⚫ Phi16 さん誘った(遺伝的てとりす。)けど、 ぼく、すごくないですごめんなさい。 ⚫ .net とか C# とかいいよね!! ⚫ WP7 もやるけど、ネタがかぶるのでやめた。 ⚫ このまえ Console Twitter が窓の杜のった! マシン語によるコード実行 - @mimura1133 2
  2. で、結局何に使えるの。 ⚫ x86 プロセッサならば、 マルチプラットフォーム! (すばらしい) ⚫ .net Framework や

    Java などの、 JIT コンパイラの仕掛けで使える。 ⚫ ひとまずかっこいいコードが書ける。 6 マシン語によるコード実行 - @mimura1133
  3. 作り方。 ⚫ 自分でいきなり書く。 ⚫ バイナリエディタで EXE ファイルの .text セクションとかを 持ってくる。

    ⚫ コンパイラにいい感じに吐いてもらう。 (推奨) 7 マシン語によるコード実行 - @mimura1133
  4. 作り方 for Visual C 1. コードをかく。 (リンクとかするやつだとめんどいので、めん どくないやつにするとヨイ。) 2. cl

    /c test.c とかやって、 obj ファイルをつくる。 3. dumpbin /rawdata /out:test.txt test.obj とかやって、テキストファイルに出力する。 8 マシン語によるコード実行 - @mimura1133
  5. 作り方。 4. x86 プロセッサは 「リトルエンディアン」なの で、格納順を考えてコードに書く。 5. 読みやすさを考えて、 NOP (何もしない

    : 0x90) を入れて、 見栄えを整えればできあがり。 9 マシン語によるコード実行 - @mimura1133
  6. 適当に技術面。 ⚫ Mac X (without Power PC)とか Linux, UNIX で、作ったコードを動かす時は、

    gcc -m32 というように、 32bit であることを示すのを 忘れずに。 ⚫ ・・ Windows でも gcc では必要なのかも。 16 マシン語によるコード実行 - @mimura1133
  7. 適当に技術面。 ⚫ 普通に配列に入れたバイトコードは実行で きない。( CALL 時にエラーで落ちる ) ⚫ 下記のAPIを使って実行可能状態にする。 17

    マシン語によるコード実行 - @mimura1133 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