SlideShare una empresa de Scribd logo
1 de 45
汎用レジスタの説明
そして x86 エミュレータ
   2012 年 5 月 26 日
       上川大介




                     1
自己紹介
• 名前 上川大介
• Twitter d_kami
• はてな d-kami

• Java をメインに使っているが、自作 OS
  を作り始めたことにより、 x86 エミュレ
  ータを作り始めた


                           2
目的
• 前半
 – x86 のレジスタに慣れてもらう
 – x86 の一部なら意外と簡単だということをわ
   かってもうらう
• 後半
 – 自分なりのエミュレータの作り方をふーんと
   思いながら見てもらう



                            3
このスライドのルール
•   アセンブリ言語は Intel 記法で記述する
•   命令名やレジスタ名は大文字にする
•   16 進数が突然でてきます
•   10 進数も混ざったりしてます




                             4
汎用レジスタ
•   多種の目的で利用できるレジスタ
•   代入命令で自由に書き換え可能
•   命令によっては利用方法が決まっている
•   x86 には汎用レジスタが8つある




                         5
汎用レジスタの種類( 32bit )
•   EAX
•   ECX
•   EDX
•   EBX
•   ESP
•   EBP
•   ESI
•   EDI

                         6
EAX
•   アキュムレータ
•   演算命令で EAX 専用の命令が存在する
•   MUL や DIV では必ず使う
•   C 言語の関数の返り値が入ってたりする




                           7
アキュムレータを使うとこうな
       る
• ADD AL, 0xA0 だと…
 – 04 A0
• ADD CL, 0xA0 だと…
 – 80 C1 A0




                     8
ECX
• カウンタ
• ループでカウンタとして利用される
• シフトローテート命令でも利用される




                      9
EDX
• データ
• MUL や DIV で利用される
• I/O 操作でも利用される




                     10
EBX
• ベースアドレス
• BIOS Function Call で利用される
• 詳しくないのでわかりません!




                              11
ESP
• スタックポインタ
• スタックの操作で利用される (PUSH,
  POP)
• サブルーチンコールで利用される (CALL,
  RET)




                           12
EBP
• ベーススタックポインタ
• C 言語のプログラムをコンパイルすると
  よくでてくる




                        13
ESI
• ソースインデックス
• メモリ転送命令で利用される
• メモリの転送元番地を表す




                  14
EDI
• デスティネーションインデックス
• メモリ転送命令で利用される
• メモリの転送先番地を表す




                    15
32bit レジスタ
• EAX 、 ECX など
 – 下位 16bit に AX や CX と言った名前でアクセ
   ス

 – 下位 16bit の下位 8bit に AL 、 CL と言った名
   前でアクセス( EAX 、 ECX 、 EDX 、 EBX
   のみ)

 – 下位 16bit の上位 8bit に AH 、 CH と言った名
   前でアクセス( EAX 、 ECX 、 EDX 、 EBX
   のみ)                              16
レジスタの選び方
1. オペコードにレジスタ番号を埋め込む
2. ModR/M で指定する
3. 命令によっては使うレジスタが固定され
   る




                    17
オペコードにレジスタ番号を埋め
           込む
•   MOV 命令( B0 ~ BF )
•   XCHG 命令( 90 ~ 97 )
•   PUSH 命令( 50 ~ 57 )
•   POP 命令( 58 ~ 5F )
•   INC 命令 (40 ~ 47)
•   DEC 命令 (48 ~ 4F)



                         18
ModR/M で指定する
• ModR/M はオペコードの次のバイト
• ModR/M があるかどうかは命令次第
• ModR/M の構造
ModR/M が 55 だった場合
01010101

01 が Mod 、 101 が R/M
010 がレジスタインデックスまたはオペコ
  ード
                        19
レジスタが固定される場合
•   演算命令の一部で EAX が利用される
•   MUL 、 DIV で EAX と EDX
•   繰り返し命令で ECX
•   メモリ転送命令で ESI 、 EDI




                            20
