Download
slide1 n.
Skip this Video
Loading SlideShow in 5 Seconds..
.NET PowerPoint Presentation

.NET

254 Vues Download Presentation
Télécharger la présentation

.NET

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

  1. .NET Matthew Conover May 2002

  2. What is .NET? • .NET = dumb name • .NET is a framework • .NET is OS and platform independent • .NET is language-insensitive • .NET specs are publicly available

  3. Topics of Discussion • Introduction to .NET • Assemblies and Metadata • Microsoft’s implementation of .NET • .NET Hook Library (dotNetHookLibrary)

  4. Introduction to .NET • .NET Specifications • Partition I – Architecture • Partition II – Metadata • Partition III – Common Intermediate Language • Partition IV – Library • Partition V – Annexes • Class Library (XML specification)

  5. Introduction to .NET • Base Class Library (BCL) • Shared among all languages • Common Language Runtime (CLR) • Hosts managed code

  6. Introduction to .NETBase Class Library • Similar to Java’s System namespace. • Used by all .NET applications • Has classes for IO, threading, database, text, graphics, console, sockets/web/mail, security, cryptography, COM, run-time type discovery/invocation, assembly generation

  7. Introduction to .NET • Common Language Runtime (CLR) • Common Type System (CTS) • Execution Engine (EE)

  8. Introduction to .NETCommon Language Runtime • Common Type System • Specifies certain types required to be hosted by CLR • Specifies rules for class, struct, enums, interface, delegate, etc. • Everything is actually an object

  9. Introduction to .NETCommon Language Runtime • Execution Engine • Compiles Microsoft Intermediate Language (MSIL) into native code • Handles garbage collection • Handles exceptions • Enforces code access security (sandbox) • Handles verification • Managed v. Unmanaged

  10. Introduction to .NET Assembly BCL Class Loader External Assembly JIT CLR Machine Code

  11. Assemblies • .NET Library/Executable (PE file format) • Single-file or multi-file assemblies • Modular design • Eliminates DLL problems • Locations resolved at runtime • Components: • Metadata • MSIL (or native) code

  12. AssembliesPhysical Layout Single-file Assembly MSDOS Header PE Header PE Section Headers Includes .NET Header Code section .text (includes Metadata) Data section .rsrc or .data Relocations section .reloc or .rdata

  13. Assemblies • .NET Executable (PE file format) • Single-file or multi-file assemblies • Modular design • Components: • Metadata • MSIL (or native) code

  14. AssembliesMetadata • Contains all .NET application data • Very revealing! • Needed for MSIL compilation • Assembly can be converted to native format • Streams or heaps (sections of related data)

  15. AssembliesMetadata Signature, Version, Flags Stream count (n) Metadata Header Data offset Stream size Name (variable length) Stream Header 1 … Stream Header n … Stream bodies 1-n

  16. AssembliesStreams • #Strings (a.k.a. strings heap) • Array of strings • #US (a.k.a. user strings heap) • Array of strings used by application at runtime • #GUID • Array of GUIDs (16 bytes each) • #Blob • Contains compressed binary data • #- or #~ • Contains tables of methods, fields, etc.

  17. Assemblies#~ and #- Stream Version Heap sizes Valid tables (n) Tables Header Table row count Valid Table 1 … Valid Table n … Tables 1-n

  18. AssembliesTables in #~/#- Stream • In a predefined order • MethodDef = table 6 • Param table = table 8 • Each table contains specific types • MethodDef = method definitions • TypeDef = type definitions • AssemblyRef = assemblies references • Tables interact with each other • Tables interact with certain heaps

  19. AssembliesSample - MethodDef Table Relative Virtual Address (RVA) Offset to method Implementation flags Method flags Method name offset In #Strings Method signature offset In #Blob Parameters index In Param table

  20. AssembliesSample - MethodDef Table Param Table Flags Sequence number Parameter name offset In #Strings Method Signature Blob Flags Parameter count Return type Parameter types

  21. AssembliesSample - func(int arg) MethodDef Param func arg #Strings … … “func” “arg” … #Blob func method signature arg type signature …

  22. Assemblies • .NET Executable (PE file format) • Single-file or multi-file assemblies • Components: • Metadata • MSIL (or native) code

  23. AssembliesMSIL • Pseudo-assembly • Converted into native code • Object “aware” intermediate language • Examples: nop, break, ret, call, callvirt, newobj, newarr, add, mul, xor, arglist, sizeof, throw, catch, dup • Supports up to 512 opcodes • 0xFE = first byte of two byte opcodes • All calls are stack-based

  24. AssembliesCall Stack MSIL C# ` ldc.i4.1 ldc.i4.2 call ClassType::func(Int32, Int32) ClassType a; a.func(1, 2) 1 2 this pointer Stack top Left-to-right ordering

  25. Assemblies • Sample IL

  26. AssembliesMSIL • Uses “tokens” instead of pointers MSIL Assembler 0x1f 0x09 0x28 0x06000006 ldc.i4.s 9 call Print(Int32) Method token

  27. AssembliesTokens • A replacement for pointers • References a row in a table Token Table Number Row Index Upper 8 bits Lower 24 bits

  28. AssembliesMSIL Samples • ld = load on stack, st = store from stack • stloc • Stores a value from the stack into local variable • ldarg • Puts an argument on the stack • ldelem • Puts the value of an element on the stack

  29. Microsoft’s .NET Implementation • File locations • System libraries • .NET application flow

  30. Microsoft’s .NET ImplementationFile Locations • Framework: %SystemRoot%\Microsoft.NET • Global Assembly Cache (GAC): %SystemRoot%\Assembly + • \GAC • \NativeImages*

  31. Microsoft’s .NET Implementation • File locations • System libraries • .NET application flow

  32. Microsoft’s .NET ImplementationSystem Libraries • mscoree.dll (execution engine) • mscorwks.dll (does most initialization) • mscorjit.dll (contains JIT) • mscorlib.dll (BCL) • fusion.dll (assembly binding)

  33. Microsoft’s .NET ImplementationSystem Libraries mscoree.dll mscorwks.dll fusion.dll mscorlib.dll mscorjit.dll

  34. Microsoft’s .NET Implementation • File locations • System libraries • .NET application flow

  35. Microsoft’s .NET Implementation.NET Application Flow Application mscoree.dll Entry point _CorExeMain Main mscorwks.dll _CorExeMain CoInitializeEE

  36. Microsoft’s .NET Implementation.NET Application Flow • Jumps to _CorExeMain (mscoree) • Calls _CorExeMain in mscorwks.dll • _CorExeMain calls CoInitializeEE • CoInitializeEE calls: • EEStartup • ExecuteEXE

  37. EEStartup • GCHeap.Initialize • ECall.Init • SetupGenericPInvokeCalliStub • PInvokeCalliWorker • NDirect.Init • UMThunkInit.UMThunkInit • COMDelegate.Init • ExecutionManger.Init • COMNlsInfo.InitializeNLS

  38. EEStartup (cont.) • Security::Start • SystemDomain.Init • SystemDomain.NotifyProfilerStartup (ICorProfiler) • SystemDomain.NotifyNewDomainLoads • SystemDomain.PublishAppDomainAndInformDebugger (ICorPublish/ICorDebug)

  39. SystemDomain.Init • LoadBaseSystemClasses • SystemDomain.CreatePreallocatedExceptions

  40. LoadBaseSystemClasses • SystemDomain.LoadSystemAssembly • Loads mscorlib.dll • Binder::StartupMscorlib • Binder::FetchClass(OBJECT) • MethodTable::InitForFinalization • InitJITHelpers2 • Binder::FetchClass(VALUE) • Binder::FetchClass(ARRAY)

  41. LoadBaseSystemClasses • Binder.FetchType(OBJECT_ARRAY) • Binder.FetchClass(STRING) • Binder.FetchClass(ENUM) • Binder.FetchClass(ExceptionClass) • Binder.FetchClass(OutOfMemoryExceptionClass) • Binder.FetchClass(StackOverflowExceptionClass)

  42. LoadBaseSystemClasses • Binder.FetchClass(ExecutionEngineExceptionClass) • Binder.FetchClass(DelegateClass) • Binder.FetchClass(MultiDelegateClass)

  43. .NET Application Flow • Jumps to _CorExeMain (mscoree) • Calls _CorExeMain in mscorwks.dll • _CorExeMain calls CoInitializeEE • CoInitializeEE calls: • EEStartup • ExecuteEXE

  44. ExecuteEXE • StrongNamesignatureVerification • In mscorsn.dll • PEFile::Create • Loads executable • ExecuteMainMethod • FusionBind.CreateFusionName • Assembly.ExecuteMainMethod

  45. ExecuteMainMethod • Thread.EnterRestrictiedContext • PEFile::GetMDImport • SystemDomain.SetDefaultDomainAttributes • Sets entry point • SystemDomain.InitializeDefaultDomain • BaseDomain.LoadAssembly

  46. ExecuteEXE • StrongNamesignatureVerification • In mscorsn.dll • PEFile::Create • Loads executable • ExecuteMainMethod • FusionBind.CreateFusionName • Assembly.ExecuteMainMethod

  47. Assembly.ExecuteMainMethod • Assembly::GetEntryPoint • ClassLoader::ExecuteMainMethod • EEClass:FindMethod(entry point token)

  48. EEClass.FindMethod • ValidateMainMethod • CorCommandLine.GetArgvW • MethodDesc.Call • MethodDesc.IsRemotingIntercepted • MethodDesc.CallDescr calls MethodDesc.CallDescrWorker • CallDescrWorker calls Main()

  49. .NET Application • Main() needs to be compiled • Main() calls PreStubWorker (mscorwks) • PreStubWorker • Compiles all MSIL methods • Calls MethodDesc.DoPrestub

  50. MethodDesc.DoPrestub • MethodDesc.GetSecurityFlags • MethodDesc.GetUnsafeAddrofCode • MethodDesc.GetILHeader • MethodDesc.GetRVA • COR_DECODE_METHOD • Decode tiny/fat format • Security._CanSkipVerification