CLRの基礎 - プログラミング .NET Framework 第3版 読書会

947 views
859 views

Published on

Published in: Technology
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
947
On SlideShare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
3
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

CLRの基礎 - プログラミング .NET Framework 第3版 読書会

  1. 1. プログラミング .NET Framework 第3版~第1部 CLRの基礎
  2. 2. 尾崎 義尚 Ozaki Yoshihisa• Twitter:@yoshioms• http://d.hatena.ne.jp/yoshioms/• 詳細プロファイル:http://bit.ly/yoshioms• 3月末で会社を退社。現在、無職• 家族構成: – 僕:無職 – 妻:専業主婦 – 猫A – 猫B(C)
  3. 3. プログラミング .NET Framework 第3版CLR via C# Third Edition
  4. 4. プログラミング.NET Framework 第3版• 936ページ(第2版は、736ページ) – 20%以上も増量!
  5. 5. プログラミング.NET Framework 第3版• 体重1.4kg
  6. 6. プログラミング.NET Framework 第3版• 体重1.4kg
  7. 7. 序文19ページ
  8. 8. 参加者のタイプを想定 CLR GC FCL タイプシステム Dynamic Serialize Threading アーキテクチャ 業務 開発プロセス ハードウェアフレームワーク コーディング 序文
  9. 9. 筆者紹介• 著者: Kristin Trace(Jeffreyの妻)• Aidan(6歳)、Grant(2歳)の母
  10. 10. Jeffrey RichterWintellect Co-Founder出身校: ドレクセル大学 Computer Science居住地: Kirkland, Washington出身地: フィラデルフィア
  11. 11. 序文候補者ランキング1 Bill Gates アメリカ合衆国の実業家2 Steve Ballmer アメリカ合衆国の実業家3 Catherine Zeta-Jones イギリスの女優 ・・・14 Kristin Trace 主婦
  12. 12. Catherine Zeta-Jones• 誕生日:1969年9月25日 (41歳)• 国籍:イギリス• 職業:女優• 配偶者:Michael Douglas• 主な作品: – マスク・オブ・ゾロ – トラフィック – シカゴ 接点
  13. 13. 第1部 CLRの基礎
  14. 14. 今回やろうとしていることコンパイル 読み込み 起動
  15. 15. 今回やろうとしていることコンパイル 読み込み 起動
  16. 16. コンパイルソースファイル コンパイラ アセンブリ CSC VBC 中間言語 (IL: Intermediate Language)
  17. 17. アセンブリの構造• Windows PE(Portable Executable) – PEとは、要はCOFF(Common Object File Format) • Unixなどでも使われているオブジェクト ファイル フォー マット 実行ファイル MS-DOS 未 OEM MS-DOS 2.0 未 PEヘッダ セクションヘッダ インポート ページ 2.0 互換 使 情報 スタブ & 使 Import Information ヘッダ 用 リロケーション 用 Export Information ・・・ テーブル Base relocations Resource Information MS-DOS Stub PE Signature COFF File Header Option Header“This program cannot Machine Magic “PE”¥0¥0be run in DOS mode” MajorLinkerVersion NumberOfSections MinorLinkerVersion TimeDateStamp SizeOfCode SizeOfInitializedData PointerToSymbolTable SizeOfUninitializedData AddressOfEntryPoint NumberOfSymbols BaseOfCode SizeOfOptionalHeader Characteristics
  18. 18. ファイルヘッダの確認dumpbin /HEADERS a.exe
  19. 19. プラットフォーム指定による動作(/platform)/platform x86 Windows x64 Windows IA64 Windowsなし 32ビット 64ビット 64ビットanycpux86 32ビット WoW64 WoW64x64 動作しない 64ビット 動作しないItanium 動作しない 動作しない 64ビット 通常は指定なし(anycpu)でよい
  20. 20. X64プラットフォーム指定C:¥Windows¥Microsoft.NET¥Framework64¥v4.0.30319¥csc /platform:x64 a.cs Windows 7 x86 x64 app
  21. 21. プラットフォーム別Stack x86 OS Windows 7 x86 anycpu app
  22. 22. プラットフォーム別Stack x64 OSWindows 7 x64 anycpu appWindows 7 x64 Windows 7 x64 x64 app x86 app
  23. 23. アセンブリの内部構造• アセンブリの内部構造 マニフェスト マニフェスト メタデータ メタデータ コード (IL) コード (IL) リソース リソース .EXE .DLL
  24. 24. アセンブリの中身 – マニフェスト // Metadata version: v4.0.30319 .assembly extern mscorlib アセンブリ { メタデータ .publickeytoken = (B7 7A 5C 56 19 34 E0 89 ) // .z¥V.4.. .ver 4:0:0:0 } .assembly a { 型メタデータ .custom instance void [mscorlib]System.Runtime.CompilerServices.CompilationRelaxationsAttribute::.ct or(int32) = ( 01 00 08 00 00 00 00 00 ) .custom instance void [mscorlib]System.Runtime.CompilerServices.RuntimeCompatibilityAttribute::.cto r() = ( 01 00 01 00 54 02 16 57 72 61 70 4E 6F 6E 45 78 // ....T..WrapNonEx 63 65 70 74 69 6F 6E 54 68 72 6F 77 73 01 ) // ceptionThrows. .hash algorithm 0x00008004 .ver 0:0:0:0 } .module a.exe // MVID: {65EF1A30-A0C7-42B6-8BC9-EA8332F6DEFC} .imagebase 0x00400000 .file alignment 0x00000200 .stackreserve 0x00100000 .subsystem 0x0003 // WINDOWS_CUI .corflags 0x00000001 // ILONLY // Image base: 0x018E0000
  25. 25. 最適化スイッチ(/optimize /debug) P15/optimize /debug IL最適化 JIT最適化 - - × ○ IL読書用 - (+ | full | pdbonly) × × Debugビルド + どれでも ○ ○ Releaseビルド Edit & Continue用 /optimize- Nop / 分岐命令 .pdbファイルの生成 /debug+ デバッグ可能属性の付与→JITへの通知
  26. 26. 今回やろうとしていることコンパイル 読み込み 起動
  27. 27. アセンブリの依存関係 dumpbin /DEPENDENTS a.exe mscoree.dll にのみ依存している。 x86 C:¥Windows¥System32 X64, IA6464ビット版:C:¥Windows¥System3232ビット版:C:¥Windows¥SysWoW64
  28. 28. アセンブリのロード • Fx4.0からは、mscoreei.dllが追加されている.NET Framework 2.0 %systemroot%¥ %windir%¥Framework¥v2.x¥ a20.exe mscoree.dll mscorwks.dll Shim.NET Framework 4.0 %systemroot%¥ %windir%¥Framework¥v4.x¥ %windir%¥Framework¥v4.x¥ a40.exe mscoree.dll mscoreei.dll clr.dll Shim
  29. 29. Shim AssemblyCLR Shim = mscoree.dll
  30. 30. なぜShimが2重化したのか• バージョンが上がるごとに再起動が必要だったC:¥ Windows これを更新するには、再起 System32 動が必要 Microsoft.NET ここなら大丈夫☺ Framework V5.x
  31. 31. 今回やろうとしていることコンパイル 読み込み 起動
  32. 32. 起動• CLR初期化 – AppDomainの作成• EXEアセンブリのロード• エントリー・ポイント・メソッド呼び出し
  33. 33. メソッドの呼び出し• 初回は、JITCompilerの呼び出し• 2回目以降はキャッシュされたネイティブ呼び出し a40.exe mscorlib メソッドテーブル Console NTV ReadLine JIT NTV NativeMain() WriteLine JIT{ IL var str = Console.ReadLine(): Console.WriteLine(str);} JIT JITCompiler ※メソッドテーブルはイメージです。実際のものとは多少異なる可能性があります。
  34. 34. 今回やろうとしていることコンパイル 読み込み 起動

×