| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- //
- // PdbHelper.cs
- //
- // Author:
- // Jb Evain (jbevain@gmail.com)
- //
- // Copyright (c) 2008 - 2011 Jb Evain
- //
- // Permission is hereby granted, free of charge, to any person obtaining
- // a copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to
- // permit persons to whom the Software is furnished to do so, subject to
- // the following conditions:
- //
- // The above copyright notice and this permission notice shall be
- // included in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
- // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
- // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
- // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- //
- using System;
- using System.Collections.Generic;
- using System.IO;
- using Mono.Cecil.Cil;
- namespace Mono.Cecil.Pdb
- {
- class PdbHelper
- {
- public static string GetPdbFileName(string assemblyFileName)
- {
- return Path.ChangeExtension(assemblyFileName, ".pdb");
- }
- }
- public class PdbReaderProvider : ISymbolReaderProvider
- {
- public ISymbolReader GetSymbolReader(ModuleDefinition module, string fileName)
- {
- return new PdbReader(File.OpenRead(PdbHelper.GetPdbFileName(fileName)));
- }
- public ISymbolReader GetSymbolReader(ModuleDefinition module, Stream symbolStream)
- {
- return new PdbReader(symbolStream);
- }
- }
- public class GuidCompare : IEqualityComparer<Guid>
- {
- public bool Equals(Guid x, Guid y)
- {
- return x == y;
- }
- public int GetHashCode(Guid obj)
- {
- return obj.GetHashCode();
- }
- }
- public class DocumentLanguageCompare : IEqualityComparer<DocumentLanguage>
- {
- public bool Equals(DocumentLanguage x, DocumentLanguage y)
- {
- return x == y;
- }
- public int GetHashCode(DocumentLanguage obj)
- {
- return obj.GetHashCode();
- }
- }
- public class uintCompare : IEqualityComparer<uint>
- {
- public bool Equals(uint x, uint y)
- {
- return x == y;
- }
- public int GetHashCode(uint obj)
- {
- return obj.GetHashCode();
- }
- }
- static class GuidMapping
- {
- static readonly Dictionary<Guid, DocumentLanguage> guid_language = new Dictionary<Guid, DocumentLanguage>(new GuidCompare());
- static readonly Dictionary<DocumentLanguage, Guid> language_guid = new Dictionary<DocumentLanguage, Guid>(new DocumentLanguageCompare());
- static GuidMapping()
- {
- AddMapping(DocumentLanguage.C, new Guid(0x63a08714, 0xfc37, 0x11d2, 0x90, 0x4c, 0x0, 0xc0, 0x4f, 0xa3, 0x02, 0xa1));
- AddMapping(DocumentLanguage.Cpp, new Guid(0x3a12d0b7, 0xc26c, 0x11d0, 0xb4, 0x42, 0x0, 0xa0, 0x24, 0x4a, 0x1d, 0xd2));
- AddMapping(DocumentLanguage.CSharp, new Guid(0x3f5162f8, 0x07c6, 0x11d3, 0x90, 0x53, 0x0, 0xc0, 0x4f, 0xa3, 0x02, 0xa1));
- AddMapping(DocumentLanguage.Basic, new Guid(0x3a12d0b8, 0xc26c, 0x11d0, 0xb4, 0x42, 0x0, 0xa0, 0x24, 0x4a, 0x1d, 0xd2));
- AddMapping(DocumentLanguage.Java, new Guid(0x3a12d0b4, 0xc26c, 0x11d0, 0xb4, 0x42, 0x0, 0xa0, 0x24, 0x4a, 0x1d, 0xd2));
- AddMapping(DocumentLanguage.Cobol, new Guid(0xaf046cd1, 0xd0e1, 0x11d2, 0x97, 0x7c, 0x0, 0xa0, 0xc9, 0xb4, 0xd5, 0xc));
- AddMapping(DocumentLanguage.Pascal, new Guid(0xaf046cd2, 0xd0e1, 0x11d2, 0x97, 0x7c, 0x0, 0xa0, 0xc9, 0xb4, 0xd5, 0xc));
- AddMapping(DocumentLanguage.Cil, new Guid(0xaf046cd3, 0xd0e1, 0x11d2, 0x97, 0x7c, 0x0, 0xa0, 0xc9, 0xb4, 0xd5, 0xc));
- AddMapping(DocumentLanguage.JScript, new Guid(0x3a12d0b6, 0xc26c, 0x11d0, 0xb4, 0x42, 0x0, 0xa0, 0x24, 0x4a, 0x1d, 0xd2));
- AddMapping(DocumentLanguage.Smc, new Guid(0xd9b9f7b, 0x6611, 0x11d3, 0xbd, 0x2a, 0x0, 0x0, 0xf8, 0x8, 0x49, 0xbd));
- AddMapping(DocumentLanguage.MCpp, new Guid(0x4b35fde8, 0x07c6, 0x11d3, 0x90, 0x53, 0x0, 0xc0, 0x4f, 0xa3, 0x02, 0xa1));
- //AddMapping(DocumentLanguage.FSharp, new Guid(0xab4f38c9, 0xb6e6, 0x43ba, 0xbe, 0x3b, 0x58, 0x08, 0x0b, 0x2c, 0xcc, 0xe3));
- }
- static void AddMapping(DocumentLanguage language, Guid guid)
- {
- guid_language.Add(guid, language);
- language_guid.Add(language, guid);
- }
- static readonly Guid type_text = new Guid(0x5a869d0b, 0x6611, 0x11d3, 0xbd, 0x2a, 0x00, 0x00, 0xf8, 0x08, 0x49, 0xbd);
- public static DocumentType ToType(Guid guid)
- {
- if (guid == type_text)
- return DocumentType.Text;
- return DocumentType.Other;
- }
- public static Guid ToGuid(DocumentType type)
- {
- if (type == DocumentType.Text)
- return type_text;
- return new Guid();
- }
- static readonly Guid hash_md5 = new Guid(0x406ea660, 0x64cf, 0x4c82, 0xb6, 0xf0, 0x42, 0xd4, 0x81, 0x72, 0xa7, 0x99);
- static readonly Guid hash_sha1 = new Guid(0xff1816ec, 0xaa5e, 0x4d10, 0x87, 0xf7, 0x6f, 0x49, 0x63, 0x83, 0x34, 0x60);
- public static DocumentHashAlgorithm ToHashAlgorithm(Guid guid)
- {
- if (guid == hash_md5)
- return DocumentHashAlgorithm.MD5;
- if (guid == hash_sha1)
- return DocumentHashAlgorithm.SHA1;
- return DocumentHashAlgorithm.None;
- }
- public static Guid ToGuid(DocumentHashAlgorithm hash_algo)
- {
- if (hash_algo == DocumentHashAlgorithm.MD5)
- return hash_md5;
- if (hash_algo == DocumentHashAlgorithm.SHA1)
- return hash_sha1;
- return new Guid();
- }
- public static DocumentLanguage ToLanguage(Guid guid)
- {
- DocumentLanguage language;
- if (!guid_language.TryGetValue(guid, out language))
- return DocumentLanguage.Other;
- return language;
- }
- public static Guid ToGuid(DocumentLanguage language)
- {
- Guid guid;
- if (!language_guid.TryGetValue(language, out guid))
- return new Guid();
- return guid;
- }
- static readonly Guid vendor_ms = new Guid(0x994b45c4, 0xe6e9, 0x11d2, 0x90, 0x3f, 0x00, 0xc0, 0x4f, 0xa3, 0x02, 0xa1);
- public static DocumentLanguageVendor ToVendor(Guid guid)
- {
- if (guid == vendor_ms)
- return DocumentLanguageVendor.Microsoft;
- return DocumentLanguageVendor.Other;
- }
- public static Guid ToGuid(DocumentLanguageVendor vendor)
- {
- if (vendor == DocumentLanguageVendor.Microsoft)
- return vendor_ms;
- return new Guid();
- }
- }
- }
|