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.
汎用レジスタの説明そして x86 エミュレータ   2012 年 5 月 26 日       上川大介                     1
自己紹介• 名前 上川大介• Twitter d_kami• はてな d-kami• Java をメインに使っているが、自作 OS  を作り始めたことにより、 x86 エミュレ  ータを作り始めた                        ...
目的• 前半 – x86 のレジスタに慣れてもらう – x86 の一部なら意外と簡単だということをわ   かってもうらう• 後半 – 自分なりのエミュレータの作り方をふーんと   思いながら見てもらう                      ...
このスライドのルール•   アセンブリ言語は 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...
レジスタの選び方1. オペコードにレジスタ番号を埋め込む2. ModR/M で指定する3. 命令によっては使うレジスタが固定され   る                    17
オペコードにレジスタ番号を埋め           込む•   MOV 命令( B0 ~ BF )•   XCHG 命令( 90 ~ 97 )•   PUSH 命令( 50 ~ 57 )•   POP 命令( 58 ~ 5F )•   INC ...
ModR/M で指定する• ModR/M はオペコードの次のバイト• ModR/M があるかどうかは命令次第• ModR/M の構造ModR/M が 55 だった場合0101010101 が Mod 、 101 が R/M010 がレジスタイン...
レジスタが固定される場合•   演算命令の一部で EAX が利用される•   MUL 、 DIV で EAX と EDX•   繰り返し命令で ECX•   メモリ転送命令で ESI 、 EDI                         ...
メモリのアドレス指定方法• ModR/M で指定する – [EBX], 0xA0000000 – C7 03 00 00 00 A0• string 命令を使う – MOVSB   • ESI や EDI がメモリアドレスになる   • MOV...
前半のまとめ• 汎用レジスタが 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 ...
命令実装 : エミュレータ本体編            1/2public void execute(){   int code = memory[eip] & 0xFF;   Instruction instruction =  instru...
命令実装 : エミュレータ本体編        2/2public void execute(){   int code = getCode8(0);   Instruction instruction =  instructions[code...
エミュレータ本体の変化• 最初はオペコードを取得するためにプロ  グラムカウンタの値をそのまま利用• getCode8 を作成• getCode8 ではセグメントやページングで  のアドレス変換を行って、オペコードの  位置を求めている    ...
InstructionsInstruction[] instructions = new Instruction[256];instructions[0x00] = new AddRM8R8();instructions[0x01] = new...
命令実行命令実装編 1/3public class MoveALImm8 implements Instruction{  public void exeucte(VM vm){     int imm = vm.getCode8(1);   ...
命令実行命令実装編 2/3public class MoveR8RM8 implements …  public void exeucte(VM vm){     int modrm = vm.getCode8(1);     int mod ...
命令実行命令実装編 3/3public class MoveR8RM8 implements …  public void execute(VM vm){     ModRM modrm = vm.getModRM();     int val...
ModR/M で命令分岐• ModR/M にオペコー  ドが含まれる命令が  ある                    33
ModR/M による命令分岐の実装           1/2public class ExtD0 implements Instruction{ private Instruction[] instructions; public ExtD0...
ModR/M による命令分岐の実装             2/2public void execute(VM vm){  int code =     vm.getModRM(false).getOpecode();    instructi...
オペコードが多バイトの場合public class Ext0F implements Instruction{  private Instruction[] instructions;  private Instruction instruct...
自作エミュレータの現状 1/2•   200 命令ぐらいを適当に実装•   BIOS を適当に実装•   セグメントを適当に実装•   ページングを適当に実装•   割り込みを適当に実装                      37
真面目にやれって言ったって…  まともにやってたら   大変なんですよ!              38
自作エミュレータの現状 2/2•   Mona 0.1.1 を実行できる•   Mona 0.1.5 が途中でエラーになる•   xv6 が途中で無限ループに陥る•   Plan9 が途中でエラーになる                     ...
デモデモ     40
自作エミュレータのデバッグ方       法• 最初の頃は… – 実行順に命令名を全て表示 – 命令実行ごとにレジスタの値表示 – メモリの特定のアドレスにある値表示• 現状 – 数百万命令~数千万命令実行されるので全て   ダンプすると時間か...
現時点でのデバッグ方法• いい方法が思いつかない• とりあえずできること – OS にデバッグ用命令を埋め込む  • コンパイラのバージョンの違いにより、今ではコ    ンパイルできない OS があってめんどい – ある命令が実行される、もしく...
厄介なバグ• 無限ループに陥る – 止まってくれると有難い – ループ内の条件付きジャンプが多すぎてどの   ジャンプでループを抜けるのかがわからない                          43
良いデバッグ方法があったら教えてください!                44
まとめ• 適当に作ってると酷い目にあう• 無限ループは敵• x86 エミュレータは他人が作る物                      45
Upcoming SlideShare
Loading in …5
×

d-kami x86-2

1,518 views

Published on

  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/yyxo9sk7 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • DOWNLOAD THIS BOOKS INTO AVAILABLE FORMAT (Unlimited) ......................................................................................................................... ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download Full EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ACCESS WEBSITE for All Ebooks ......................................................................................................................... Download Full PDF EBOOK here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download EPUB Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... Download doc Ebook here { https://tinyurl.com/y6a5rkg5 } ......................................................................................................................... ......................................................................................................................... ......................................................................................................................... .............. Browse by Genre Available eBooks ......................................................................................................................... Art, Biography, Business, Chick Lit, Children's, Christian, Classics, Comics, Contemporary, Cookbooks, Crime, Ebooks, Fantasy, Fiction, Graphic Novels, Historical Fiction, History, Horror, Humor And Comedy, Manga, Memoir, Music, Mystery, Non Fiction, Paranormal, Philosophy, Poetry, Psychology, Religion, Romance, Science, Science Fiction, Self Help, Suspense, Spirituality, Sports, Thriller, Travel, Young Adult,
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

d-kami x86-2

  1. 1. 汎用レジスタの説明そして x86 エミュレータ 2012 年 5 月 26 日 上川大介 1
  2. 2. 自己紹介• 名前 上川大介• Twitter d_kami• はてな d-kami• Java をメインに使っているが、自作 OS を作り始めたことにより、 x86 エミュレ ータを作り始めた 2
  3. 3. 目的• 前半 – x86 のレジスタに慣れてもらう – x86 の一部なら意外と簡単だということをわ かってもうらう• 後半 – 自分なりのエミュレータの作り方をふーんと 思いながら見てもらう 3
  4. 4. このスライドのルール• アセンブリ言語は Intel 記法で記述する• 命令名やレジスタ名は大文字にする• 16 進数が突然でてきます• 10 進数も混ざったりしてます 4
  5. 5. 汎用レジスタ• 多種の目的で利用できるレジスタ• 代入命令で自由に書き換え可能• 命令によっては利用方法が決まっている• x86 には汎用レジスタが8つある 5
  6. 6. 汎用レジスタの種類( 32bit )• EAX• ECX• EDX• EBX• ESP• EBP• ESI• EDI 6
  7. 7. EAX• アキュムレータ• 演算命令で EAX 専用の命令が存在する• MUL や DIV では必ず使う• C 言語の関数の返り値が入ってたりする 7
  8. 8. アキュムレータを使うとこうな る• ADD AL, 0xA0 だと… – 04 A0• ADD CL, 0xA0 だと… – 80 C1 A0 8
  9. 9. ECX• カウンタ• ループでカウンタとして利用される• シフトローテート命令でも利用される 9
  10. 10. EDX• データ• MUL や DIV で利用される• I/O 操作でも利用される 10
  11. 11. EBX• ベースアドレス• BIOS Function Call で利用される• 詳しくないのでわかりません! 11
  12. 12. ESP• スタックポインタ• スタックの操作で利用される (PUSH, POP)• サブルーチンコールで利用される (CALL, RET) 12
  13. 13. EBP• ベーススタックポインタ• C 言語のプログラムをコンパイルすると よくでてくる 13
  14. 14. ESI• ソースインデックス• メモリ転送命令で利用される• メモリの転送元番地を表す 14
  15. 15. EDI• デスティネーションインデックス• メモリ転送命令で利用される• メモリの転送先番地を表す 15
  16. 16. 32bit レジスタ• EAX 、 ECX など – 下位 16bit に AX や CX と言った名前でアクセ ス – 下位 16bit の下位 8bit に AL 、 CL と言った名 前でアクセス( EAX 、 ECX 、 EDX 、 EBX のみ) – 下位 16bit の上位 8bit に AH 、 CH と言った名 前でアクセス( EAX 、 ECX 、 EDX 、 EBX のみ) 16
  17. 17. レジスタの選び方1. オペコードにレジスタ番号を埋め込む2. ModR/M で指定する3. 命令によっては使うレジスタが固定され る 17
  18. 18. オペコードにレジスタ番号を埋め 込む• MOV 命令( B0 ~ BF )• XCHG 命令( 90 ~ 97 )• PUSH 命令( 50 ~ 57 )• POP 命令( 58 ~ 5F )• INC 命令 (40 ~ 47)• DEC 命令 (48 ~ 4F) 18
  19. 19. ModR/M で指定する• ModR/M はオペコードの次のバイト• ModR/M があるかどうかは命令次第• ModR/M の構造ModR/M が 55 だった場合0101010101 が Mod 、 101 が R/M010 がレジスタインデックスまたはオペコ ード 19
  20. 20. レジスタが固定される場合• 演算命令の一部で EAX が利用される• MUL 、 DIV で EAX と EDX• 繰り返し命令で ECX• メモリ転送命令で ESI 、 EDI 20
  21. 21. メモリのアドレス指定方法• ModR/M で指定する – [EBX], 0xA0000000 – C7 03 00 00 00 A0• string 命令を使う – MOVSB • ESI や EDI がメモリアドレスになる • MOV [EDI], [ESI] のようなことをやる • MOV [EDI], [ESI] をアセンブラにかけると怒られ ますが 21
  22. 22. 前半のまとめ• 汎用レジスタが 8 つある• メモリアドレスは ModR/M や string 命令 22
  23. 23. x86 エミュレータ編• 初期の頃のソースコードの解説• エミュレータは Java で作った• Google Web Toolkit を使った HTML5 版も あるよ! 23
  24. 24. 初期の頃の問題点• 知らないことが多すぎた• ModR/M を知らなかった 24
  25. 25. x86 エミュレータ 命令実装前public class VM{ private int eip; private byte[] memory; // イメージファイルの読み込み public void load(String name){ /* 読み込む処理 */ }} 25
  26. 26. 命令実装 : エミュレータ本体編 1/2public void execute(){ int code = memory[eip] & 0xFF; Instruction instruction = instructions[code]; instruction.execute(this);} 26
  27. 27. 命令実装 : エミュレータ本体編 2/2public void execute(){ int code = getCode8(0); Instruction instruction = instructions[code]; instruction.execute(this);} 27
  28. 28. エミュレータ本体の変化• 最初はオペコードを取得するためにプロ グラムカウンタの値をそのまま利用• getCode8 を作成• getCode8 ではセグメントやページングで のアドレス変換を行って、オペコードの 位置を求めている 28
  29. 29. InstructionsInstruction[] 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
  30. 30. 命令実行命令実装編 1/3public class MoveALImm8 implements Instruction{ public void exeucte(VM vm){ int imm = vm.getCode8(1); vm.setRegister8Low(EAX, imm); vm.addEIP(2); }} 30
  31. 31. 命令実行命令実装編 2/3public 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
  32. 32. 命令実行命令実装編 3/3public class MoveR8RM8 implements … public void execute(VM vm){ ModRM modrm = vm.getModRM(); int value = modrm.getRMValue8(); modrm.setRegister8(value); vm.addEIP(2); }} 32
  33. 33. ModR/M で命令分岐• ModR/M にオペコー ドが含まれる命令が ある 33
  34. 34. ModR/M による命令分岐の実装 1/2public class ExtD0 implements Instruction{ private Instruction[] instructions; public ExtD0(){ instructions = new Instruction[8]; instructions[0] = new ROLRM8(); instructions[1] = new RORRM8(); } 34
  35. 35. ModR/M による命令分岐の実装 2/2public void execute(VM vm){ int code = vm.getModRM(false).getOpecode(); instruction = instructions[code]; instruction.execute(vm)} 35
  36. 36. オペコードが多バイトの場合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
  37. 37. 自作エミュレータの現状 1/2• 200 命令ぐらいを適当に実装• BIOS を適当に実装• セグメントを適当に実装• ページングを適当に実装• 割り込みを適当に実装 37
  38. 38. 真面目にやれって言ったって… まともにやってたら 大変なんですよ! 38
  39. 39. 自作エミュレータの現状 2/2• Mona 0.1.1 を実行できる• Mona 0.1.5 が途中でエラーになる• xv6 が途中で無限ループに陥る• Plan9 が途中でエラーになる 39
  40. 40. デモデモ 40
  41. 41. 自作エミュレータのデバッグ方 法• 最初の頃は… – 実行順に命令名を全て表示 – 命令実行ごとにレジスタの値表示 – メモリの特定のアドレスにある値表示• 現状 – 数百万命令~数千万命令実行されるので全て ダンプすると時間かかったり、ログファイル が巨大化して死ぬ 41
  42. 42. 現時点でのデバッグ方法• いい方法が思いつかない• とりあえずできること – OS にデバッグ用命令を埋め込む • コンパイラのバージョンの違いにより、今ではコ ンパイルできない OS があってめんどい – ある命令が実行される、もしくはメモリのあ るアドレスがアクセスされるまでダンプを行 わない • それでも数千~数万命令がダンプされるのはよく あること 42
  43. 43. 厄介なバグ• 無限ループに陥る – 止まってくれると有難い – ループ内の条件付きジャンプが多すぎてどの ジャンプでループを抜けるのかがわからない 43
  44. 44. 良いデバッグ方法があったら教えてください! 44
  45. 45. まとめ• 適当に作ってると酷い目にあう• 無限ループは敵• x86 エミュレータは他人が作る物 45

×