我们写一个很简单的.Net的Console的Application.Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
>>dumpbin -all ConsoleApplication1.exe>c:\b.txtÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
>>notepad c:\b.txtÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
去掉二进制代码之后,我们得到下面的结构和结果:Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
Dump of file ConsoleApplication1.exeÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
PE signature foundÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
File Type: EXECUTABLE IMAGE FILE HEADER VALUESÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            14C machine (x86)Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              3 number of sectionsÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
        47216963 time date stamp Fri Oct 26 12:13:23 2007Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 file pointer to symbol tableÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 number of symbolsÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              E0 size of optional headerÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            10E characteristicsÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
                  ExecutableÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
                  Line numbers strippedÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
                  Symbols strippedÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
                  32 bit word machine
Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
OPTIONAL HEADER VALUESÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            10B magic # (PE32)Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            8.00 linker versionÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            1000 size of codeÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            2000 size of initialized dataÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 size of uninitialized dataÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            27BE entry point (004027BE)Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            2000 base of codeÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            4000 base of dataÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
          400000 image base (00400000 to 00407FFF)Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            2000 section alignmentÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            1000 file alignmentÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            4.00 operating system versionÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            0.00 image versionÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            4.00 subsystem versionÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 Win32 versionÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            8000 size of imageÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            1000 size of headersÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 checksumÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              3 subsystem (Windows CUI)Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            400 DLL characteristicsÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
                  No structured exception handlerÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
          100000 size of stack reserveÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            1000 size of stack commitÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
          100000 size of heap reserveÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            1000 size of heap commitÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 loader flagsÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              10 number of directoriesÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 [      0] RVA [size] of Export DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            2770 [      4B] RVA [size] of Import DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            4000 [    390] RVA [size] of Resource DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 [      0] RVA [size] of Exception DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 [      0] RVA [size] of Certificates DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            6000 [      C] RVA [size] of Base Relocation DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            26EC [      1C] RVA [size] of Debug DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 [      0] RVA [size] of Architecture DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 [      0] RVA [size] of Global Pointer DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 [      0] RVA [size] of Thread Storage DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 [      0] RVA [size] of Load Configuration DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 [      0] RVA [size] of Bound Import DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            2000 [      8] RVA [size] of Import Address Table DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 [      0] RVA [size] of Delay Import DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            2008 [      48] RVA [size] of COM Descriptor DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 [      0] RVA [size] of Reserved Directory
Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
SECTION HEADER #1Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
  .text name
Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
    7C4 virtual sizeÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
    2000 virtual address (00402000 to 004027C3)Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
    1000 size of raw data
Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
    1000 file pointer to raw data (00001000 to 00001FFF)Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
      0 file pointer to relocation tableÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
      0 file pointer to line numbersÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
      0 number of relocationsÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
      0 number of line numbersÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
60000020 flagsÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
        CodeÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
        Execute ReadÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
  Debug DirectoriesÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
        Time Type      Size      RVA  PointerÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
    -------- ------ -------- -------- --------Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
    47216963 cv          65 00002708    1708    Format: RSDS, {5AD83DC1-5587-401A-ADE6-2DE784E28C8C}, 4, Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
G:\Projects\TestWinApp\ConsoleApplication1\obj\Debug\ConsoleApplication1.pdbÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
  clr Header:Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              48 cbÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            2.05 runtime versionÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
            20A4 [    648] RVA [size] of MetaData DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              1 flagsÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
        6000001 entry point tokenÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 [      0] RVA [size] of Resources DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 [      0] RVA [size] of StrongNameSignature DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 [      0] RVA [size] of CodeManagerTable DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 [      0] RVA [size] of VTableFixups DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 [      0] RVA [size] of ExportAddressTableJumps DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
              0 [      0] RVA [size] of ManagedNativeHeader DirectoryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
  Section contains the following imports:Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
  mscoree.dllÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
                402000 Import Address TableÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
                402798 Import Name TableÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
                    0 time date stampÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
                    0 Index of first forwarder referenceÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
                  0 _CorExeMainÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
SECTION HEADER #2Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
  .rsrc nameÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
    390 virtual sizeÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
    4000 virtual address (00404000 to 0040438F)Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
    1000 size of raw dataÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
    2000 file pointer to raw data (00002000 to 00002FFF)Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
      0 file pointer to relocation tableÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
      0 file pointer to line numbersÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
      0 number of relocationsÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
      0 number of line numbersÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
40000040 flagsÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
        Initialized DataÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
        Read OnlyÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
SECTION HEADER #3Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
  .reloc name
Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
      C virtual sizeÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
    6000 virtual address (00406000 to 0040600B)Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
    1000 size of raw dataÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
    3000 file pointer to raw data (00003000 to 00003FFF)Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
      0 file pointer to relocation tableÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
      0 file pointer to line numbersÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
      0 number of relocationsÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
      0 number of line numbersÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
42000040 flagsÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
        Initialized DataÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
        DiscardableÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
        Read OnlyÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
RAW DATA #3Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
BASE RELOCATIONS #3Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
    2000 RVA,        C SizeOfBlockÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
    7C0  HIGHLOW            00402000Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
      0  ABS                        Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
SummaryÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
        2000 .relocÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
        2000 .rsrcÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
        2000 .textÔ ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
标住出一些重要的部分,就不做分析了,因为我也不是每行都十分明白含义..Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
简明的标识了.Net修了了的PE文件格式包含的一些特别的东西,大家特别注意下那个CLR header.
Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM
Ô ÅÖ6!=èÄÉwww.netcsharp.cn1zDI!”ïM