メモリのアドレス指定方法
• ModR/M で指定する
 – [EBX], 0xA0000000
 – C7 03 00 00 00 A0

• string 命令を使う
 – MOVSB
   • ESI や EDI がメモリアドレスになる
   • MOV [EDI], [ESI] のようなことをやる
   • MOV [EDI], [ESI] をアセンブラにかけると怒られ
     ますが

                                       21
前半のまとめ
• 汎用レジスタが 8 つある
• メモリアドレスは ModR/M や string 命令




                                22
x86 エミュレータ編
• 初期の頃のソースコードの解説
• エミュレータは Java で作った
• Google Web Toolkit を使った HTML5 版も
  あるよ!




                                 23
初期の頃の問題点
• 知らないことが多すぎた
• ModR/M を知らなかった




                   24
x86 エミュレータ 命令実装前
public class VM{
  private int eip;
  private byte[] memory;

    // イメージファイルの読み込み
    public void load(String name){
       /* 読み込む処理 */
    }
}

                                     25
命令実装 : エミュレータ本体編
            1/2
public void execute(){
   int code = memory[eip] & 0xFF;
   Instruction instruction =
  instructions[code];

    instruction.execute(this);
}

                                    26
命令実装 : エミュレータ本体編
        2/2
public void execute(){
   int code = getCode8(0);
   Instruction instruction =
  instructions[code];

    instruction.execute(this);
}

                                 27
エミュレータ本体の変化
• 最初はオペコードを取得するためにプロ
  グラムカウンタの値をそのまま利用
• getCode8 を作成
• getCode8 ではセグメントやページングで
  のアドレス変換を行って、オペコードの
  位置を求めている



                        28
Instructions
Instruction[] instructions = new Instruction[256];


instructions[0x00] = new AddRM8R8();
instructions[0x01] = new AddRMXRX();
instructions[0x02] = new AddR8RM8();
instructions[0x03] = new AddRXRMX();
instructions[0x04] = new AddALImm8();

                                                     29
命令実行命令実装編 1/3
public class MoveALImm8 implements Instruction{
  public void exeucte(VM vm){
     int imm = vm.getCode8(1);
     vm.setRegister8Low(EAX, imm);
     vm.addEIP(2);
  }
}



                                              30
命令実行命令実装編 2/3
public class MoveR8RM8 implements …
  public void exeucte(VM vm){
     int modrm = vm.getCode8(1);
     int mod = modrm >> 6;
     int register = (modrm >> 3) & 0x07;
     int rm = modrm & 0x07;
     /* 処理 */

                                           31
命令実行命令実装編 3/3
public class MoveR8RM8 implements …
  public void execute(VM vm){
     ModRM modrm = vm.getModRM();
     int value = modrm.getRMValue8();
     modrm.setRegister8(value);
     vm.addEIP(2);
  }
}

                                        32
ModR/M で命令分岐
• ModR/M にオペコー
  ドが含まれる命令が
  ある




                    33
ModR/M による命令分岐の実装
           1/2
public class ExtD0 implements Instruction{
 private Instruction[] instructions;

 public ExtD0(){
   instructions = new Instruction[8];
   instructions[0] = new ROLRM8();
   instructions[1] = new RORRM8();
 }

                                             34
ModR/M による命令分岐の実装
             2/2
public void execute(VM vm){
  int code =
     vm.getModRM(false).getOpecode();



    instruction = instructions[code];
    instruction.execute(vm)
}
                                        35
オペコードが多バイトの場合
public class Ext0F implements Instruction{
  private Instruction[] instructions;
  private Instruction instruction;

