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

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

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

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