  public Ext0F(){
    instructions = new Instruction[256];

     instructions[0x00] = new Descriptor0();
     instructions[0x01] = new Descriptor();
     instructions[0x20] = new MoveR32CRX();

                                               36
自作エミュレータの現状 1/2
•   200 命令ぐらいを適当に実装
•   BIOS を適当に実装
•   セグメントを適当に実装
•   ページングを適当に実装
•   割り込みを適当に実装




                      37
真面目にやれって言ったって…



  まともにやってたら
   大変なんですよ!



              38
自作エミュレータの現状 2/2
•   Mona 0.1.1 を実行できる
•   Mona 0.1.5 が途中でエラーになる
•   xv6 が途中で無限ループに陥る
•   Plan9 が途中でエラーになる




                            39
デモ




デモ

     40
自作エミュレータのデバッグ方
       法
• 最初の頃は…
 – 実行順に命令名を全て表示
 – 命令実行ごとにレジスタの値表示
 – メモリの特定のアドレスにある値表示
• 現状
 – 数百万命令~数千万命令実行されるので全て
   ダンプすると時間かかったり、ログファイル
   が巨大化して死ぬ

                          41
現時点でのデバッグ方法
• いい方法が思いつかない
• とりあえずできること
 – OS にデバッグ用命令を埋め込む
  • コンパイラのバージョンの違いにより、今ではコ
    ンパイルできない OS があってめんどい
 – ある命令が実行される、もしくはメモリのあ
   るアドレスがアクセスされるまでダンプを行
   わない
  • それでも数千~数万命令がダンプされるのはよく
    あること
                             42
厄介なバグ
• 無限ループに陥る
 – 止まってくれると有難い
 – ループ内の条件付きジャンプが多すぎてどの
   ジャンプでループを抜けるのかがわからない




                          43
良いデバッグ方法があったら




教えてください!

                44
まとめ
• 適当に作ってると酷い目にあう
• 無限ループは敵
• x86 エミュレータは他人が作る物




                      45

Más contenido relacionado

La actualidad más candente

x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチMasami Ichikawa
 
BLS署名の実装とその応用
BLS署名の実装とその応用BLS署名の実装とその応用
BLS署名の実装とその応用MITSUNARI Shigeo
 
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010Tsukasa Oi
 
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会Hirotaka Kawata
 
【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門 【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門 sandai
 
【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門 【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門 sandai
 
デバドラを書いてみよう!
デバドラを書いてみよう!デバドラを書いてみよう!
デバドラを書いてみよう!Masami Ichikawa
 
あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿MITSUNARI Shigeo
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくばHirotaka Kawata
 
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチプロセスとコンテキストスイッチ
プロセスとコンテキストスイッチKazuki Onishi
 
Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALVisual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALegtra
 
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 sandai
 
あるコンテキストスイッチの話
あるコンテキストスイッチの話あるコンテキストスイッチの話
あるコンテキストスイッチの話nullnilaki
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめMakiko Konoshima
 
OpenCM IDE、OpenCM 485 EXPを用いてのDynamixel Xシリーズの制御
OpenCM IDE、OpenCM 485 EXPを用いてのDynamixel Xシリーズの制御OpenCM IDE、OpenCM 485 EXPを用いてのDynamixel Xシリーズの制御
OpenCM IDE、OpenCM 485 EXPを用いてのDynamixel Xシリーズの制御ROBOTIS Japan
 
コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!amusementcreators
 
4章 Linuxカーネル - 割り込み・例外 2
4章 Linuxカーネル - 割り込み・例外 24章 Linuxカーネル - 割り込み・例外 2
4章 Linuxカーネル - 割り込み・例外 2mao999
 

La actualidad más candente (20)

x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
BLS署名の実装とその応用
BLS署名の実装とその応用BLS署名の実装とその応用
BLS署名の実装とその応用
 
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
リバースエンジニアリングのための新しいトレース手法 - PacSec 2010
 
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
 
【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門 【学習メモ#9th】12ステップで作る組込みOS自作入門
【学習メモ#9th】12ステップで作る組込みOS自作入門
 
【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門 【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門
 
デバドラを書いてみよう!
デバドラを書いてみよう!デバドラを書いてみよう!
デバドラを書いてみよう!
 
あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿あなたの知らないnopたち@ラボユース合宿
あなたの知らないnopたち@ラボユース合宿
 
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
30日でできない!コンピューター自作入門 - カーネル/VM探検隊@つくば
 
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチプロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
 
Visual C++コード分析を支えるSAL
Visual C++コード分析を支えるSALVisual C++コード分析を支えるSAL
Visual C++コード分析を支えるSAL
 
ゆるバグ
ゆるバグゆるバグ
ゆるバグ
 
【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門 【学習メモ#8th】12ステップで作る組込みOS自作入門
【学習メモ#8th】12ステップで作る組込みOS自作入門
 
あるコンテキストスイッチの話
あるコンテキストスイッチの話あるコンテキストスイッチの話
あるコンテキストスイッチの話
 
SystemV IPC
SystemV IPCSystemV IPC
SystemV IPC
 
2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ2011.09.18 v7から始めるunix まとめ
2011.09.18 v7から始めるunix まとめ
 
OpenCM IDE、OpenCM 485 EXPを用いてのDynamixel Xシリーズの制御
OpenCM IDE、OpenCM 485 EXPを用いてのDynamixel Xシリーズの制御OpenCM IDE、OpenCM 485 EXPを用いてのDynamixel Xシリーズの制御
OpenCM IDE、OpenCM 485 EXPを用いてのDynamixel Xシリーズの制御
 
コルーチンを使おう
コルーチンを使おうコルーチンを使おう
コルーチンを使おう
 
コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!コルーチンでC++でも楽々ゲーム作成!
コルーチンでC++でも楽々ゲーム作成!
 
4章 Linuxカーネル - 割り込み・例外 2
4章 Linuxカーネル - 割り込み・例外 24章 Linuxカーネル - 割り込み・例外 2
4章 Linuxカーネル - 割り込み・例外 2
 

Similar a d-kami x86-2

とあるDBAの黒い画面(ターミナル)II
とあるDBAの黒い画面(ターミナル)IIとあるDBAの黒い画面(ターミナル)II
とあるDBAの黒い画面(ターミナル)IIKazuhiro Yoshikawa
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1信之 岩永
 
Exploring the x64
Exploring the x64Exploring the x64
Exploring the x64FFRI, Inc.
 
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門Akira Shimosako
 
LPICレベル1技術解説セミナー(2012/11/11)
LPICレベル1技術解説セミナー(2012/11/11)LPICレベル1技術解説セミナー(2012/11/11)
LPICレベル1技術解説セミナー(2012/11/11)Kazuko Itoda
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Takuya Matsunaga
 
Dbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publishDbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publishYohei Azekatsu
 
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版Takuya Matsunaga
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)inaz2
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLakirahiguchi
 
LPICレベル1技術解説セミナー(2012/11/11)
LPICレベル1技術解説セミナー(2012/11/11)LPICレベル1技術解説セミナー(2012/11/11)
LPICレベル1技術解説セミナー(2012/11/11)Kazuko Kanai
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセスMakoto Kato
 
Spmv9forpublic
Spmv9forpublicSpmv9forpublic
Spmv9forpublicT2C_
 
Heliumエンジンの設計と実装
Heliumエンジンの設計と実装Heliumエンジンの設計と実装
Heliumエンジンの設計と実装DADA246
 
20121217 jawsug-yokohama
20121217 jawsug-yokohama20121217 jawsug-yokohama
20121217 jawsug-yokohamaTetsuya Chiba
 
セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009
セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009
セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009Tsukasa Oi
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設Minoru Nakamura
 

Similar a d-kami x86-2 (20)

とあるDBAの黒い画面(ターミナル)II
とあるDBAの黒い画面(ターミナル)IIとあるDBAの黒い画面(ターミナル)II
とあるDBAの黒い画面(ターミナル)II
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
 
Exploring the x64
Exploring the x64Exploring the x64
Exploring the x64
 
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
CLUB DB2 第137回:基礎から再入門!DB2モニタリング入門
 
LPICレベル1技術解説セミナー(2012/11/11)
LPICレベル1技術解説セミナー(2012/11/11)LPICレベル1技術解説セミナー(2012/11/11)
LPICレベル1技術解説セミナー(2012/11/11)
 
Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版Dalvikバイトコードリファレンスの読み方 改訂版
Dalvikバイトコードリファレンスの読み方 改訂版
 
From IA-32 to avx-512
From IA-32 to avx-512From IA-32 to avx-512
From IA-32 to avx-512
 
Dbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publishDbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publish
 
Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版Dalvik仮想マシンのアーキテクチャ 改訂版
Dalvik仮想マシンのアーキテクチャ 改訂版
 
システムコール
システムコールシステムコール
システムコール
 
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
ROP Illmatic: Exploring Universal ROP on glibc x86-64 (ja)
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
LPICレベル1技術解説セミナー(2012/11/11)
LPICレベル1技術解説セミナー(2012/11/11)LPICレベル1技術解説セミナー(2012/11/11)
LPICレベル1技術解説セミナー(2012/11/11)
 
Minix Learning
Minix LearningMinix Learning
Minix Learning
 
Firefoxの開発プロセス
Firefoxの開発プロセスFirefoxの開発プロセス
Firefoxの開発プロセス
 
Spmv9forpublic
Spmv9forpublicSpmv9forpublic
Spmv9forpublic
 
Heliumエンジンの設計と実装
Heliumエンジンの設計と実装Heliumエンジンの設計と実装
Heliumエンジンの設計と実装
 
20121217 jawsug-yokohama
20121217 jawsug-yokohama20121217 jawsug-yokohama
20121217 jawsug-yokohama
 
セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009
セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009
セキュアVMの構築 (IntelとAMDの比較、あともうひとつ...) - AVTokyo 2009
 
x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設x86-64/Linuxに独自メモリ空間を勝手増設
x86-64/Linuxに独自メモリ空間を勝手増設
 

Más de Daisuke Kamikawa

機械語プログラミング
機械語プログラミング機械語プログラミング
機械語プログラミングDaisuke Kamikawa
 
Javaで作る超簡易x86エミュレータ
Javaで作る超簡易x86エミュレータJavaで作る超簡易x86エミュレータ
Javaで作る超簡易x86エミュレータDaisuke Kamikawa
 
自作x86エミュレータの終焉
自作x86エミュレータの終焉自作x86エミュレータの終焉
自作x86エミュレータの終焉Daisuke Kamikawa
 
第八回カーネル/VM d-kami 没スライド
第八回カーネル/VM d-kami 没スライド第八回カーネル/VM d-kami 没スライド
第八回カーネル/VM d-kami 没スライドDaisuke Kamikawa
 

Más de Daisuke Kamikawa (6)

機械語プログラミング
機械語プログラミング機械語プログラミング
機械語プログラミング
 
自作GPUへの道
自作GPUへの道自作GPUへの道
自作GPUへの道
 
今更GWTで遊ぶぜ!
今更GWTで遊ぶぜ!今更GWTで遊ぶぜ!
今更GWTで遊ぶぜ!
 
Javaで作る超簡易x86エミュレータ
Javaで作る超簡易x86エミュレータJavaで作る超簡易x86エミュレータ
Javaで作る超簡易x86エミュレータ
 
自作x86エミュレータの終焉
自作x86エミュレータの終焉自作x86エミュレータの終焉
自作x86エミュレータの終焉
 
第八回カーネル/VM d-kami 没スライド
第八回カーネル/VM d-kami 没スライド第八回カーネル/VM d-kami 没スライド
第八回カーネル/VM d-kami 没スライド
 

d-kami x86-2