Browse Source
git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@630 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61shortcuts
70 changed files with 0 additions and 6076 deletions
@ -1,6 +0,0 @@
@@ -1,6 +0,0 @@
|
||||
Microsoft Visual Studio Solution File, Format Version 9.00 |
||||
# SharpDevelop 2.0.0.568 |
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ICSharpCode.SharpAssembly", "Project\ICSharpCode.SharpAssembly.csproj", "{C70406A5-25B5-4A2B-898A-B1338652F7F0}" |
||||
EndProject |
||||
Global |
||||
EndGlobal |
||||
@ -1,38 +0,0 @@
@@ -1,38 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System.Reflection; |
||||
using System.Runtime.CompilerServices; |
||||
|
||||
// Information about this assembly is defined by the following
|
||||
// attributes.
|
||||
//
|
||||
// change them to the information which is associated with the assembly
|
||||
// you compile.
|
||||
|
||||
[assembly: AssemblyTitle("ICSharpCode.SharpAssembly")] |
||||
[assembly: AssemblyDescription("CLI Assembly Reader library")] |
||||
[assembly: AssemblyConfiguration("")] |
||||
[assembly: AssemblyCompany("www.icsharpcode.net")] |
||||
[assembly: AssemblyProduct("")] |
||||
[assembly: AssemblyCopyright("(C) 2003 by Mike Krueger released as GPL")] |
||||
[assembly: AssemblyTrademark("")] |
||||
[assembly: AssemblyCulture("")] |
||||
|
||||
// The assembly version has following format :
|
||||
//
|
||||
// Major.Minor.Build.Revision
|
||||
//
|
||||
// You can specify all values by your own or you can build default build and revision
|
||||
// numbers with the '*' character (the default):
|
||||
|
||||
[assembly: AssemblyVersion("1.1.0.2094")] |
||||
|
||||
// The following attributes specify the key for the sign of your assembly. See the
|
||||
// .NET Framework documentation for more information about signing.
|
||||
// This is not required, if you don't want signing let these attributes like they're.
|
||||
[assembly: AssemblyDelaySign(false)] |
||||
@ -1,29 +0,0 @@
@@ -1,29 +0,0 @@
|
||||
SharpAssembly 1.0 |
||||
----------------- |
||||
|
||||
This is the first release of my Assembly reading library. |
||||
I was tired of the System.Reflection capabilities (locking assemblies, |
||||
app domain troubles no access to method body IL stream etc.) therefore |
||||
I've decided to do it on my own. |
||||
|
||||
And here it is ... my first release of the library. I assume that you |
||||
should play a bit with it and read following docs: |
||||
|
||||
Tool Developers Guide/docs/Partition I Architecture.doc |
||||
Tool Developers Guide/docs/Partition II Metadata.doc |
||||
Tool Developers Guide/docs/Partition III CIL.doc |
||||
|
||||
These can be found inside the SDK distribution. |
||||
|
||||
Feel free to send comments/suggestions/code changes to: |
||||
mike@icsharpcode.net |
||||
|
||||
Building |
||||
-------- |
||||
You need SharpDevelop to build this library. You can get it from: |
||||
www.icsharpcode.net/OpenSource/SD |
||||
|
||||
License |
||||
------- |
||||
Released under GNU LGPL see lgpl.txt for details |
||||
(or http://www.gnu.org/licenses/lgpl.html) |
||||
@ -1,115 +0,0 @@
@@ -1,115 +0,0 @@
|
||||
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> |
||||
<PropertyGroup> |
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> |
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> |
||||
<SchemaVersion>2.0</SchemaVersion> |
||||
<ProjectGuid>{C70406A5-25B5-4A2B-898A-B1338652F7F0}</ProjectGuid> |
||||
<RootNamespace>NewProject</RootNamespace> |
||||
<AssemblyName>ICSharpCode.SharpAssembly</AssemblyName> |
||||
<OutputType>Library</OutputType> |
||||
<WarningLevel>4</WarningLevel> |
||||
<NoStdLib>False</NoStdLib> |
||||
<NoConfig>False</NoConfig> |
||||
<RunPostBuildEvent>OnSuccessfulBuild</RunPostBuildEvent> |
||||
<DebugType>None</DebugType> |
||||
<RegisterForComInterop>False</RegisterForComInterop> |
||||
<GenerateSerializationAssemblies>Auto</GenerateSerializationAssemblies> |
||||
<BaseAddress>4194304</BaseAddress> |
||||
<PlatformTarget>AnyCPU</PlatformTarget> |
||||
<FileAlignment>4096</FileAlignment> |
||||
<SignAssembly>True</SignAssembly> |
||||
<AssemblyOriginatorKeyFile>ICSharpCode.SharpAssembly.key</AssemblyOriginatorKeyFile> |
||||
<DelaySign>False</DelaySign> |
||||
<AssemblyOriginatorKeyMode>File</AssemblyOriginatorKeyMode> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> |
||||
<DebugSymbols>false</DebugSymbols> |
||||
<Optimize>True</Optimize> |
||||
<AllowUnsafeBlocks>False</AllowUnsafeBlocks> |
||||
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow> |
||||
<OutputPath>..\..\..\..\bin\</OutputPath> |
||||
<TreatWarningsAsErrors>true</TreatWarningsAsErrors> |
||||
</PropertyGroup> |
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' "> |
||||
<DebugSymbols>False</DebugSymbols> |
||||
<Optimize>True</Optimize> |
||||
<AllowUnsafeBlocks>False</AllowUnsafeBlocks> |
||||
<CheckForOverflowUnderflow>True</CheckForOverflowUnderflow> |
||||
<OutputPath>..\..\..\..\..\bin\</OutputPath> |
||||
<TreatWarningsAsErrors>True</TreatWarningsAsErrors> |
||||
</PropertyGroup> |
||||
<ItemGroup> |
||||
<Reference Include="System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> |
||||
<Reference Include="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" /> |
||||
<Reference Include="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> |
||||
</ItemGroup> |
||||
<ItemGroup> |
||||
<Compile Include="Configuration\AssemblyInfo.cs" /> |
||||
<Compile Include="Src\Metadata\MethodBody.cs" /> |
||||
<Compile Include="Src\Metadata\AssemblyMetaData.cs" /> |
||||
<Compile Include="Src\Metadata\MetadataTable.cs" /> |
||||
<Compile Include="Src\PE\StreamHeader.cs" /> |
||||
<Compile Include="Src\PE\CLIHeader.cs" /> |
||||
<Compile Include="Src\PE\DataDirectories.cs" /> |
||||
<Compile Include="Src\PE\IAT.cs" /> |
||||
<Compile Include="Src\PE\ImportTable.cs" /> |
||||
<Compile Include="Src\PE\NameTable.cs" /> |
||||
<Compile Include="Src\PE\NTSpecificFields.cs" /> |
||||
<Compile Include="Src\PE\PEFileHeader.cs" /> |
||||
<Compile Include="Src\PE\SectionTable.cs" /> |
||||
<Compile Include="Src\PE\StandardFields.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\TypeSpec.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\AbstractRow.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\Assembly.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\AssemblyOS.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\AssemblyProcessor.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\AssemblyRef.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\AssemblyRefOS.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\AssemblyRefProcessor.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\ClassLayout.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\CodedIndex.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\Constant.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\CustomAttribute.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\DeclSecurity.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\ENCLog.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\ENCMap.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\Event.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\EventMap.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\EventPtr.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\ExportedType.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\Field.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\FieldLayout.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\FieldMarshal.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\FieldPtr.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\FieldRVA.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\File.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\ImplMap.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\InterfaceImpl.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\ManifestResource.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\MemberRef.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\Method.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\MethodImpl.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\MethodPtr.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\MethodSemantics.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\Module.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\ModuleRef.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\NestedClass.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\Param.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\ParamPtr.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\Property.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\PropertyMap.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\PropertyPtr.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\StandAloneSig.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\TypeDef.cs" /> |
||||
<Compile Include="Src\Metadata\Rows\TypeRef.cs" /> |
||||
<Compile Include="Src\AssemblyMetadataTables.cs" /> |
||||
<Compile Include="Src\AssemblyNameNotFoundException.cs" /> |
||||
<Compile Include="Src\AssemblyReader.cs" /> |
||||
<Compile Include="Src\FusionNative.cs" /> |
||||
<Compile Include="Src\SharpAssembly.cs" /> |
||||
<Compile Include="Src\SharpAssemblyName.cs" /> |
||||
<Compile Include="Src\Metadata\Signatures\CallingConventions.cs" /> |
||||
<Compile Include="Src\Metadata\Signatures\DataTypes.cs" /> |
||||
</ItemGroup> |
||||
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.Targets" /> |
||||
</Project> |
||||
Binary file not shown.
@ -1,223 +0,0 @@
@@ -1,223 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using ICSharpCode.SharpAssembly.Metadata; |
||||
using ICSharpCode.SharpAssembly.Metadata.Rows; |
||||
using MDRows = ICSharpCode.SharpAssembly.Metadata.Rows; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Assembly |
||||
{ |
||||
|
||||
/// <summary>
|
||||
/// Contains shortcuts to commonly used tables
|
||||
/// </summary>
|
||||
public class MetadataTables : object { |
||||
|
||||
AssemblyReader reader; |
||||
|
||||
public MetadataTables(AssemblyReader Reader) { |
||||
reader = Reader; |
||||
} |
||||
|
||||
// Shortcuts for commonly used tables
|
||||
|
||||
public MDRows.Assembly[] Assembly { |
||||
get { |
||||
return (MDRows.Assembly[])reader.MetadataTable.Tables[MDRows.Assembly.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public AssemblyRef[] AssemblyRef { |
||||
get { |
||||
return (AssemblyRef[])reader.MetadataTable.Tables[MDRows.AssemblyRef.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public ClassLayout[] ClassLayout { |
||||
get { |
||||
return (ClassLayout[])reader.MetadataTable.Tables[MDRows.ClassLayout.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public Constant[] Constant { |
||||
get { |
||||
return (Constant[])reader.MetadataTable.Tables[MDRows.Constant.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public CustomAttribute[] CustomAttribute { |
||||
get { |
||||
return (CustomAttribute[])reader.MetadataTable.Tables[MDRows.CustomAttribute.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public DeclSecurity[] DeclSecurity { |
||||
get { |
||||
return (DeclSecurity[])reader.MetadataTable.Tables[MDRows.DeclSecurity.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public Event[] Event { |
||||
get { |
||||
return (Event[])reader.MetadataTable.Tables[MDRows.Event.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public EventMap[] EventMap { |
||||
get { |
||||
return (EventMap[])reader.MetadataTable.Tables[MDRows.EventMap.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public EventPtr[] EventPtr { |
||||
get { |
||||
return (EventPtr[])reader.MetadataTable.Tables[MDRows.EventPtr.TABLE_ID]; |
||||
} |
||||
} |
||||
/* |
||||
public ExportedType[] ExportedType { |
||||
get { |
||||
return (ExportedType[])reader.MetadataTable.Tables[MDRows.ExportedType.TABLE_ID]; |
||||
} |
||||
} |
||||
*/ |
||||
public Field[] Field { |
||||
get { |
||||
return (Field[])reader.MetadataTable.Tables[MDRows.Field.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public FieldLayout[] FieldLayout { |
||||
get { |
||||
return (FieldLayout[])reader.MetadataTable.Tables[MDRows.FieldLayout.TABLE_ID]; |
||||
} |
||||
} |
||||
/* |
||||
public FieldMarshal[] FieldMarshal { |
||||
get { |
||||
return (FieldMarshal[])reader.MetadataTable.Tables[MDRows.FieldMarshal.TABLE_ID]; |
||||
} |
||||
} |
||||
*/ |
||||
public FieldRVA[] FieldRVA { |
||||
get { |
||||
return (FieldRVA[])reader.MetadataTable.Tables[MDRows.FieldRVA.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public MDRows.File[] File { |
||||
get { |
||||
return (MDRows.File[])reader.MetadataTable.Tables[MDRows.File.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public ImplMap[] ImplMap { |
||||
get { |
||||
return (ImplMap[])reader.MetadataTable.Tables[MDRows.ImplMap.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public InterfaceImpl[] InterfaceImpl { |
||||
get { |
||||
return (InterfaceImpl[])reader.MetadataTable.Tables[MDRows.InterfaceImpl.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public ManifestResource[] ManifestResource { |
||||
get { |
||||
return (ManifestResource[])reader.MetadataTable.Tables[MDRows.ManifestResource.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public MemberRef[] MemberRef { |
||||
get { |
||||
return (MemberRef[])reader.MetadataTable.Tables[MDRows.MemberRef.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public Method[] Method { |
||||
get { |
||||
return (Method[])reader.MetadataTable.Tables[MDRows.Method.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public MethodImpl[] MethodImpl { |
||||
get { |
||||
return (MethodImpl[])reader.MetadataTable.Tables[MDRows.MethodImpl.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public MethodSemantics[] MethodSemantics { |
||||
get { |
||||
return (MethodSemantics[])reader.MetadataTable.Tables[MDRows.MethodSemantics.TABLE_ID]; |
||||
} |
||||
} |
||||
/* |
||||
public MDRows.Module[] Module { |
||||
get { |
||||
return (MDRows.Module[])reader.MetadataTable.Tables[MDRows.MDRows.Module.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public ModuleRef[] ModuleRefTable { |
||||
get { |
||||
return (ModuleRef[])reader.MetadataTable.Tables[MDRows.ModuleRef.TABLE_ID]; |
||||
} |
||||
} |
||||
*/ |
||||
public NestedClass[] NestedClass { |
||||
get { |
||||
return (NestedClass[])reader.MetadataTable.Tables[MDRows.NestedClass.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public Param[] Param { |
||||
get { |
||||
return (Param[])reader.MetadataTable.Tables[MDRows.Param.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public Property[] Property { |
||||
get { |
||||
return (Property[])reader.MetadataTable.Tables[MDRows.Property.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public PropertyMap[] PropertyMap { |
||||
get { |
||||
return (PropertyMap[])reader.MetadataTable.Tables[MDRows.PropertyMap.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public StandAloneSig[] StandAloneSig { |
||||
get { |
||||
return (StandAloneSig[])reader.MetadataTable.Tables[MDRows.StandAloneSig.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public TypeDef[] TypeDef { |
||||
get { |
||||
return (TypeDef[])reader.MetadataTable.Tables[MDRows.TypeDef.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public TypeRef[] TypeRef { |
||||
get { |
||||
return (TypeRef[])reader.MetadataTable.Tables[MDRows.TypeRef.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
public TypeSpec[] TypeSpec { |
||||
get { |
||||
return (TypeSpec[])reader.MetadataTable.Tables[MDRows.TypeSpec.TABLE_ID]; |
||||
} |
||||
} |
||||
|
||||
|
||||
} |
||||
} |
||||
@ -1,21 +0,0 @@
@@ -1,21 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Assembly |
||||
{ |
||||
/// <summary>
|
||||
/// Is thrown when the given assembly name could not be found.
|
||||
/// </summary>
|
||||
public class AssemblyNameNotFoundException : Exception |
||||
{ |
||||
public AssemblyNameNotFoundException(string name) : base("Could not find assembly named " + name + " in the Global Assembly Cache.") |
||||
{ |
||||
} |
||||
} |
||||
} |
||||
@ -1,294 +0,0 @@
@@ -1,294 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.Collections; |
||||
//using System.Collections.Specialized;
|
||||
using System.Reflection; |
||||
using System.IO; |
||||
using ICSharpCode.SharpAssembly.Metadata.Rows; |
||||
using ICSharpCode.SharpAssembly.Metadata; |
||||
using ICSharpCode.SharpAssembly.PE; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Assembly { |
||||
|
||||
public class AssemblyReader |
||||
{ |
||||
PEFileHeader header; |
||||
CLIHeader cliHeader; |
||||
SectionTable[] sections; |
||||
MetadataTable metadataTable = new MetadataTable(); |
||||
|
||||
byte[] stringHeap; |
||||
byte[] userStringHeap; |
||||
byte[] guidHeap; |
||||
byte[] blobHeap; |
||||
byte[] rawSectionData; |
||||
|
||||
string filename; |
||||
|
||||
public PEFileHeader PEHeader { |
||||
get { |
||||
return header; |
||||
} |
||||
} |
||||
|
||||
public CLIHeader CliHeader { |
||||
get { |
||||
return cliHeader; |
||||
} |
||||
} |
||||
|
||||
public string FileName { |
||||
get { |
||||
return filename; |
||||
} |
||||
} |
||||
|
||||
public MetadataTable MetadataTable { |
||||
get { |
||||
return metadataTable; |
||||
} |
||||
} |
||||
|
||||
public byte[] StringHeap { |
||||
get { |
||||
return stringHeap; |
||||
} |
||||
} |
||||
|
||||
public byte[] UserStringHeap { |
||||
get { |
||||
return userStringHeap; |
||||
} |
||||
} |
||||
|
||||
public byte[] GuidHeap { |
||||
get { |
||||
return guidHeap; |
||||
} |
||||
} |
||||
|
||||
public byte[] BlobHeap { |
||||
get { |
||||
return blobHeap; |
||||
} |
||||
} |
||||
|
||||
public byte[] RawSectionData { |
||||
get { |
||||
return rawSectionData; |
||||
} |
||||
} |
||||
|
||||
public static int GetCompressedInt(byte[] heap, ref uint index) |
||||
{ |
||||
if (index < 0 || index >= heap.Length) { |
||||
return -1; |
||||
} |
||||
int first = heap[index++]; |
||||
switch (first & 0xC0) { |
||||
case 0xC0: |
||||
first &= ~0xC0; |
||||
return first << 24 | heap[index++] << 16 | heap[index++] << 8 | heap[index++]; |
||||
case 0x80: |
||||
first &= ~0x80; |
||||
return first << 8 | heap[index++]; |
||||
default: |
||||
return first; |
||||
} |
||||
} |
||||
|
||||
public int LoadBlob(ref uint index) |
||||
{ |
||||
return GetCompressedInt(blobHeap, ref index); |
||||
} |
||||
|
||||
public byte[] GetBlobFromHeap(uint index) |
||||
{ |
||||
if (index < 0 || index >= blobHeap.Length) { |
||||
return new byte[0]; |
||||
} |
||||
int length = LoadBlob(ref index); |
||||
|
||||
byte[] dest = new byte[length]; |
||||
Array.Copy(blobHeap, index, dest, 0, length); |
||||
|
||||
return dest; |
||||
} |
||||
|
||||
public string GetUserStringFromHeap(uint index) |
||||
{ |
||||
if (index < 0 || index >= userStringHeap.Length) { |
||||
return ""; |
||||
} |
||||
|
||||
int length = GetCompressedInt(userStringHeap, ref index); |
||||
|
||||
return System.Text.Encoding.Unicode.GetString(userStringHeap, (int)index, length); |
||||
} |
||||
|
||||
public string GetStringFromHeap(uint index) |
||||
{ |
||||
if (index < 0 || index >= stringHeap.Length) { |
||||
return ""; |
||||
} |
||||
|
||||
uint endIndex = index; |
||||
while (endIndex < stringHeap.Length && stringHeap[endIndex] != 0) { |
||||
++endIndex; |
||||
} |
||||
|
||||
return System.Text.Encoding.UTF8.GetString(stringHeap, (int)index, (int)(endIndex - index)); |
||||
} |
||||
|
||||
public uint LookupRVA(uint address) |
||||
{ |
||||
foreach (SectionTable section in sections) { |
||||
if (section.VirtualAddress <= address && address <= section.VirtualAddress + section.VirtualSize) { |
||||
return section.PointerToRawData + address - section.VirtualAddress; |
||||
} |
||||
} |
||||
return 0; |
||||
} |
||||
|
||||
public Stream OpenStream(uint rva) |
||||
{ |
||||
uint offset = LookupRVA(rva); |
||||
MemoryStream ms = new MemoryStream(rawSectionData); |
||||
ms.Seek(offset, SeekOrigin.Begin); |
||||
return ms; |
||||
} |
||||
|
||||
public ICSharpCode.SharpAssembly.Metadata.Rows.MethodBody LoadMethodBody(uint rva) |
||||
{ |
||||
BinaryReader binaryReader = new BinaryReader(OpenStream(rva)); |
||||
ICSharpCode.SharpAssembly.Metadata.Rows.MethodBody body = new ICSharpCode.SharpAssembly.Metadata.Rows.MethodBody(); |
||||
body.Load(binaryReader); |
||||
binaryReader.Close(); |
||||
return body; |
||||
} |
||||
|
||||
public void Load(string fileName) |
||||
{ |
||||
Stream fs = System.IO.File.OpenRead(fileName); |
||||
fs.Seek(0x3c, SeekOrigin.Begin); |
||||
BinaryReader binaryReaderSO = new BinaryReader(fs); |
||||
long signature_offset = binaryReaderSO.ReadInt32(); |
||||
|
||||
fs.Seek(signature_offset, SeekOrigin.Begin); |
||||
|
||||
filename = fileName; |
||||
|
||||
BinaryReader binaryReader = new BinaryReader(fs); |
||||
|
||||
header = new PEFileHeader(); |
||||
header.LoadFrom(binaryReader); |
||||
|
||||
sections = new SectionTable[header.NumberOfSections]; |
||||
for (int i = 0; i < header.NumberOfSections; ++i) { |
||||
sections[i] = new SectionTable(); |
||||
sections[i].LoadFrom(binaryReader); |
||||
} |
||||
|
||||
uint rawDataSize = 0; |
||||
for (int i = 0; i < header.NumberOfSections; ++i) { |
||||
rawDataSize += sections[i].SizeOfRawData; |
||||
} |
||||
|
||||
// read all sections to a memory buffer and relocate all pointer in the sections
|
||||
// to raw data indices in the buffer
|
||||
rawSectionData = new byte[rawDataSize]; |
||||
int curOffset = 0; |
||||
for (int i = 0; i < header.NumberOfSections; ++i) { |
||||
fs.Seek((int)sections[i].PointerToRawData, SeekOrigin.Begin); |
||||
fs.Read(rawSectionData, curOffset, (int)sections[i].SizeOfRawData); |
||||
sections[i].PointerToRawData = (uint)curOffset; |
||||
curOffset += (int)sections[i].SizeOfRawData; |
||||
} |
||||
binaryReader.Close(); |
||||
binaryReaderSO.Close(); |
||||
fs.Close(); |
||||
|
||||
fs = new MemoryStream(rawSectionData); |
||||
binaryReader = new BinaryReader(fs); |
||||
|
||||
uint cliHeaderPos = LookupRVA(header.DataDirectories.CliHeader); |
||||
fs.Seek((int)cliHeaderPos, SeekOrigin.Begin); |
||||
cliHeader = new CLIHeader(); |
||||
cliHeader.LoadFrom(binaryReader); |
||||
|
||||
uint metaDataPos = LookupRVA(cliHeader.MetaData); |
||||
fs.Seek((int)metaDataPos, SeekOrigin.Begin); |
||||
AssemblyMetadata met = new AssemblyMetadata(); |
||||
met.LoadFrom(binaryReader); |
||||
|
||||
foreach (StreamHeader streamHeader in met.StreamHeaders) { |
||||
uint offset = LookupRVA(cliHeader.MetaData + streamHeader.Offset); |
||||
fs.Seek((int)offset, SeekOrigin.Begin); |
||||
switch (streamHeader.Name) { |
||||
case "#~": |
||||
case "#-": |
||||
metadataTable.LoadFrom(binaryReader); |
||||
break; |
||||
case "#Strings": |
||||
stringHeap = new byte[streamHeader.Size]; |
||||
fs.Read(stringHeap, 0, stringHeap.Length); |
||||
break; |
||||
case "#US": |
||||
userStringHeap = new byte[streamHeader.Size]; |
||||
fs.Read(userStringHeap, 0, userStringHeap.Length); |
||||
break; |
||||
case "#GUID": |
||||
guidHeap = new byte[streamHeader.Size]; |
||||
fs.Read(guidHeap, 0, guidHeap.Length); |
||||
break; |
||||
case "#Blob": |
||||
blobHeap = new byte[streamHeader.Size]; |
||||
fs.Read(blobHeap, 0, blobHeap.Length); |
||||
break; |
||||
} |
||||
} |
||||
|
||||
|
||||
} |
||||
|
||||
public int GetCodedIndexTable(CodedIndex index, ref uint val) |
||||
{ |
||||
int bits = 0; |
||||
|
||||
switch (index) { |
||||
case CodedIndex.HasConstant: |
||||
case CodedIndex.TypeDefOrRef: |
||||
case CodedIndex.HasDeclSecurity: |
||||
case CodedIndex.Implementation: |
||||
case CodedIndex.ResolutionScope: |
||||
bits = 2; |
||||
break; |
||||
case CodedIndex.HasCustomAttribute: |
||||
bits = 5; |
||||
break; |
||||
case CodedIndex.HasFieldMarshall: |
||||
case CodedIndex.HasSemantics: |
||||
case CodedIndex.MethodDefOrRef: |
||||
case CodedIndex.MemberForwarded: |
||||
bits = 1; |
||||
break; |
||||
case CodedIndex.MemberRefParent: |
||||
case CodedIndex.CustomAttributeType: |
||||
bits = 3; |
||||
break; |
||||
} |
||||
|
||||
uint origval = val; |
||||
val = origval >> bits; |
||||
|
||||
return (int)(origval & ((int)Math.Pow(2, bits) - 1)); |
||||
} |
||||
|
||||
} |
||||
} |
||||
@ -1,419 +0,0 @@
@@ -1,419 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.Text; |
||||
using System.Runtime.InteropServices; |
||||
|
||||
namespace MSjogren.Fusion.Native |
||||
{ |
||||
[Flags] |
||||
enum ASM_CACHE_FLAGS |
||||
{ |
||||
ASM_CACHE_ZAP = 0x1, |
||||
ASM_CACHE_GAC = 0x2, |
||||
ASM_CACHE_DOWNLOAD = 0x4 |
||||
} |
||||
|
||||
[Flags] |
||||
enum ASM_DISPLAY_FLAGS |
||||
{ |
||||
VERSION = 0x1, |
||||
CULTURE = 0x2, |
||||
PUBLIC_KEY_TOKEN = 0x4, |
||||
PUBLIC_KEY = 0x8, |
||||
CUSTOM = 0x10, |
||||
PROCESSORARCHITECTURE = 0x20, |
||||
LANGUAGEID = 0x40 |
||||
} |
||||
|
||||
[Flags] |
||||
enum ASM_CMP_FLAGS |
||||
{ |
||||
NAME = 0x1, |
||||
MAJOR_VERSION = 0x2, |
||||
MINOR_VERSION = 0x4, |
||||
BUILD_NUMBER = 0x8, |
||||
REVISION_NUMBER = 0x10, |
||||
PUBLIC_KEY_TOKEN = 0x20, |
||||
CULTURE = 0x40, |
||||
CUSTOM = 0x80, |
||||
ALL = NAME | MAJOR_VERSION | MINOR_VERSION | |
||||
REVISION_NUMBER | BUILD_NUMBER | |
||||
PUBLIC_KEY_TOKEN | CULTURE | CUSTOM, |
||||
DEFAULT = 0x100 |
||||
} |
||||
|
||||
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)] |
||||
struct FUSION_INSTALL_REFERENCE |
||||
{ |
||||
public uint cbSize; |
||||
public uint dwFlags; |
||||
public Guid guidScheme; |
||||
public string szIdentifier; |
||||
public string szNonCannonicalData; |
||||
} |
||||
|
||||
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)] |
||||
struct ASSEMBLY_INFO |
||||
{ |
||||
public uint cbAssemblyInfo; |
||||
public uint dwAssemblyFlags; |
||||
public ulong uliAssemblySizeInKB; |
||||
public string pszCurrentAssemblyPathBuf; |
||||
public uint cchBuf; |
||||
} |
||||
|
||||
|
||||
[ |
||||
ComImport(), |
||||
Guid("E707DCDE-D1CD-11D2-BAB9-00C04F8ECEAE"), |
||||
InterfaceType(ComInterfaceType.InterfaceIsIUnknown) |
||||
] |
||||
interface IAssemblyCache |
||||
{ |
||||
[PreserveSig()] |
||||
int UninstallAssembly( |
||||
uint dwFlags, |
||||
[MarshalAs(UnmanagedType.LPWStr)] string pszAssemblyName, |
||||
[MarshalAs(UnmanagedType.LPArray)] FUSION_INSTALL_REFERENCE[] pRefData, |
||||
out uint pulDisposition); |
||||
|
||||
[PreserveSig()] |
||||
int QueryAssemblyInfo( |
||||
uint dwFlags, |
||||
[MarshalAs(UnmanagedType.LPWStr)] string pszAssemblyName, |
||||
ref ASSEMBLY_INFO pAsmInfo); |
||||
|
||||
[PreserveSig()] |
||||
int CreateAssemblyCacheItem( |
||||
uint dwFlags, |
||||
IntPtr pvReserved, |
||||
out IAssemblyCacheItem ppAsmItem, |
||||
[MarshalAs(UnmanagedType.LPWStr)] string pszAssemblyName); |
||||
|
||||
[PreserveSig()] |
||||
int CreateAssemblyScavenger( |
||||
[MarshalAs(UnmanagedType.IUnknown)] out object ppAsmScavenger); |
||||
|
||||
[PreserveSig()] |
||||
int InstallAssembly( |
||||
uint dwFlags, |
||||
[MarshalAs(UnmanagedType.LPWStr)] string pszManifestFilePath, |
||||
[MarshalAs(UnmanagedType.LPArray)] FUSION_INSTALL_REFERENCE[] pRefData); |
||||
} |
||||
|
||||
|
||||
[ |
||||
ComImport(), |
||||
Guid("9E3AAEB4-D1CD-11D2-BAB9-00C04F8ECEAE"), |
||||
InterfaceType(ComInterfaceType.InterfaceIsIUnknown) |
||||
] |
||||
interface IAssemblyCacheItem |
||||
{ |
||||
void CreateStream( |
||||
uint dwFlags, |
||||
[MarshalAs(UnmanagedType.LPWStr)] string pszStreamName, |
||||
uint dwFormat, |
||||
uint dwFormatFlags, |
||||
out UCOMIStream ppIStream, |
||||
ref long puliMaxSize); |
||||
|
||||
void Commit( |
||||
uint dwFlags, |
||||
out long pulDisposition); |
||||
|
||||
void AbortItem(); |
||||
} |
||||
|
||||
|
||||
enum ASM_NAME |
||||
{ |
||||
PUBLIC_KEY = 0, // byte[]
|
||||
PUBLIC_KEY_TOKEN, // byte[8]
|
||||
HASH_VALUE, |
||||
NAME, // LPWSTR
|
||||
MAJOR_VERSION, // ushort
|
||||
MINOR_VERSION, // ushort
|
||||
BUILD_NUMBER, // ushort
|
||||
REVISION_NUMBER, // ushort
|
||||
CULTURE, // LPWSTR
|
||||
PROCESSOR_ID_ARRAY, |
||||
OSINFO_ARRAY, |
||||
HASH_ALGID, |
||||
ALIAS, |
||||
CODEBASE_URL, // LPWSTR
|
||||
CODEBASE_LASTMOD, // FILETIME
|
||||
NULL_PUBLIC_KEY, |
||||
NULL_PUBLIC_KEY_TOKEN, |
||||
CUSTOM, // LPWSTR; ZAP string for NGEN assemblies
|
||||
NULL_CUSTOM, |
||||
MVID, // byte[16] / Guid
|
||||
//MAX_PARAMS
|
||||
} |
||||
|
||||
|
||||
[ |
||||
ComImport(), |
||||
Guid("CD193BC0-B4BC-11D2-9833-00C04FC31D2E"), |
||||
InterfaceType(ComInterfaceType.InterfaceIsIUnknown) |
||||
] |
||||
interface IAssemblyName |
||||
{ |
||||
[PreserveSig()] |
||||
int SetProperty( |
||||
ASM_NAME PropertyId, |
||||
IntPtr pvProperty, |
||||
uint cbProperty); |
||||
|
||||
[PreserveSig()] |
||||
int GetProperty( |
||||
ASM_NAME PropertyId, |
||||
IntPtr pvProperty, |
||||
ref uint pcbProperty); |
||||
|
||||
[PreserveSig()] |
||||
int Finalize(); |
||||
|
||||
[PreserveSig()] |
||||
int GetDisplayName( |
||||
[Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder szDisplayName, |
||||
ref uint pccDisplayName, |
||||
ASM_DISPLAY_FLAGS dwDisplayFlags); |
||||
|
||||
[PreserveSig()] |
||||
int BindToObject( |
||||
ref Guid refIID, |
||||
[MarshalAs(UnmanagedType.IUnknown)] object pUnkSink, |
||||
[MarshalAs(UnmanagedType.IUnknown)] object pUnkContext, // IApplicationContext
|
||||
[MarshalAs(UnmanagedType.LPWStr)] string szCodeBase, |
||||
long llFlags, |
||||
IntPtr pvReserved, |
||||
uint cbReserved, |
||||
out IntPtr ppv); |
||||
|
||||
[PreserveSig()] |
||||
int GetName( |
||||
ref uint lpcwBuffer, |
||||
[Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwzName); |
||||
|
||||
[PreserveSig()] |
||||
int GetVersion( |
||||
out uint pdwVersionHi, |
||||
out uint pdwVersionLow); |
||||
|
||||
[PreserveSig()] |
||||
int IsEqual( |
||||
IAssemblyName pName, |
||||
ASM_CMP_FLAGS dwCmpFlags); |
||||
|
||||
[PreserveSig()] |
||||
int Clone( |
||||
out IAssemblyName pName); |
||||
} |
||||
|
||||
|
||||
[ |
||||
ComImport(), |
||||
Guid("21B8916C-F28E-11D2-A473-00C04F8EF448"), |
||||
InterfaceType(ComInterfaceType.InterfaceIsIUnknown) |
||||
] |
||||
interface IAssemblyEnum |
||||
{ |
||||
[PreserveSig()] |
||||
int GetNextAssembly( |
||||
IntPtr pvReserved, |
||||
out IAssemblyName ppName, |
||||
uint dwFlags); |
||||
|
||||
[PreserveSig()] |
||||
int Reset(); |
||||
|
||||
[PreserveSig()] |
||||
int Clone( |
||||
out IAssemblyEnum ppEnum); |
||||
} |
||||
|
||||
|
||||
[ |
||||
ComImport(), |
||||
Guid("1D23DF4D-A1E2-4B8B-93D6-6EA3DC285A54"), |
||||
InterfaceType(ComInterfaceType.InterfaceIsIUnknown) |
||||
] |
||||
interface IHistoryReader |
||||
{ |
||||
[PreserveSig()] |
||||
int GetFilePath( |
||||
[Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder wzFilePath, |
||||
ref uint pdwSize); |
||||
|
||||
[PreserveSig()] |
||||
int GetApplicationName( |
||||
[Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder wzAppName, |
||||
ref uint pdwSize); |
||||
|
||||
[PreserveSig()] |
||||
int GetEXEModulePath( |
||||
[Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder wzExePath, |
||||
ref uint pdwSize); |
||||
|
||||
void GetNumActivations( |
||||
out uint pdwNumActivations); |
||||
|
||||
void GetActivationDate( |
||||
uint dwIdx, // One-based!
|
||||
out long /* FILETIME */ pftDate); |
||||
|
||||
[PreserveSig()] |
||||
int GetRunTimeVersion( |
||||
ref long /* FILETIME */ pftActivationDate, |
||||
[Out(), MarshalAs(UnmanagedType.LPWStr)] StringBuilder wzRunTimeVersion, |
||||
ref uint pdwSize); |
||||
|
||||
void GetNumAssemblies( |
||||
ref long /* FILETIME */ pftActivationDate, |
||||
out uint pdwNumAsms); |
||||
|
||||
void GetHistoryAssembly( |
||||
ref long /* FILETIME */ pftActivationDate, |
||||
uint dwIdx, // One-based!
|
||||
[MarshalAs(UnmanagedType.IUnknown)] out object ppHistAsm); |
||||
|
||||
} |
||||
|
||||
|
||||
[ |
||||
ComImport(), |
||||
Guid("582dac66-e678-449f-aba6-6faaec8a9394"), |
||||
InterfaceType(ComInterfaceType.InterfaceIsIUnknown) |
||||
] |
||||
interface IInstallReferenceItem |
||||
{ |
||||
[PreserveSig()] |
||||
int GetReference( |
||||
out IntPtr ppRefData, // FUSION_INSTALL_REFERENCE**
|
||||
uint dwFlags, |
||||
IntPtr pvReserved); |
||||
} |
||||
|
||||
|
||||
[ |
||||
ComImport(), |
||||
Guid("56b1a988-7c0c-4aa2-8639-c3eb5a90226f"), |
||||
InterfaceType(ComInterfaceType.InterfaceIsIUnknown) |
||||
] |
||||
interface IInstallReferenceEnum |
||||
{ |
||||
[PreserveSig()] |
||||
int GetNextInstallReferenceItem( |
||||
out IInstallReferenceItem ppRefItem, |
||||
uint dwFlags, |
||||
IntPtr pvReserved); |
||||
} |
||||
|
||||
|
||||
|
||||
class FusionApi |
||||
{ |
||||
// Install reference scheme identifiers
|
||||
public static readonly Guid FUSION_REFCOUNT_UNINSTALL_SUBKEY_GUID = new Guid("8cedc215-ac4b-488b-93c0-a50a49cb2fb8"); |
||||
public static readonly Guid FUSION_REFCOUNT_FILEPATH_GUID = new Guid("b02f9d65-fb77-4f7a-afa5-b391309f11c9"); |
||||
public static readonly Guid FUSION_REFCOUNT_OPAQUE_STRING_GUID = new Guid("2ec93463-b0c3-45e1-8364-327e96aea856"); |
||||
public static readonly Guid FUSION_REFCOUNT_MSI_GUID = new Guid("25df0fc1-7f97-4070-add7-4b13bbfd7cb8"); |
||||
|
||||
const uint IASSEMBLYCACHE_INSTALL_FLAG_REFRESH = 0x00000001; |
||||
const uint IASSEMBLYCACHE_INSTALL_FLAG_FORCE_REFRESH = 0x00000002; |
||||
|
||||
const uint IASSEMBLYCACHE_UNINSTALL_DISPOSITION_UNINSTALLED = 1; |
||||
const uint IASSEMBLYCACHE_UNINSTALL_DISPOSITION_STILL_IN_USE = 2; |
||||
const uint IASSEMBLYCACHE_UNINSTALL_DISPOSITION_ALREADY_UNINSTALLED = 3; |
||||
const uint IASSEMBLYCACHE_UNINSTALL_DISPOSITION_DELETE_PENDING = 4; |
||||
const uint IASSEMBLYCACHE_UNINSTALL_DISPOSITION_HAS_INSTALL_REFERENCES = 5; |
||||
const uint IASSEMBLYCACHE_UNINSTALL_DISPOSITION_REFERENCE_NOT_FOUND = 6; |
||||
|
||||
|
||||
[DllImport("fusion.dll", CharSet=CharSet.Unicode, PreserveSig=false)] |
||||
public static extern void GetCachePath( |
||||
ASM_CACHE_FLAGS dwCacheFlags, |
||||
[MarshalAs(UnmanagedType.LPWStr)] StringBuilder pwzCachePath, |
||||
ref uint pcchPath); |
||||
|
||||
[DllImport("fusion.dll", PreserveSig=false)] |
||||
public static extern void CreateAssemblyCache( |
||||
out IAssemblyCache ppAsmCache, |
||||
uint dwReserved); |
||||
|
||||
[DllImport("fusion.dll", PreserveSig=false)] |
||||
public static extern void CreateAssemblyEnum( |
||||
out IAssemblyEnum ppEnum, |
||||
IntPtr pUnkReserved, |
||||
IAssemblyName pName, |
||||
ASM_CACHE_FLAGS dwFlags, |
||||
IntPtr pvReserved); |
||||
|
||||
[DllImport("fusion.dll", CharSet=CharSet.Unicode, PreserveSig=false)] |
||||
public static extern void CreateAssemblyNameObject( |
||||
out IAssemblyName ppName, |
||||
string szAssemblyName, |
||||
uint dwFlags, |
||||
IntPtr pvReserved); |
||||
|
||||
[DllImport("fusion.dll", PreserveSig=false)] |
||||
public static extern void CreateInstallReferenceEnum( |
||||
out IInstallReferenceEnum ppRefEnum, |
||||
IAssemblyName pName, |
||||
uint dwFlags, |
||||
IntPtr pvReserved); |
||||
|
||||
|
||||
[DllImport("fusion.dll", CharSet=CharSet.Unicode, PreserveSig=false)] |
||||
public static extern void CreateHistoryReader( |
||||
string wzFilePath, |
||||
out IHistoryReader ppHistReader); |
||||
|
||||
// Retrieves the path of the ApplicationHistory folder, typically
|
||||
// Documents and Settings\<user>\Local Settings\Application Data\ApplicationHistory
|
||||
// containing .ini files that can be read with IHistoryReader.
|
||||
// pwdSize appears to be the offset of the last backslash in the returned
|
||||
// string after the call.
|
||||
[DllImport("fusion.dll", CharSet=CharSet.Unicode, PreserveSig=false)] |
||||
public static extern void GetHistoryFileDirectory( |
||||
[MarshalAs(UnmanagedType.LPWStr)] StringBuilder wzDir, |
||||
ref uint pdwSize); |
||||
|
||||
[DllImport("fusion.dll", CharSet=CharSet.Unicode, PreserveSig=false)] |
||||
public static extern void LookupHistoryAssembly( |
||||
string pwzFilePath, |
||||
ref FILETIME pftActivationDate, |
||||
string pwzAsmName, |
||||
string pwzPublicKeyToken, |
||||
string wzCulture, |
||||
string pwzVerRef, |
||||
out IntPtr pHistAsm); // IHistoryAssembly
|
||||
|
||||
[DllImport("fusion.dll", PreserveSig=false)] |
||||
public static extern void NukeDownloadedCache(); |
||||
|
||||
[DllImport("fusion.dll", PreserveSig=false)] |
||||
public static extern void CreateApplicationContext( |
||||
IAssemblyName pName, |
||||
out IntPtr ppCtx); // IApplicationContext
|
||||
|
||||
|
||||
//
|
||||
// Brings up the .NET Applicaion Restore wizard
|
||||
// Returns S_OK, 0x80131075 (App not run) or 0x80131087 (Fix failed)
|
||||
//
|
||||
[DllImport("shfusion.dll", CharSet=CharSet.Unicode)] |
||||
public static extern uint PolicyManager( |
||||
IntPtr hWndParent, |
||||
string pwzFullyQualifiedAppPath, |
||||
string pwzAppName, |
||||
int dwFlags); |
||||
|
||||
} |
||||
} |
||||
@ -1,118 +0,0 @@
@@ -1,118 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
using ICSharpCode.SharpAssembly.PE; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata |
||||
{ |
||||
|
||||
public class AssemblyMetadata |
||||
{ |
||||
const uint MAGIC_SIGN = 0x424A5342; |
||||
ushort majorVersion; |
||||
ushort minorVersion; |
||||
uint reserved; |
||||
uint length; |
||||
string versionString; |
||||
ushort flags; |
||||
ushort numerOfStreams; |
||||
|
||||
StreamHeader[] streamHeaders; |
||||
|
||||
public ushort MajorVersion { |
||||
get { |
||||
return majorVersion; |
||||
} |
||||
set { |
||||
majorVersion = value; |
||||
} |
||||
} |
||||
public ushort MinorVersion { |
||||
get { |
||||
return minorVersion; |
||||
} |
||||
set { |
||||
minorVersion = value; |
||||
} |
||||
} |
||||
public uint Reserved { |
||||
get { |
||||
return reserved; |
||||
} |
||||
set { |
||||
reserved = value; |
||||
} |
||||
} |
||||
public uint Length { |
||||
get { |
||||
return length; |
||||
} |
||||
set { |
||||
length = value; |
||||
} |
||||
} |
||||
public string VersionString { |
||||
get { |
||||
return versionString; |
||||
} |
||||
set { |
||||
versionString = value; |
||||
} |
||||
} |
||||
public ushort Flags { |
||||
get { |
||||
return flags; |
||||
} |
||||
set { |
||||
flags = value; |
||||
} |
||||
} |
||||
public ushort NumerOfStreams { |
||||
get { |
||||
return numerOfStreams; |
||||
} |
||||
set { |
||||
numerOfStreams = value; |
||||
} |
||||
} |
||||
public StreamHeader[] StreamHeaders { |
||||
get { |
||||
return streamHeaders; |
||||
} |
||||
set { |
||||
streamHeaders = value; |
||||
} |
||||
} |
||||
|
||||
|
||||
public void LoadFrom(BinaryReader binaryReader) |
||||
{ |
||||
uint signature = binaryReader.ReadUInt32(); |
||||
if (signature != MAGIC_SIGN) { |
||||
Console.WriteLine("WARNING signature != MAGIC_SIGN "); |
||||
} |
||||
|
||||
majorVersion = binaryReader.ReadUInt16(); |
||||
minorVersion = binaryReader.ReadUInt16(); |
||||
reserved = binaryReader.ReadUInt32(); |
||||
length = binaryReader.ReadUInt32(); |
||||
byte[] versionStringBytes = new byte[length]; |
||||
binaryReader.Read(versionStringBytes, 0, (int)length); |
||||
versionString = System.Text.Encoding.UTF8.GetString(versionStringBytes); |
||||
flags = binaryReader.ReadUInt16(); |
||||
numerOfStreams = binaryReader.ReadUInt16(); |
||||
streamHeaders = new StreamHeader[numerOfStreams]; |
||||
for (int i = 0; i < numerOfStreams; ++i) { |
||||
streamHeaders[i] = new StreamHeader(); |
||||
streamHeaders[i].LoadFrom(binaryReader); |
||||
} |
||||
|
||||
} |
||||
} |
||||
} |
||||
@ -1,236 +0,0 @@
@@ -1,236 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.Reflection; |
||||
using System.Collections; |
||||
using System.IO; |
||||
using ICSharpCode.SharpAssembly.Metadata.Rows; |
||||
using MDRows = ICSharpCode.SharpAssembly.Metadata.Rows; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata |
||||
{ |
||||
|
||||
public class MetadataTable |
||||
{ |
||||
uint reserved; |
||||
byte majorVersion; |
||||
byte minorVersion; |
||||
byte heapSizes; |
||||
ulong valid; |
||||
ulong sorted; |
||||
uint[] rows; |
||||
|
||||
Hashtable tableIndices = new Hashtable(); |
||||
Hashtable tables = new Hashtable(); |
||||
|
||||
// map TABLE_ID to index in rows
|
||||
public Hashtable TableIndices { |
||||
get { |
||||
return tableIndices; |
||||
} |
||||
} |
||||
|
||||
public Hashtable Tables { |
||||
get { |
||||
return tables; |
||||
} |
||||
} |
||||
|
||||
public uint Reserved { |
||||
get { |
||||
return reserved; |
||||
} |
||||
set { |
||||
reserved = value; |
||||
} |
||||
} |
||||
public byte MajorVersion { |
||||
get { |
||||
return majorVersion; |
||||
} |
||||
set { |
||||
majorVersion = value; |
||||
} |
||||
} |
||||
public byte MinorVersion { |
||||
get { |
||||
return minorVersion; |
||||
} |
||||
set { |
||||
minorVersion = value; |
||||
} |
||||
} |
||||
public byte HeapSizes { |
||||
get { |
||||
return heapSizes; |
||||
} |
||||
set { |
||||
heapSizes = value; |
||||
} |
||||
} |
||||
public ulong Valid { |
||||
get { |
||||
return valid; |
||||
} |
||||
set { |
||||
valid = value; |
||||
} |
||||
} |
||||
public ulong Sorted { |
||||
get { |
||||
return sorted; |
||||
} |
||||
set { |
||||
sorted = value; |
||||
} |
||||
} |
||||
public uint[] Rows { |
||||
get { |
||||
return rows; |
||||
} |
||||
set { |
||||
rows = value; |
||||
} |
||||
} |
||||
|
||||
public bool FourByteStringIndices { |
||||
get { |
||||
return (heapSizes & 1) == 1; |
||||
} |
||||
} |
||||
public bool FourByteGUIDIndices { |
||||
get { |
||||
return (heapSizes & 2) == 2; |
||||
} |
||||
} |
||||
public bool FourByteBlobIndices { |
||||
get { |
||||
return (heapSizes & 4) == 4; |
||||
} |
||||
} |
||||
|
||||
public AbstractRow[] LoadTable(BinaryReader binaryReader, Type tableType, uint count) |
||||
{ |
||||
// rows start at 1, as the indices in the metadata do
|
||||
AbstractRow[] array = (AbstractRow[])Array.CreateInstance(tableType, count+1); |
||||
for (int i = 1; i <= count; ++i) { |
||||
array[i] = (AbstractRow)tableType.Assembly.CreateInstance(tableType.FullName); |
||||
array[i].BinaryReader = binaryReader; |
||||
array[i].MetadataTable = this; |
||||
array[i].LoadRow(); |
||||
} |
||||
return array; |
||||
} |
||||
|
||||
public uint GetRowCount(int tableID) |
||||
{ |
||||
object index = tableIndices[tableID]; |
||||
if (index is uint) { |
||||
return rows[(uint)index]; |
||||
} |
||||
return 0; |
||||
} |
||||
|
||||
public uint GetMultipleRowCount(params int[] tableID) |
||||
{ |
||||
uint count = 0; |
||||
foreach (int id in tableID) { |
||||
object index = tableIndices[id]; |
||||
if (index != null) { |
||||
count += rows[(uint)index]; |
||||
} |
||||
} |
||||
return count; |
||||
} |
||||
|
||||
public uint GetMaxRowCount(params int[] tableID) |
||||
{ |
||||
uint maxcount = 0; |
||||
foreach (int id in tableID) { |
||||
object index = tableIndices[id]; |
||||
if (index is uint) { |
||||
uint count = rows[(uint)index]; |
||||
if (count > maxcount) maxcount = count; |
||||
} |
||||
} |
||||
return maxcount; |
||||
} |
||||
|
||||
static int GetTableID(Type type) |
||||
{ |
||||
return (int)type.InvokeMember("TABLE_ID", |
||||
BindingFlags.Static | |
||||
BindingFlags.Public | |
||||
BindingFlags.Instance | |
||||
BindingFlags.GetField, null, null, null); |
||||
} |
||||
|
||||
public void LoadFrom(BinaryReader binaryReader) |
||||
{ |
||||
reserved = binaryReader.ReadUInt32(); |
||||
majorVersion = binaryReader.ReadByte(); |
||||
minorVersion = binaryReader.ReadByte(); |
||||
heapSizes = binaryReader.ReadByte(); |
||||
reserved = binaryReader.ReadByte(); |
||||
valid = binaryReader.ReadUInt64(); |
||||
sorted = binaryReader.ReadUInt64(); |
||||
rows = new uint[CalculateNumberOfRows()]; |
||||
for (int i = 0; i < rows.Length; ++i) { |
||||
rows[i] = binaryReader.ReadUInt32(); |
||||
} |
||||
|
||||
ArrayList types = new ArrayList(); |
||||
// ArrayList allTypes = new ArrayList();
|
||||
foreach (Type type in typeof(AbstractRow).Assembly.GetTypes()) { |
||||
if (type.IsSubclassOf(typeof(AbstractRow))) { |
||||
// allTypes.Add(type);
|
||||
ulong tableBit = (ulong)1 << GetTableID(type); |
||||
if ((valid & tableBit) == tableBit) { |
||||
types.Add(type); |
||||
} |
||||
} |
||||
} |
||||
// allTypes.Sort(new TypeComparer());
|
||||
// foreach (Type type in allTypes) {
|
||||
// Console.WriteLine(GetTableID(type) + " -- " + type.Name);
|
||||
// }
|
||||
|
||||
types.Sort(new TypeComparer()); |
||||
|
||||
for (int i = 0; i < types.Count; ++i) { |
||||
tableIndices[GetTableID((Type)types[i])] = (uint)i; |
||||
} |
||||
|
||||
foreach (Type type in types) { |
||||
int id = GetTableID(type); |
||||
Tables[id] = LoadTable(binaryReader, type, rows[(uint)tableIndices[id]]); |
||||
} |
||||
} |
||||
|
||||
int CalculateNumberOfRows() |
||||
{ |
||||
int rows = 0; |
||||
ulong v = valid; |
||||
for (int i = 0; i < 64; ++i) { |
||||
rows += (int)(v & 1); |
||||
v /= 2; |
||||
} |
||||
return rows; |
||||
} |
||||
|
||||
class TypeComparer : IComparer |
||||
{ |
||||
public int Compare(object o1, object o2) |
||||
{ |
||||
return GetTableID((Type)o1).CompareTo(GetTableID((Type)o2)); |
||||
} |
||||
} |
||||
|
||||
|
||||
} |
||||
} |
||||
@ -1,107 +0,0 @@
@@ -1,107 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows |
||||
{ |
||||
|
||||
public class MethodBody |
||||
{ |
||||
public const byte CorILMethod_Fat = 0x3; |
||||
public const byte CorILMethod_TinyFormat = 0x2; |
||||
public const byte CorILMethod_MoreSects = 0x8; |
||||
public const byte CorILMethod_InitLocals = 0x10; |
||||
|
||||
uint flags = 0; |
||||
uint headerSize = 0; |
||||
ushort maxStack = 8; |
||||
uint codeSize = 0; |
||||
uint localVarSigTok = 0; |
||||
|
||||
byte[] methodData; |
||||
|
||||
public uint Flags { |
||||
get { |
||||
return flags; |
||||
} |
||||
set { |
||||
flags = value; |
||||
} |
||||
} |
||||
public uint HeaderSize { |
||||
get { |
||||
return headerSize; |
||||
} |
||||
set { |
||||
headerSize = value; |
||||
} |
||||
} |
||||
public ushort MaxStack { |
||||
get { |
||||
return maxStack; |
||||
} |
||||
set { |
||||
maxStack = value; |
||||
} |
||||
} |
||||
public uint CodeSize { |
||||
get { |
||||
return codeSize; |
||||
} |
||||
set { |
||||
codeSize = value; |
||||
} |
||||
} |
||||
public uint LocalVarSigTok { |
||||
get { |
||||
return localVarSigTok; |
||||
} |
||||
set { |
||||
localVarSigTok = value; |
||||
} |
||||
} |
||||
public byte[] MethodData { |
||||
get { |
||||
return methodData; |
||||
} |
||||
set { |
||||
methodData = value; |
||||
} |
||||
} |
||||
|
||||
|
||||
public void Load(BinaryReader reader) |
||||
{ |
||||
byte flagByte = reader.ReadByte(); |
||||
Console.Write("flagByte : " + flagByte.ToString("X")); |
||||
|
||||
switch (flagByte & 0x03) { |
||||
case CorILMethod_Fat: |
||||
byte nextByte = reader.ReadByte(); |
||||
Console.WriteLine(" nextByte : " + nextByte.ToString("X")); |
||||
|
||||
flags = (uint)(flagByte & ((nextByte & 0x0F) << 8)); |
||||
headerSize = (uint)(nextByte >> 4); |
||||
maxStack = reader.ReadUInt16(); |
||||
codeSize = reader.ReadUInt32(); |
||||
localVarSigTok = reader.ReadUInt32(); |
||||
// TODO : CorILMethod_MoreSects
|
||||
break; |
||||
case CorILMethod_TinyFormat: |
||||
flags = (uint)flagByte & 0x03; |
||||
codeSize = (uint)flagByte >> 2; |
||||
break; |
||||
default: |
||||
throw new System.NotSupportedException("not supported method body flag " + flagByte); |
||||
} |
||||
methodData = new byte[codeSize]; |
||||
reader.Read(methodData, 0, (int)codeSize); |
||||
} |
||||
} |
||||
} |
||||
@ -1,148 +0,0 @@
@@ -1,148 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public abstract class AbstractRow |
||||
{ |
||||
protected BinaryReader binaryReader; |
||||
protected MetadataTable metadataTable; |
||||
|
||||
public BinaryReader BinaryReader { |
||||
get { |
||||
return binaryReader; |
||||
} |
||||
set { |
||||
binaryReader = value; |
||||
} |
||||
} |
||||
|
||||
public MetadataTable MetadataTable { |
||||
get { |
||||
return metadataTable; |
||||
} |
||||
set { |
||||
metadataTable = value; |
||||
} |
||||
} |
||||
|
||||
protected bool BaseIsFlagSet(uint flags, uint flag, uint flag_mask) |
||||
{ |
||||
return ((flags & flag_mask) == flag); |
||||
} |
||||
|
||||
protected bool BaseIsFlagSet(uint flags, uint flag) |
||||
{ |
||||
return ((flags & flag) == flag); |
||||
} |
||||
|
||||
protected uint ReadCodedIndex(CodedIndex codedIndex) |
||||
{ |
||||
uint number = 0; |
||||
int bits = 0; |
||||
switch (codedIndex) { |
||||
case CodedIndex.TypeDefOrRef: |
||||
number = metadataTable.GetMaxRowCount(TypeDef.TABLE_ID, TypeRef.TABLE_ID, TypeSpec.TABLE_ID); |
||||
bits = 2; |
||||
break; |
||||
case CodedIndex.HasConstant: |
||||
number = metadataTable.GetMaxRowCount(Field.TABLE_ID, Param.TABLE_ID, Property.TABLE_ID); |
||||
bits = 2; |
||||
break; |
||||
case CodedIndex.HasCustomAttribute: |
||||
number = metadataTable.GetMaxRowCount(Method.TABLE_ID, Field.TABLE_ID, TypeRef.TABLE_ID, |
||||
TypeDef.TABLE_ID, Param.TABLE_ID, InterfaceImpl.TABLE_ID, |
||||
MemberRef.TABLE_ID, Module.TABLE_ID, DeclSecurity.TABLE_ID, |
||||
Property.TABLE_ID, Event.TABLE_ID, StandAloneSig.TABLE_ID, |
||||
ModuleRef.TABLE_ID, TypeSpec.TABLE_ID, Assembly.TABLE_ID, |
||||
AssemblyRef.TABLE_ID, File.TABLE_ID, ExportedType.TABLE_ID, |
||||
ManifestResource.TABLE_ID); |
||||
bits = 5; |
||||
break; |
||||
case CodedIndex.HasFieldMarshall: |
||||
number = metadataTable.GetMaxRowCount(Field.TABLE_ID, Param.TABLE_ID); |
||||
bits = 1; |
||||
break; |
||||
case CodedIndex.HasDeclSecurity: |
||||
number = metadataTable.GetMaxRowCount(TypeDef.TABLE_ID, Method.TABLE_ID, Assembly.TABLE_ID); |
||||
bits = 2; |
||||
break; |
||||
case CodedIndex.MemberRefParent: |
||||
number = metadataTable.GetMaxRowCount(TypeDef.TABLE_ID, TypeRef.TABLE_ID, ModuleRef.TABLE_ID, Method.TABLE_ID, TypeSpec.TABLE_ID); |
||||
bits = 3; |
||||
break; |
||||
case CodedIndex.HasSemantics: |
||||
number = metadataTable.GetMaxRowCount(Event.TABLE_ID, Property.TABLE_ID); |
||||
bits = 1; |
||||
break; |
||||
case CodedIndex.MethodDefOrRef: |
||||
number = metadataTable.GetMaxRowCount(Method.TABLE_ID, MemberRef.TABLE_ID); |
||||
bits = 1; |
||||
break; |
||||
case CodedIndex.MemberForwarded: |
||||
number = metadataTable.GetMaxRowCount(Field.TABLE_ID, Method.TABLE_ID); |
||||
bits = 1; |
||||
break; |
||||
case CodedIndex.Implementation: |
||||
number = metadataTable.GetMaxRowCount(File.TABLE_ID, AssemblyRef.TABLE_ID, ExportedType.TABLE_ID); |
||||
bits = 2; |
||||
break; |
||||
case CodedIndex.CustomAttributeType: |
||||
//number = metadataTable.GetMaxRowCount(TypeRef.TABLE_ID, TypeDef.TABLE_ID, Method.TABLE_ID, MemberRef.TABLE_ID/* TODO : , String ? */);
|
||||
number = metadataTable.GetMaxRowCount(Method.TABLE_ID, MemberRef.TABLE_ID); |
||||
bits = 3; |
||||
break; |
||||
case CodedIndex.ResolutionScope: |
||||
number = metadataTable.GetMaxRowCount(Module.TABLE_ID, ModuleRef.TABLE_ID, AssemblyRef.TABLE_ID, TypeRef.TABLE_ID); |
||||
bits = 2; |
||||
break; |
||||
} |
||||
if (number > 1 << (16 - bits)) { |
||||
return binaryReader.ReadUInt32(); |
||||
} |
||||
return binaryReader.ReadUInt16(); |
||||
} |
||||
|
||||
protected uint ReadSimpleIndex(int tableID) |
||||
{ |
||||
uint rowCount = metadataTable.GetRowCount(tableID); |
||||
if (rowCount >= (1 << 16)) { |
||||
return binaryReader.ReadUInt32(); |
||||
} |
||||
return binaryReader.ReadUInt16(); |
||||
} |
||||
|
||||
protected uint LoadStringIndex() |
||||
{ |
||||
if (metadataTable.FourByteStringIndices) { |
||||
return binaryReader.ReadUInt32(); |
||||
} |
||||
return binaryReader.ReadUInt16(); |
||||
} |
||||
|
||||
protected uint LoadBlobIndex() |
||||
{ |
||||
if (metadataTable.FourByteBlobIndices) { |
||||
return binaryReader.ReadUInt32(); |
||||
} |
||||
return binaryReader.ReadUInt16(); |
||||
} |
||||
|
||||
protected uint LoadGUIDIndex() |
||||
{ |
||||
if (metadataTable.FourByteGUIDIndices) { |
||||
return binaryReader.ReadUInt32(); |
||||
} |
||||
return binaryReader.ReadUInt16(); |
||||
} |
||||
|
||||
public abstract void LoadRow(); |
||||
} |
||||
} |
||||
@ -1,114 +0,0 @@
@@ -1,114 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class Assembly : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x20; |
||||
|
||||
uint hashAlgID; |
||||
ushort majorVersion; |
||||
ushort minorVersion; |
||||
ushort buildNumber; |
||||
ushort revisionNumber; |
||||
uint flags; |
||||
|
||||
uint publicKey; // index into the BLOB heap
|
||||
uint name; // index into the string heap
|
||||
uint culture; // index into the string heap
|
||||
|
||||
public uint HashAlgID { |
||||
get { |
||||
return hashAlgID; |
||||
} |
||||
set { |
||||
hashAlgID = value; |
||||
} |
||||
} |
||||
public ushort MajorVersion { |
||||
get { |
||||
return majorVersion; |
||||
} |
||||
set { |
||||
majorVersion = value; |
||||
} |
||||
} |
||||
public ushort MinorVersion { |
||||
get { |
||||
return minorVersion; |
||||
} |
||||
set { |
||||
minorVersion = value; |
||||
} |
||||
} |
||||
public ushort BuildNumber { |
||||
get { |
||||
return buildNumber; |
||||
} |
||||
set { |
||||
buildNumber = value; |
||||
} |
||||
} |
||||
public ushort RevisionNumber { |
||||
get { |
||||
return revisionNumber; |
||||
} |
||||
set { |
||||
revisionNumber = value; |
||||
} |
||||
} |
||||
public uint Flags { |
||||
get { |
||||
return flags; |
||||
} |
||||
set { |
||||
flags = value; |
||||
} |
||||
} |
||||
public uint PublicKey { |
||||
get { |
||||
return publicKey; |
||||
} |
||||
set { |
||||
publicKey = value; |
||||
} |
||||
} |
||||
public uint Name { |
||||
get { |
||||
return name; |
||||
} |
||||
set { |
||||
name = value; |
||||
} |
||||
} |
||||
public uint Culture { |
||||
get { |
||||
return culture; |
||||
} |
||||
set { |
||||
culture = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
hashAlgID = binaryReader.ReadUInt32(); |
||||
majorVersion = binaryReader.ReadUInt16(); |
||||
minorVersion = binaryReader.ReadUInt16(); |
||||
buildNumber = binaryReader.ReadUInt16(); |
||||
revisionNumber = binaryReader.ReadUInt16(); |
||||
flags = binaryReader.ReadUInt32(); |
||||
publicKey = LoadBlobIndex(); |
||||
name = LoadStringIndex(); |
||||
culture = LoadStringIndex(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,55 +0,0 @@
@@ -1,55 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class AssemblyOS : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x22; |
||||
|
||||
|
||||
uint osPlatformID; |
||||
uint osMajorVersion; |
||||
uint osMinorVersion; |
||||
|
||||
public uint OSPlatformID { |
||||
get { |
||||
return osPlatformID; |
||||
} |
||||
set { |
||||
osPlatformID = value; |
||||
} |
||||
} |
||||
public uint OSMajorVersion { |
||||
get { |
||||
return osMajorVersion; |
||||
} |
||||
set { |
||||
osMajorVersion = value; |
||||
} |
||||
} |
||||
public uint OSMinorVersion { |
||||
get { |
||||
return osMinorVersion; |
||||
} |
||||
set { |
||||
osMinorVersion = value; |
||||
} |
||||
} |
||||
|
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
osPlatformID = binaryReader.ReadUInt32(); |
||||
osMajorVersion = binaryReader.ReadUInt32(); |
||||
osMinorVersion = binaryReader.ReadUInt32(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,33 +0,0 @@
@@ -1,33 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class AssemblyProcessor : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x21; |
||||
|
||||
uint processor; |
||||
|
||||
public uint Processor { |
||||
get { |
||||
return processor; |
||||
} |
||||
set { |
||||
processor = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
processor = binaryReader.ReadUInt32(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,116 +0,0 @@
@@ -1,116 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class AssemblyRef : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x23; |
||||
|
||||
ushort major; |
||||
ushort minor; |
||||
ushort build; |
||||
ushort revision; |
||||
uint flags; |
||||
uint publicKeyOrToken; // index into Blob heap
|
||||
uint name; // index into String heap
|
||||
uint culture; // index into String heap
|
||||
uint hashValue; // index into Blob heap
|
||||
|
||||
public ushort Major { |
||||
get { |
||||
return major; |
||||
} |
||||
set { |
||||
major = value; |
||||
} |
||||
} |
||||
public ushort Minor { |
||||
get { |
||||
return minor; |
||||
} |
||||
set { |
||||
minor = value; |
||||
} |
||||
} |
||||
|
||||
public ushort Build { |
||||
get { |
||||
return build; |
||||
} |
||||
set { |
||||
build = value; |
||||
} |
||||
} |
||||
|
||||
public ushort Revision { |
||||
get { |
||||
return revision; |
||||
} |
||||
set { |
||||
revision = value; |
||||
} |
||||
} |
||||
|
||||
public uint Flags { |
||||
get { |
||||
return flags; |
||||
} |
||||
set { |
||||
flags = value; |
||||
} |
||||
} |
||||
public uint PublicKeyOrToken { |
||||
get { |
||||
return publicKeyOrToken; |
||||
} |
||||
set { |
||||
publicKeyOrToken = value; |
||||
} |
||||
} |
||||
public uint Name { |
||||
get { |
||||
return name; |
||||
} |
||||
set { |
||||
name = value; |
||||
} |
||||
} |
||||
public uint Culture { |
||||
get { |
||||
return culture; |
||||
} |
||||
set { |
||||
culture = value; |
||||
} |
||||
} |
||||
public uint HashValue { |
||||
get { |
||||
return hashValue; |
||||
} |
||||
set { |
||||
hashValue = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
major = binaryReader.ReadUInt16(); |
||||
minor = binaryReader.ReadUInt16(); |
||||
build = binaryReader.ReadUInt16(); |
||||
revision = binaryReader.ReadUInt16(); |
||||
flags = binaryReader.ReadUInt32(); |
||||
publicKeyOrToken = LoadBlobIndex(); |
||||
name = LoadStringIndex(); |
||||
culture = LoadStringIndex(); |
||||
hashValue = LoadBlobIndex(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,63 +0,0 @@
@@ -1,63 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class AssemblyRefOS : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x25; |
||||
|
||||
uint osPlatformID; |
||||
uint osMajorVersion; |
||||
uint osMinorVersion; |
||||
uint assemblyRefIndex; // index into the AssemblyRef table
|
||||
|
||||
public uint OSPlatformID { |
||||
get { |
||||
return osPlatformID; |
||||
} |
||||
set { |
||||
osPlatformID = value; |
||||
} |
||||
} |
||||
public uint OSMajorVersion { |
||||
get { |
||||
return osMajorVersion; |
||||
} |
||||
set { |
||||
osMajorVersion = value; |
||||
} |
||||
} |
||||
public uint OSMinorVersion { |
||||
get { |
||||
return osMinorVersion; |
||||
} |
||||
set { |
||||
osMinorVersion = value; |
||||
} |
||||
} |
||||
public uint AssemblyRefIndex { |
||||
get { |
||||
return assemblyRefIndex; |
||||
} |
||||
set { |
||||
assemblyRefIndex = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
osPlatformID = binaryReader.ReadUInt32(); |
||||
osMajorVersion = binaryReader.ReadUInt32(); |
||||
osMinorVersion = binaryReader.ReadUInt32(); |
||||
assemblyRefIndex = ReadSimpleIndex(AssemblyRef.TABLE_ID); |
||||
} |
||||
} |
||||
} |
||||
@ -1,43 +0,0 @@
@@ -1,43 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class AssemblyRefProcessor : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x24; |
||||
|
||||
uint processor; |
||||
uint assemblyRefIndex; // index into the AssemblyRef table
|
||||
|
||||
public uint Processor { |
||||
get { |
||||
return processor; |
||||
} |
||||
set { |
||||
processor = value; |
||||
} |
||||
} |
||||
public uint AssemblyRefIndex { |
||||
get { |
||||
return assemblyRefIndex; |
||||
} |
||||
set { |
||||
assemblyRefIndex = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
processor = binaryReader.ReadUInt32(); |
||||
assemblyRefIndex = ReadSimpleIndex(AssemblyRef.TABLE_ID); |
||||
} |
||||
} |
||||
} |
||||
@ -1,54 +0,0 @@
@@ -1,54 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class ClassLayout : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x0F; |
||||
|
||||
ushort packingSize; |
||||
uint classSize; |
||||
uint parent; // index into TypeDef table
|
||||
|
||||
public ushort PackingSize { |
||||
get { |
||||
return packingSize; |
||||
} |
||||
set { |
||||
packingSize = value; |
||||
} |
||||
} |
||||
public uint ClassSize { |
||||
get { |
||||
return classSize; |
||||
} |
||||
set { |
||||
classSize = value; |
||||
} |
||||
} |
||||
public uint Parent { |
||||
get { |
||||
return parent; |
||||
} |
||||
set { |
||||
parent = value; |
||||
} |
||||
} |
||||
|
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
packingSize = binaryReader.ReadUInt16(); |
||||
classSize = binaryReader.ReadUInt32(); |
||||
parent = ReadSimpleIndex(TypeDef.TABLE_ID); |
||||
} |
||||
} |
||||
} |
||||
@ -1,24 +0,0 @@
@@ -1,24 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public enum CodedIndex { |
||||
TypeDefOrRef, |
||||
HasConstant, |
||||
HasCustomAttribute, |
||||
HasFieldMarshall, |
||||
HasDeclSecurity, |
||||
MemberRefParent, |
||||
HasSemantics, |
||||
MethodDefOrRef, |
||||
MemberForwarded, |
||||
Implementation, |
||||
CustomAttributeType, |
||||
ResolutionScope |
||||
} |
||||
} |
||||
@ -1,57 +0,0 @@
@@ -1,57 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class Constant : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x0B; |
||||
|
||||
byte type; // a 1 byte constant, followed by a 1-byte padding zero
|
||||
uint parent; // index into the Param or Field or Property table; more precisely, a HasConst coded index
|
||||
uint val; // index into Blob heap
|
||||
|
||||
public byte Type { |
||||
get { |
||||
return type; |
||||
} |
||||
set { |
||||
type = value; |
||||
} |
||||
} |
||||
public uint Parent { |
||||
get { |
||||
return parent; |
||||
} |
||||
set { |
||||
parent = value; |
||||
} |
||||
} |
||||
public uint Val { |
||||
get { |
||||
return val; |
||||
} |
||||
set { |
||||
val = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
type = binaryReader.ReadByte(); |
||||
byte paddingZero = binaryReader.ReadByte(); |
||||
// if (paddingZero != 0) {
|
||||
// Console.WriteLine("padding zero != 0");
|
||||
// }
|
||||
parent = ReadCodedIndex(CodedIndex.HasConstant); |
||||
val = LoadBlobIndex(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,55 +0,0 @@
@@ -1,55 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class CustomAttribute : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x0C; |
||||
|
||||
uint parent; // index into any metadata table, except the CustomAttribute table itself; more precisely, a HasCustomAttribute coded index
|
||||
uint type; // index into the Method or MemberRef table; more precisely, a CustomAttributeType coded index
|
||||
uint val; // index into Blob heap
|
||||
|
||||
public uint Parent { |
||||
get { |
||||
return parent; |
||||
} |
||||
set { |
||||
parent = value; |
||||
} |
||||
} |
||||
|
||||
public uint Type { |
||||
get { |
||||
return type; |
||||
} |
||||
set { |
||||
type = value; |
||||
} |
||||
} |
||||
|
||||
public uint Val { |
||||
get { |
||||
return val; |
||||
} |
||||
set { |
||||
val = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
parent = ReadCodedIndex(CodedIndex.HasCustomAttribute); |
||||
type = ReadCodedIndex(CodedIndex.CustomAttributeType); |
||||
val = LoadBlobIndex(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,54 +0,0 @@
@@ -1,54 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class DeclSecurity : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x0E; |
||||
|
||||
|
||||
ushort action; |
||||
uint parent; // index into the TypeDef, Method or Assembly table; more precisely, a HasDeclSecurity coded index
|
||||
uint permissionSet; // index into Blob heap
|
||||
|
||||
public ushort Action { |
||||
get { |
||||
return action; |
||||
} |
||||
set { |
||||
action = value; |
||||
} |
||||
} |
||||
public uint Parent { |
||||
get { |
||||
return parent; |
||||
} |
||||
set { |
||||
parent = value; |
||||
} |
||||
} |
||||
public uint PermissionSet { |
||||
get { |
||||
return permissionSet; |
||||
} |
||||
set { |
||||
permissionSet = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
action = binaryReader.ReadUInt16(); |
||||
parent = ReadCodedIndex(CodedIndex.HasDeclSecurity); |
||||
permissionSet = LoadBlobIndex(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,43 +0,0 @@
@@ -1,43 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class ENCLog : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x1E; |
||||
|
||||
uint token; |
||||
uint funcCode; |
||||
|
||||
public uint Token { |
||||
get { |
||||
return token; |
||||
} |
||||
set { |
||||
token = value; |
||||
} |
||||
} |
||||
public uint FuncCode { |
||||
get { |
||||
return funcCode; |
||||
} |
||||
set { |
||||
funcCode = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
token = binaryReader.ReadUInt32(); |
||||
funcCode = binaryReader.ReadUInt32(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,33 +0,0 @@
@@ -1,33 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class ENCMap : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x1F; |
||||
|
||||
uint token; |
||||
|
||||
public uint Token { |
||||
get { |
||||
return token; |
||||
} |
||||
set { |
||||
token = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
token = binaryReader.ReadUInt32(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,57 +0,0 @@
@@ -1,57 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class Event : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x14; |
||||
|
||||
public static readonly ushort FLAG_SPECIALNAME = 0x0200; |
||||
public static readonly ushort FLAG_RTSPECIALNAME = 0x0400; |
||||
|
||||
ushort eventFlags; |
||||
uint name; // index into String heap
|
||||
uint eventType; // index into TypeDef, TypeRef or TypeSpec tables; more precisely, a TypeDefOrRef coded index
|
||||
|
||||
public ushort EventFlags { |
||||
get { |
||||
return eventFlags; |
||||
} |
||||
set { |
||||
eventFlags = value; |
||||
} |
||||
} |
||||
|
||||
public uint Name { |
||||
get { |
||||
return name; |
||||
} |
||||
set { |
||||
name = value; |
||||
} |
||||
} |
||||
public uint EventType { |
||||
get { |
||||
return eventType; |
||||
} |
||||
set { |
||||
eventType = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
eventFlags = binaryReader.ReadUInt16(); |
||||
name = LoadStringIndex(); |
||||
eventType = ReadCodedIndex(CodedIndex.TypeDefOrRef); |
||||
} |
||||
} |
||||
} |
||||
@ -1,44 +0,0 @@
@@ -1,44 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class EventMap : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x12; |
||||
|
||||
uint parent; // index into the TypeDef table
|
||||
uint eventList; // index into Event table
|
||||
|
||||
public uint Parent { |
||||
get { |
||||
return parent; |
||||
} |
||||
set { |
||||
parent = value; |
||||
} |
||||
} |
||||
public uint EventList { |
||||
get { |
||||
return eventList; |
||||
} |
||||
set { |
||||
eventList = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
parent = ReadSimpleIndex(TypeDef.TABLE_ID); |
||||
eventList = ReadSimpleIndex(Event.TABLE_ID); |
||||
} |
||||
} |
||||
} |
||||
@ -1,33 +0,0 @@
@@ -1,33 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class EventPtr : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 19; |
||||
|
||||
uint eventPtr; |
||||
|
||||
public uint Event { |
||||
get { |
||||
return eventPtr; |
||||
} |
||||
set { |
||||
eventPtr = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
eventPtr = ReadSimpleIndex(ICSharpCode.SharpAssembly.Metadata.Rows.Event.TABLE_ID); |
||||
} |
||||
} |
||||
} |
||||
@ -1,76 +0,0 @@
@@ -1,76 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class ExportedType : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x27; |
||||
|
||||
uint flags; |
||||
uint typeDefId; // 4 byte index into a TypeDef table of another module in this Assembly
|
||||
uint typeName; // index into the String heap
|
||||
uint typeNamespace; // index into the String heap
|
||||
uint implementation; // index see 21.14
|
||||
|
||||
public uint Flags { |
||||
get { |
||||
return flags; |
||||
} |
||||
set { |
||||
flags = value; |
||||
} |
||||
} |
||||
public uint TypeDefId { |
||||
get { |
||||
return typeDefId; |
||||
} |
||||
set { |
||||
typeDefId = value; |
||||
} |
||||
} |
||||
public uint TypeName { |
||||
get { |
||||
return typeName; |
||||
} |
||||
set { |
||||
typeName = value; |
||||
} |
||||
} |
||||
public uint TypeNamespace { |
||||
get { |
||||
return typeNamespace; |
||||
} |
||||
set { |
||||
typeNamespace = value; |
||||
} |
||||
} |
||||
public uint Implementation { |
||||
get { |
||||
return implementation; |
||||
} |
||||
set { |
||||
implementation = value; |
||||
} |
||||
} |
||||
|
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
flags = binaryReader.ReadUInt32(); |
||||
typeDefId = binaryReader.ReadUInt32(); |
||||
typeName = LoadStringIndex(); |
||||
typeNamespace = LoadStringIndex(); |
||||
|
||||
// todo 32 bit indices ?
|
||||
implementation = binaryReader.ReadUInt16(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,84 +0,0 @@
@@ -1,84 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class Field : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x04; |
||||
|
||||
public static readonly ushort FLAG_FIELDACCESSMASK = 0x0007; |
||||
public static readonly ushort FLAG_COMPILERCONTROLLED = 0x0000; |
||||
public static readonly ushort FLAG_PRIVATE = 0x0001; |
||||
public static readonly ushort FLAG_FAMANDASSEM = 0x0002; |
||||
public static readonly ushort FLAG_ASSEMBLY = 0x0003; |
||||
public static readonly ushort FLAG_FAMILY = 0x0004; |
||||
public static readonly ushort FLAG_FAMORASSEM = 0x0005; |
||||
public static readonly ushort FLAG_PUBLIC = 0x0006; |
||||
public static readonly ushort FLAG_STATIC = 0x0010; |
||||
public static readonly ushort FLAG_INITONLY = 0x0020; |
||||
public static readonly ushort FLAG_LITERAL = 0x0040; |
||||
public static readonly ushort FLAG_NOTSERIALIZED = 0x0080; |
||||
public static readonly ushort FLAG_SPECIALNAME = 0x0200; |
||||
public static readonly ushort FLAG_PINVOKEIMPL = 0x2000; |
||||
public static readonly ushort FLAG_RTSPECIALNAME = 0x0400; |
||||
public static readonly ushort FLAG_HASFIELDMARSHAL = 0x1000; |
||||
public static readonly ushort FLAG_HASDEFAULT = 0x8000; |
||||
public static readonly ushort FLAG_HASFIELDRVA = 0x0100; |
||||
|
||||
ushort flags; |
||||
uint name; // index into String heap
|
||||
uint signature; // index into Blob heap
|
||||
|
||||
public ushort Flags { |
||||
get { |
||||
return flags; |
||||
} |
||||
set { |
||||
flags = value; |
||||
} |
||||
} |
||||
|
||||
public uint Name { |
||||
get { |
||||
return name; |
||||
} |
||||
set { |
||||
name = value; |
||||
} |
||||
} |
||||
|
||||
public uint Signature { |
||||
get { |
||||
return signature; |
||||
} |
||||
set { |
||||
signature = value; |
||||
} |
||||
} |
||||
|
||||
public bool IsFlagSet(uint flag) |
||||
{ |
||||
return base.BaseIsFlagSet(this.flags, flag); |
||||
} |
||||
|
||||
public bool IsMaskedFlagSet(uint flag, uint flag_mask) |
||||
{ |
||||
return base.BaseIsFlagSet(this.flags, flag, flag_mask); |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
flags = binaryReader.ReadUInt16(); |
||||
name = LoadStringIndex(); |
||||
signature = LoadBlobIndex(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,44 +0,0 @@
@@ -1,44 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class FieldLayout : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x10; |
||||
|
||||
|
||||
uint offset; |
||||
uint field; // index into the field table
|
||||
|
||||
public uint Offset { |
||||
get { |
||||
return offset; |
||||
} |
||||
set { |
||||
offset = value; |
||||
} |
||||
} |
||||
public uint FieldIndex { |
||||
get { |
||||
return field; |
||||
} |
||||
set { |
||||
field = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
offset = binaryReader.ReadUInt32(); |
||||
field = ReadSimpleIndex(Field.TABLE_ID); |
||||
} |
||||
} |
||||
} |
||||
@ -1,44 +0,0 @@
@@ -1,44 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class FieldMarshal : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x0D; |
||||
|
||||
uint parent; // index into Field or Param table; more precisely, a HasFieldMarshal coded index
|
||||
uint nativeType; // index into the Blob heap
|
||||
|
||||
public uint Parent { |
||||
get { |
||||
return parent; |
||||
} |
||||
set { |
||||
parent = value; |
||||
} |
||||
|
||||
} |
||||
public uint NativeType { |
||||
get { |
||||
return nativeType; |
||||
} |
||||
set { |
||||
nativeType = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
parent = ReadCodedIndex(CodedIndex.HasFieldMarshall); |
||||
nativeType = LoadBlobIndex(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,33 +0,0 @@
@@ -1,33 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class FieldPtr : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x03; |
||||
|
||||
uint field; |
||||
|
||||
public uint Field { |
||||
get { |
||||
return field; |
||||
} |
||||
set { |
||||
field = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
field = ReadSimpleIndex(ICSharpCode.SharpAssembly.Metadata.Rows.Field.TABLE_ID); |
||||
} |
||||
} |
||||
} |
||||
@ -1,44 +0,0 @@
@@ -1,44 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class FieldRVA : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x1D; |
||||
|
||||
uint rva; |
||||
uint field; // index into Field table
|
||||
|
||||
public uint RVA { |
||||
get { |
||||
return rva; |
||||
} |
||||
set { |
||||
rva = value; |
||||
} |
||||
} |
||||
|
||||
public uint FieldIndex { |
||||
get { |
||||
return field; |
||||
} |
||||
set { |
||||
field = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
rva = binaryReader.ReadUInt32(); |
||||
field = ReadSimpleIndex(Field.TABLE_ID); |
||||
} |
||||
} |
||||
} |
||||
@ -1,56 +0,0 @@
@@ -1,56 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class File : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x26; |
||||
|
||||
public static readonly uint FLAG_CONTAINSMETADATA = 0x0000; |
||||
public static readonly uint FLAG_CONTAINSNOMETADATA = 0x0001; |
||||
|
||||
uint flags; |
||||
uint name; // index into String heap
|
||||
uint hashValue; // index into Blob heap
|
||||
|
||||
public uint Flags { |
||||
get { |
||||
return flags; |
||||
} |
||||
set { |
||||
flags = value; |
||||
} |
||||
} |
||||
public uint Name { |
||||
get { |
||||
return name; |
||||
} |
||||
set { |
||||
name = value; |
||||
} |
||||
} |
||||
public uint HashValue { |
||||
get { |
||||
return hashValue; |
||||
} |
||||
set { |
||||
hashValue = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
flags = binaryReader.ReadUInt32(); |
||||
name = LoadStringIndex(); |
||||
hashValue = LoadBlobIndex(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,80 +0,0 @@
@@ -1,80 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class ImplMap : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x1C; |
||||
|
||||
public static readonly ushort FLAG_NOMANGLE = 0x0001; |
||||
public static readonly ushort FLAG_CHARSETMASK = 0x0006; |
||||
public static readonly ushort FLAG_CHARSETNOTSPEC = 0x0000; |
||||
public static readonly ushort FLAG_CHARSETANSI = 0x0002; |
||||
public static readonly ushort FLAG_CHARSETUNICODE = 0x0004; |
||||
public static readonly ushort FLAG_CHARSETAUTO = 0x0006; |
||||
public static readonly ushort FLAG_SUPPORTSLASTERROR = 0x0040; |
||||
public static readonly ushort FLAG_CALLCONVMASK = 0x0700; |
||||
public static readonly ushort FLAG_CALLCONVWINAPI = 0x0100; |
||||
public static readonly ushort FLAG_CALLCONVCDECL = 0x0200; |
||||
public static readonly ushort FLAG_CALLCONVSTDCALL = 0x0300; |
||||
public static readonly ushort FLAG_CALLCONVTHISCALL = 0x0400; |
||||
public static readonly ushort FLAG_CALLCONVFASTCALL = 0x0500; |
||||
|
||||
ushort mappingFlags; |
||||
uint memberForwarded; // index into the Field or Method table; more precisely, a MemberForwarded coded index.
|
||||
uint importName; // index into the String heap
|
||||
uint importScope; // index into the ModuleRef table
|
||||
|
||||
public ushort MappingFlags { |
||||
get { |
||||
return mappingFlags; |
||||
} |
||||
set { |
||||
mappingFlags = value; |
||||
} |
||||
} |
||||
|
||||
public uint MemberForwarded { |
||||
get { |
||||
return memberForwarded; |
||||
} |
||||
set { |
||||
memberForwarded = value; |
||||
} |
||||
} |
||||
|
||||
public uint ImportName { |
||||
get { |
||||
return importName; |
||||
} |
||||
set { |
||||
importName = value; |
||||
} |
||||
} |
||||
|
||||
public uint ImportScope { |
||||
get { |
||||
return importScope; |
||||
} |
||||
set { |
||||
importScope = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
mappingFlags = binaryReader.ReadUInt16(); |
||||
memberForwarded = ReadCodedIndex(CodedIndex.MemberForwarded); |
||||
importName = LoadStringIndex(); |
||||
importScope = ReadSimpleIndex(ModuleRef.TABLE_ID); |
||||
} |
||||
} |
||||
} |
||||
@ -1,45 +0,0 @@
@@ -1,45 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class InterfaceImpl : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x09; |
||||
|
||||
uint myClass; // index into the TypeDef table
|
||||
uint myInterface; // index into the TypeDef, TypeRef or TypeSpec table; more precisely, a TypeDefOrRef coded index
|
||||
|
||||
public uint Class { |
||||
get { |
||||
return myClass; |
||||
} |
||||
set { |
||||
myClass = value; |
||||
} |
||||
} |
||||
|
||||
public uint Interface { |
||||
get { |
||||
return myInterface; |
||||
} |
||||
set { |
||||
myInterface = value; |
||||
} |
||||
} |
||||
|
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
myClass = ReadSimpleIndex(TypeDef.TABLE_ID); |
||||
myInterface = ReadCodedIndex(CodedIndex.TypeDefOrRef); |
||||
} |
||||
} |
||||
} |
||||
@ -1,70 +0,0 @@
@@ -1,70 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class ManifestResource : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x28; |
||||
|
||||
public static readonly uint FLAG_VISIBILITYMASK = 0x0007; |
||||
public static readonly uint FLAG_PUBLIC = 0x0001; |
||||
public static readonly uint FLAG_PRIVATE = 0x0002; |
||||
|
||||
uint offset; |
||||
uint flags; |
||||
uint name; // index into String heap
|
||||
uint implementation; // index into File table, or AssemblyRef table, or null; more precisely, an Implementation coded index
|
||||
|
||||
public uint Offset { |
||||
get { |
||||
return offset; |
||||
} |
||||
set { |
||||
offset = value; |
||||
} |
||||
} |
||||
|
||||
public uint Flags { |
||||
get { |
||||
return flags; |
||||
} |
||||
set { |
||||
flags = value; |
||||
} |
||||
} |
||||
|
||||
public uint Name { |
||||
get { |
||||
return name; |
||||
} |
||||
set { |
||||
name = value; |
||||
} |
||||
} |
||||
|
||||
public uint Implementation { |
||||
get { |
||||
return implementation; |
||||
} |
||||
set { |
||||
implementation = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
offset = binaryReader.ReadUInt32(); |
||||
flags = binaryReader.ReadUInt32(); |
||||
name = LoadStringIndex(); |
||||
implementation = ReadCodedIndex(CodedIndex.Implementation); |
||||
} |
||||
} |
||||
} |
||||
@ -1,54 +0,0 @@
@@ -1,54 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class MemberRef : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x0A; |
||||
|
||||
uint myClass; // index into the TypeRef, ModuleRef, Method, TypeSpec or TypeDef tables; more precisely, a MemberRefParent coded index
|
||||
uint name; // index into String heap
|
||||
uint signature; // index into Blob heap
|
||||
|
||||
public uint Class { |
||||
get { |
||||
return myClass; |
||||
} |
||||
set { |
||||
myClass = value; |
||||
} |
||||
} |
||||
public uint Name { |
||||
get { |
||||
return name; |
||||
} |
||||
set { |
||||
name = value; |
||||
} |
||||
} |
||||
public uint Signature { |
||||
get { |
||||
return signature; |
||||
} |
||||
set { |
||||
signature = value; |
||||
} |
||||
} |
||||
|
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
myClass = ReadCodedIndex(CodedIndex.MemberRefParent); |
||||
name = LoadStringIndex(); |
||||
signature = LoadBlobIndex(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,142 +0,0 @@
@@ -1,142 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class Method : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x06; |
||||
|
||||
public static readonly ushort FLAG_MEMBERACCESSMASK = 0X0007; |
||||
public static readonly ushort FLAG_COMPILERCONTROLLED = 0X0000; |
||||
public static readonly ushort FLAG_PRIVATE = 0X0001; |
||||
public static readonly ushort FLAG_FAMANDASSEM = 0X0002; |
||||
public static readonly ushort FLAG_ASSEM = 0X0003; |
||||
public static readonly ushort FLAG_FAMILY = 0X0004; |
||||
public static readonly ushort FLAG_FAMORASSEM = 0X0005; |
||||
public static readonly ushort FLAG_PUBLIC = 0X0006; |
||||
public static readonly ushort FLAG_STATIC = 0X0010; |
||||
public static readonly ushort FLAG_FINAL = 0X0020; |
||||
public static readonly ushort FLAG_VIRTUAL = 0X0040; |
||||
public static readonly ushort FLAG_HIDEBYSIG = 0X0080; |
||||
public static readonly ushort FLAG_VTABLELAYOUTMASK = 0X0100; |
||||
public static readonly ushort FLAG_REUSESLOT = 0X0000; |
||||
public static readonly ushort FLAG_NEWSLOT = 0X0100; |
||||
public static readonly ushort FLAG_ABSTRACT = 0X0400; |
||||
public static readonly ushort FLAG_SPECIALNAME = 0X0800; |
||||
public static readonly ushort FLAG_PINVOKEIMPL = 0X2000; |
||||
public static readonly ushort FLAG_UNMANAGEDEXPORT = 0X0008; |
||||
public static readonly ushort FLAG_RTSPECIALNAME = 0X1000; |
||||
public static readonly ushort FLAG_HASSECURITY = 0X4000; |
||||
public static readonly ushort FLAG_REQUIRESECOBJECT = 0X8000; |
||||
|
||||
public static readonly ushort IMPLFLAG_CODETYPEMASK = 0X0003; |
||||
public static readonly ushort IMPLFLAG_IL = 0X0000; |
||||
public static readonly ushort IMPLFLAG_NATIVE = 0X0001; |
||||
public static readonly ushort IMPLFLAG_OPTIL = 0X0002; |
||||
public static readonly ushort IMPLFLAG_RUNTIME = 0X0003; |
||||
public static readonly ushort IMPLFLAG_MANAGEDMASK = 0X0004; |
||||
public static readonly ushort IMPLFLAG_UNMANAGED = 0X0004; |
||||
public static readonly ushort IMPLFLAG_MANAGED = 0X0000; |
||||
public static readonly ushort IMPLFLAG_FORWARDREF = 0X0010; |
||||
public static readonly ushort IMPLFLAG_PRESERVESIG = 0X0080; |
||||
public static readonly ushort IMPLFLAG_INTERNALCALL = 0X1000; |
||||
public static readonly ushort IMPLFLAG_SYNCHRONIZED = 0X0020; |
||||
public static readonly ushort IMPLFLAG_NOINLINING = 0X0008; |
||||
public static readonly ushort IMPLFLAG_MAXMETHODIMPLVAL = 0XFFFF; |
||||
|
||||
uint rva; |
||||
ushort implFlags; |
||||
ushort flags; |
||||
uint name; // index into String heap
|
||||
uint signature; // index into Blob heap
|
||||
uint paramList; // index into Param table
|
||||
|
||||
public uint RVA { |
||||
get { |
||||
return rva; |
||||
} |
||||
set { |
||||
rva = value; |
||||
} |
||||
} |
||||
|
||||
public ushort ImplFlags { |
||||
get { |
||||
return implFlags; |
||||
} |
||||
set { |
||||
implFlags = value; |
||||
} |
||||
} |
||||
|
||||
public ushort Flags { |
||||
get { |
||||
return flags; |
||||
} |
||||
set { |
||||
flags = value; |
||||
} |
||||
} |
||||
|
||||
public uint Name { |
||||
get { |
||||
return name; |
||||
} |
||||
set { |
||||
name = value; |
||||
} |
||||
} |
||||
|
||||
public uint Signature { |
||||
get { |
||||
return signature; |
||||
} |
||||
set { |
||||
signature = value; |
||||
} |
||||
} |
||||
|
||||
public uint ParamList { |
||||
get { |
||||
return paramList; |
||||
} |
||||
set { |
||||
paramList = value; |
||||
} |
||||
} |
||||
|
||||
public bool IsFlagSet(uint flag) |
||||
{ |
||||
return base.BaseIsFlagSet(this.flags, flag); |
||||
} |
||||
|
||||
public bool IsMaskedFlagSet(uint flag, uint flag_mask) |
||||
{ |
||||
return base.BaseIsFlagSet(this.flags, flag, flag_mask); |
||||
} |
||||
|
||||
public bool IsImplFlagSet(uint flag) |
||||
{ |
||||
return base.BaseIsFlagSet(this.implFlags, flag); |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
rva = binaryReader.ReadUInt32(); |
||||
implFlags = binaryReader.ReadUInt16(); |
||||
flags = binaryReader.ReadUInt16(); |
||||
name = LoadStringIndex(); |
||||
signature = LoadBlobIndex(); |
||||
|
||||
paramList = ReadSimpleIndex(Param.TABLE_ID); |
||||
} |
||||
} |
||||
} |
||||
@ -1,53 +0,0 @@
@@ -1,53 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class MethodImpl : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x19; |
||||
|
||||
uint myClass; // index into TypeDef table
|
||||
uint methodBody; // index into Method or MemberRef table; more precisely, a MethodDefOrRef coded index
|
||||
uint methodDeclaration; // index into Method or MemberRef table; more precisely, a MethodDefOrRef coded index
|
||||
|
||||
public uint MyClass { |
||||
get { |
||||
return myClass; |
||||
} |
||||
set { |
||||
myClass = value; |
||||
} |
||||
} |
||||
public uint MethodBody { |
||||
get { |
||||
return methodBody; |
||||
} |
||||
set { |
||||
methodBody = value; |
||||
} |
||||
} |
||||
public uint MethodDeclaration { |
||||
get { |
||||
return methodDeclaration; |
||||
} |
||||
set { |
||||
methodDeclaration = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
myClass = ReadSimpleIndex(TypeDef.TABLE_ID); |
||||
methodBody = ReadCodedIndex(CodedIndex.MethodDefOrRef); |
||||
methodDeclaration = ReadCodedIndex(CodedIndex.MethodDefOrRef); |
||||
} |
||||
} |
||||
} |
||||
@ -1,33 +0,0 @@
@@ -1,33 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class MethodPtr : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x05; |
||||
|
||||
uint method; |
||||
|
||||
public uint Method { |
||||
get { |
||||
return method; |
||||
} |
||||
set { |
||||
method = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
method = ReadSimpleIndex(ICSharpCode.SharpAssembly.Metadata.Rows.Method.TABLE_ID); |
||||
} |
||||
} |
||||
} |
||||
@ -1,63 +0,0 @@
@@ -1,63 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class MethodSemantics : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x18; |
||||
|
||||
public static readonly ushort SEM_SETTER = 0x0001; |
||||
public static readonly ushort SEM_GETTER = 0x0002; |
||||
public static readonly ushort SEM_OTHER = 0x0004; |
||||
public static readonly ushort SEM_ADDON = 0x0008; |
||||
public static readonly ushort SEM_REMOVEON = 0x0010; |
||||
public static readonly ushort SEM_FIRE = 0x0020; |
||||
|
||||
ushort semantics; |
||||
uint method; // index into the Method table
|
||||
uint association; // index into the Event or Property table; more precisely, a HasSemantics coded index
|
||||
|
||||
public ushort Semantics { |
||||
get { |
||||
return semantics; |
||||
} |
||||
set { |
||||
semantics = value; |
||||
} |
||||
} |
||||
|
||||
public uint Method { |
||||
get { |
||||
return method; |
||||
} |
||||
set { |
||||
method = value; |
||||
} |
||||
} |
||||
|
||||
public uint Association { |
||||
get { |
||||
return association; |
||||
} |
||||
set { |
||||
association = value; |
||||
} |
||||
} |
||||
|
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
semantics = binaryReader.ReadUInt16(); |
||||
method = ReadSimpleIndex(ICSharpCode.SharpAssembly.Metadata.Rows.Method.TABLE_ID); |
||||
association = ReadCodedIndex(CodedIndex.HasSemantics); |
||||
} |
||||
} |
||||
} |
||||
@ -1,74 +0,0 @@
@@ -1,74 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class Module : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x00; |
||||
|
||||
ushort generation; |
||||
uint name; // index into String heap
|
||||
uint mvid; // index into Guid heap
|
||||
uint encid; // index into Guid heap, reserved, shall be zero
|
||||
uint encbaseid; // index into Guid heap, reserved, shall be zero
|
||||
|
||||
public ushort Generation { |
||||
get { |
||||
return generation; |
||||
} |
||||
set { |
||||
generation = value; |
||||
} |
||||
} |
||||
public uint Name { |
||||
get { |
||||
return name; |
||||
} |
||||
set { |
||||
name = value; |
||||
} |
||||
} |
||||
public uint Mvid { |
||||
get { |
||||
return mvid; |
||||
} |
||||
set { |
||||
mvid = value; |
||||
} |
||||
} |
||||
public uint Encid { |
||||
get { |
||||
return encid; |
||||
} |
||||
set { |
||||
encid = value; |
||||
} |
||||
} |
||||
public uint Encbaseid { |
||||
get { |
||||
return encbaseid; |
||||
} |
||||
set { |
||||
encbaseid = value; |
||||
} |
||||
} |
||||
|
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
generation = binaryReader.ReadUInt16(); |
||||
name = LoadStringIndex(); |
||||
mvid = LoadGUIDIndex(); |
||||
encid = LoadGUIDIndex(); |
||||
encbaseid = LoadGUIDIndex(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,33 +0,0 @@
@@ -1,33 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class ModuleRef : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x1A; |
||||
|
||||
uint name; // index into String heap
|
||||
|
||||
public uint Name { |
||||
get { |
||||
return name; |
||||
} |
||||
set { |
||||
name = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
name = LoadStringIndex(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,43 +0,0 @@
@@ -1,43 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class NestedClass : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x29; |
||||
|
||||
uint nestedClass; // index into the TypeDef table
|
||||
uint enclosingClass; // index into the TypeDef table
|
||||
|
||||
public uint NestedClassIndex { |
||||
get { |
||||
return nestedClass; |
||||
} |
||||
set { |
||||
nestedClass = value; |
||||
} |
||||
} |
||||
public uint EnclosingClass { |
||||
get { |
||||
return enclosingClass; |
||||
} |
||||
set { |
||||
enclosingClass = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
nestedClass = ReadSimpleIndex(TypeDef.TABLE_ID); |
||||
enclosingClass = ReadSimpleIndex(TypeDef.TABLE_ID); |
||||
} |
||||
} |
||||
} |
||||
@ -1,67 +0,0 @@
@@ -1,67 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class Param : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x08; |
||||
|
||||
public static readonly ushort FLAG_IN = 0x0001; |
||||
public static readonly ushort FLAG_OUT = 0x0002; |
||||
public static readonly ushort FLAG_OPTIONAL = 0x0004; |
||||
public static readonly ushort FLAG_HASDEFAULT = 0x1000; |
||||
public static readonly ushort FLAG_HASFIELDMARSHAL = 0x2000; |
||||
public static readonly ushort FLAG_UNUSED = 0xcfe0; |
||||
|
||||
ushort flags; |
||||
ushort sequence; |
||||
uint name; // index into String heap
|
||||
|
||||
public ushort Flags { |
||||
get { |
||||
return flags; |
||||
} |
||||
set { |
||||
flags = value; |
||||
} |
||||
} |
||||
|
||||
public ushort Sequence { |
||||
get { |
||||
return sequence; |
||||
} |
||||
set { |
||||
sequence = value; |
||||
} |
||||
} |
||||
|
||||
public uint Name { |
||||
get { |
||||
return name; |
||||
} |
||||
set { |
||||
name = value; |
||||
} |
||||
} |
||||
|
||||
public bool IsFlagSet(uint flag) |
||||
{ |
||||
return base.BaseIsFlagSet(this.flags, flag); |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
flags = binaryReader.ReadUInt16(); |
||||
sequence = binaryReader.ReadUInt16(); |
||||
name = LoadStringIndex(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,33 +0,0 @@
@@ -1,33 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class ParamPtr : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x07; |
||||
|
||||
uint param; |
||||
|
||||
public uint Param { |
||||
get { |
||||
return param; |
||||
} |
||||
set { |
||||
param = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
param = ReadSimpleIndex(ICSharpCode.SharpAssembly.Metadata.Rows.Param.TABLE_ID); |
||||
} |
||||
} |
||||
} |
||||
@ -1,65 +0,0 @@
@@ -1,65 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class Property : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x17; |
||||
|
||||
public static readonly ushort FLAG_SPECIALNAME = 0x0200; |
||||
public static readonly ushort FLAG_RTSPECIALNAME = 0x0400; |
||||
public static readonly ushort FLAG_HASDEFAULT = 0x1000; |
||||
public static readonly ushort FLAG_UNUSED = 0xe9ff; |
||||
|
||||
ushort flags; |
||||
uint name; // index into String heap
|
||||
uint type; // index into Blob heap
|
||||
|
||||
public ushort Flags { |
||||
get { |
||||
return flags; |
||||
} |
||||
set { |
||||
flags = value; |
||||
} |
||||
} |
||||
|
||||
public uint Name { |
||||
get { |
||||
return name; |
||||
} |
||||
set { |
||||
name = value; |
||||
} |
||||
} |
||||
|
||||
public uint Type { |
||||
get { |
||||
return type; |
||||
} |
||||
set { |
||||
type = value; |
||||
} |
||||
} |
||||
|
||||
public bool IsFlagSet(uint flag) |
||||
{ |
||||
return base.BaseIsFlagSet(this.flags, flag); |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
flags = binaryReader.ReadUInt16(); |
||||
name = LoadStringIndex(); |
||||
type = LoadBlobIndex(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,44 +0,0 @@
@@ -1,44 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class PropertyMap : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x15; |
||||
|
||||
uint parent; // index into the TypeDef table
|
||||
uint propertyList; // index into Property table
|
||||
|
||||
public uint Parent { |
||||
get { |
||||
return parent; |
||||
} |
||||
set { |
||||
parent = value; |
||||
} |
||||
} |
||||
public uint PropertyList { |
||||
get { |
||||
return propertyList; |
||||
} |
||||
set { |
||||
propertyList = value; |
||||
} |
||||
} |
||||
|
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
parent = ReadSimpleIndex(TypeDef.TABLE_ID); |
||||
propertyList = ReadSimpleIndex(Property.TABLE_ID); |
||||
} |
||||
} |
||||
} |
||||
@ -1,33 +0,0 @@
@@ -1,33 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class PropertyPtr : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 22; |
||||
|
||||
uint property; |
||||
|
||||
public uint Property { |
||||
get { |
||||
return property; |
||||
} |
||||
set { |
||||
property = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
property = ReadSimpleIndex(ICSharpCode.SharpAssembly.Metadata.Rows.Property.TABLE_ID); |
||||
} |
||||
} |
||||
} |
||||
@ -1,34 +0,0 @@
@@ -1,34 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class StandAloneSig : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x11; |
||||
|
||||
uint signature; // index into the Blob heap
|
||||
|
||||
public uint Signature { |
||||
get { |
||||
return signature; |
||||
} |
||||
set { |
||||
signature = value; |
||||
} |
||||
} |
||||
|
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
signature = LoadBlobIndex(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,137 +0,0 @@
@@ -1,137 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class TypeDef : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x02; |
||||
|
||||
// Visibility attributes
|
||||
public static readonly uint FLAG_VISIBILITYMASK = 0x00000007; |
||||
public static readonly uint FLAG_NOTPUBLIC = 0x00000000; |
||||
public static readonly uint FLAG_PUBLIC = 0x00000001; |
||||
public static readonly uint FLAG_NESTEDPUBLIC = 0x00000002; |
||||
public static readonly uint FLAG_NESTEDPRIVATE = 0x00000003; |
||||
public static readonly uint FLAG_NESTEDFAMILY = 0x00000004; |
||||
public static readonly uint FLAG_NESTEDASSEMBLY = 0x00000005; |
||||
public static readonly uint FLAG_NESTEDFAMANDASSEM = 0x00000006; |
||||
public static readonly uint FLAG_NESTEDFAMORASSEM = 0x00000007; |
||||
|
||||
//Class layout attributes
|
||||
public static readonly uint FLAG_LAYOUTMASK = 0x00000018; |
||||
public static readonly uint FLAG_AUTOLAYOUT = 0x00000000; |
||||
public static readonly uint FLAG_SEQUENTIALLAYOUT = 0x00000008; |
||||
public static readonly uint FLAG_EXPLICITLAYOUT = 0x00000010; |
||||
|
||||
//Class semantics attributes
|
||||
public static readonly uint FLAG_CLASSSEMANTICSMASK = 0x00000020; |
||||
public static readonly uint FLAG_CLASS = 0x00000000; |
||||
public static readonly uint FLAG_INTERFACE = 0x00000020; |
||||
|
||||
// Special semantics in addition to class semantics
|
||||
public static readonly uint FLAG_ABSTRACT = 0x00000080; |
||||
public static readonly uint FLAG_SEALED = 0x00000100; |
||||
public static readonly uint FLAG_SPECIALNAME = 0x00000400; |
||||
|
||||
// Implementation Attributes
|
||||
public static readonly uint FLAG_IMPORT = 0x00001000; |
||||
public static readonly uint FLAG_SERIALIZABLE = 0x00002000; |
||||
|
||||
//String formatting Attributes
|
||||
public static readonly uint FLAG_STRINGFORMATMASK = 0x00030000; |
||||
public static readonly uint FLAG_ANSICLASS = 0x00000000; |
||||
public static readonly uint FLAG_UNICODECLASS = 0x00010000; |
||||
public static readonly uint FLAG_AUTOCLASS = 0x00020000; |
||||
|
||||
//Class Initialization Attributes
|
||||
public static readonly uint FLAG_BEFOREFIELDINIT = 0x00100000; |
||||
|
||||
//Additional Flags
|
||||
public static readonly uint FLAG_RTSPECIALNAME = 0x00000800; |
||||
public static readonly uint FLAG_HASSECURITY = 0x00040000; |
||||
|
||||
uint flags; |
||||
uint name; |
||||
uint nSpace; |
||||
uint extends; // index into TypeDef, TypeRef or TypeSpec table; more precisely, a TypeDefOrRef coded index
|
||||
uint fieldList; // index into Field table; it marks the first of a continguous run of Fields owned by this Type
|
||||
uint methodList; // index into Method table; it marks the first of a continguous run of Methods owned by this Type
|
||||
|
||||
public uint Flags { |
||||
get { |
||||
return flags; |
||||
} |
||||
set { |
||||
flags = value; |
||||
} |
||||
} |
||||
public uint Name { |
||||
get { |
||||
return name; |
||||
} |
||||
set { |
||||
name = value; |
||||
} |
||||
} |
||||
public uint NSpace { |
||||
get { |
||||
return nSpace; |
||||
} |
||||
set { |
||||
nSpace = value; |
||||
} |
||||
} |
||||
public uint Extends { |
||||
get { |
||||
return extends; |
||||
} |
||||
set { |
||||
extends = value; |
||||
} |
||||
} |
||||
public uint FieldList { |
||||
get { |
||||
return fieldList; |
||||
} |
||||
set { |
||||
fieldList = value; |
||||
} |
||||
} |
||||
public uint MethodList { |
||||
get { |
||||
return methodList; |
||||
} |
||||
set { |
||||
methodList = value; |
||||
} |
||||
} |
||||
|
||||
public bool IsFlagSet(uint flag) |
||||
{ |
||||
return base.BaseIsFlagSet(this.flags, flag); |
||||
} |
||||
|
||||
public bool IsMaskedFlagSet(uint flag, uint flag_mask) |
||||
{ |
||||
return base.BaseIsFlagSet(this.flags, flag, flag_mask); |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
flags = binaryReader.ReadUInt32(); |
||||
name = LoadStringIndex(); |
||||
nSpace = LoadStringIndex(); |
||||
extends = ReadCodedIndex(CodedIndex.TypeDefOrRef); |
||||
fieldList = ReadSimpleIndex(Field.TABLE_ID); |
||||
methodList = ReadSimpleIndex(Method.TABLE_ID); |
||||
} |
||||
} |
||||
} |
||||
@ -1,55 +0,0 @@
@@ -1,55 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class TypeRef : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x01; |
||||
|
||||
uint resolutionScope; // index into Module, ModuleRef, AssemblyRef or TypeRef tables, or null; more precisely, a ResolutionScope coded index
|
||||
uint name; |
||||
uint nspace; |
||||
|
||||
public uint ResolutionScope { |
||||
get { |
||||
return resolutionScope; |
||||
} |
||||
set { |
||||
resolutionScope = value; |
||||
} |
||||
} |
||||
|
||||
public uint Name { |
||||
get { |
||||
return name; |
||||
} |
||||
set { |
||||
name = value; |
||||
} |
||||
} |
||||
|
||||
public uint Nspace { |
||||
get { |
||||
return nspace; |
||||
} |
||||
set { |
||||
nspace = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
resolutionScope = ReadCodedIndex(CodedIndex.ResolutionScope); |
||||
name = LoadStringIndex(); |
||||
nspace = LoadStringIndex(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,33 +0,0 @@
@@ -1,33 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata.Rows { |
||||
|
||||
public class TypeSpec : AbstractRow |
||||
{ |
||||
public static readonly int TABLE_ID = 0x1B; |
||||
|
||||
uint signature; // index into the Blob heap
|
||||
|
||||
public uint Signature { |
||||
get { |
||||
return signature; |
||||
} |
||||
set { |
||||
signature = value; |
||||
} |
||||
} |
||||
|
||||
public override void LoadRow() |
||||
{ |
||||
signature = LoadBlobIndex(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,31 +0,0 @@
@@ -1,31 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata |
||||
{ |
||||
public enum CallingConvention : uint |
||||
{ |
||||
Default = 0x00, |
||||
|
||||
Cdecl = 0x01, |
||||
Stdcall = 0x02, |
||||
Thiscall = 0x03, |
||||
Fastcall = 0x04, |
||||
|
||||
VarArg = 0x05, |
||||
Field = 0x06, |
||||
LocalSig = 0x07, |
||||
Property = 0x08, |
||||
UnMngd = 0x09, |
||||
|
||||
HasThis = 0x20, |
||||
ExplicitThis = 0x40 |
||||
} |
||||
} |
||||
@ -1,53 +0,0 @@
@@ -1,53 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Metadata |
||||
{ |
||||
public enum DataType |
||||
{ |
||||
End = 0x00, |
||||
Void = 0x01, |
||||
Boolean = 0x02, |
||||
Char = 0x03, |
||||
SByte = 0x04, |
||||
Byte = 0x05, |
||||
Int16 = 0x06, |
||||
UInt16 = 0x07, |
||||
Int32 = 0x08, |
||||
UInt32 = 0x09, |
||||
Int64 = 0x0A, |
||||
UInt64 = 0x0B, |
||||
Single = 0x0C, |
||||
Double = 0x0D, |
||||
|
||||
String = 0x0E, |
||||
Ptr = 0x0F, |
||||
ByRef = 0x10, |
||||
ValueType = 0x11, |
||||
Class = 0x12, |
||||
Array = 0x14, |
||||
|
||||
TypeReference = 0x16, |
||||
IntPtr = 0x18, |
||||
UIntPtr = 0x19, |
||||
FnPtr = 0x1B, |
||||
Object = 0x1C, |
||||
SZArray = 0x1D, |
||||
|
||||
CModReq = 0x1F, |
||||
CModOpt = 0x20, |
||||
Internal = 0x21, |
||||
|
||||
Modifier = 0x40, |
||||
Sentinel = 0x41, |
||||
Pinned = 0x45 |
||||
|
||||
} |
||||
} |
||||
@ -1,167 +0,0 @@
@@ -1,167 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.PE { |
||||
|
||||
public class CLIHeader |
||||
{ |
||||
uint cb; |
||||
ushort majorRuntimeVersion; |
||||
ushort minorRuntimeVersion; |
||||
uint metaData; |
||||
uint metaDataSize; |
||||
uint flags; |
||||
uint entryPointToken; |
||||
uint resources; |
||||
uint resourcesSize; |
||||
ulong strongNameSignature; |
||||
ulong codeManagerTable; |
||||
ulong vTableFixups; |
||||
ulong exportAddressTableJumps; |
||||
ulong managedNativeHeader; |
||||
|
||||
const uint COMIMAGE_FLAGS_ILONLY = 0x01; |
||||
const uint COMIMAGE_FLAGS_32BITREQUIRED = 0x02; |
||||
const uint COMIMAGE_FLAGS_STRONGNAMESIGNED = 0x08; |
||||
const uint COMIMAGE_FLAGS_TRACKDEBUGDATA = 0x010000; |
||||
|
||||
public uint Cb { |
||||
get { |
||||
return cb; |
||||
} |
||||
set { |
||||
cb = value; |
||||
} |
||||
} |
||||
public ushort MajorRuntimeVersion { |
||||
get { |
||||
return majorRuntimeVersion; |
||||
} |
||||
set { |
||||
majorRuntimeVersion = value; |
||||
} |
||||
} |
||||
public ushort MinorRuntimeVersion { |
||||
get { |
||||
return minorRuntimeVersion; |
||||
} |
||||
set { |
||||
minorRuntimeVersion = value; |
||||
} |
||||
} |
||||
public uint MetaData { |
||||
get { |
||||
return metaData; |
||||
} |
||||
set { |
||||
metaData = value; |
||||
} |
||||
} |
||||
public uint MetaDataSize { |
||||
get { |
||||
return metaDataSize; |
||||
} |
||||
set { |
||||
metaDataSize = value; |
||||
} |
||||
} |
||||
public uint Flags { |
||||
get { |
||||
return flags; |
||||
} |
||||
set { |
||||
flags = value; |
||||
} |
||||
} |
||||
public uint EntryPointToken { |
||||
get { |
||||
return entryPointToken; |
||||
} |
||||
set { |
||||
entryPointToken = value; |
||||
} |
||||
} |
||||
public uint Resources { |
||||
get { |
||||
return resources; |
||||
} |
||||
set { |
||||
resources = value; |
||||
} |
||||
} |
||||
public uint ResourcesSize { |
||||
get { |
||||
return resourcesSize; |
||||
} |
||||
set { |
||||
resourcesSize = value; |
||||
} |
||||
} |
||||
public ulong StrongNameSignature { |
||||
get { |
||||
return strongNameSignature; |
||||
} |
||||
set { |
||||
strongNameSignature = value; |
||||
} |
||||
} |
||||
public ulong CodeManagerTable { |
||||
get { |
||||
return codeManagerTable; |
||||
} |
||||
set { |
||||
codeManagerTable = value; |
||||
} |
||||
} |
||||
public ulong VTableFixups { |
||||
get { |
||||
return vTableFixups; |
||||
} |
||||
set { |
||||
vTableFixups = value; |
||||
} |
||||
} |
||||
public ulong ExportAddressTableJumps { |
||||
get { |
||||
return exportAddressTableJumps; |
||||
} |
||||
set { |
||||
exportAddressTableJumps = value; |
||||
} |
||||
} |
||||
public ulong ManagedNativeHeader { |
||||
get { |
||||
return managedNativeHeader; |
||||
} |
||||
set { |
||||
managedNativeHeader = value; |
||||
} |
||||
} |
||||
|
||||
|
||||
public void LoadFrom(BinaryReader binaryReader) |
||||
{ |
||||
cb = binaryReader.ReadUInt32(); |
||||
majorRuntimeVersion = binaryReader.ReadUInt16(); |
||||
minorRuntimeVersion = binaryReader.ReadUInt16(); |
||||
metaData = binaryReader.ReadUInt32(); |
||||
metaDataSize = binaryReader.ReadUInt32(); |
||||
flags = binaryReader.ReadUInt32(); |
||||
entryPointToken = binaryReader.ReadUInt32(); |
||||
resources = binaryReader.ReadUInt32(); |
||||
resourcesSize = binaryReader.ReadUInt32(); |
||||
strongNameSignature = binaryReader.ReadUInt64(); |
||||
codeManagerTable = binaryReader.ReadUInt64(); |
||||
vTableFixups = binaryReader.ReadUInt64(); |
||||
exportAddressTableJumps = binaryReader.ReadUInt64(); |
||||
managedNativeHeader = binaryReader.ReadUInt64(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,356 +0,0 @@
@@ -1,356 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.PE { |
||||
|
||||
public class DataDirectories |
||||
{ |
||||
uint exportTable; |
||||
uint exportTableSize; |
||||
uint importTable; |
||||
uint importTableSize; |
||||
uint resourceTable; |
||||
uint resourceTableSize; |
||||
uint exceptionTable; |
||||
uint exceptionTableSize; |
||||
uint certificateTable; |
||||
uint certificateTableSize; |
||||
uint baseRelocationTable; |
||||
uint baseRelocationTableSize; |
||||
uint debugTable; |
||||
uint debugTableSize; |
||||
uint copyrightTable; |
||||
uint copyrightTableSize; |
||||
uint globalPtr; |
||||
uint globalPtrSize; |
||||
uint tlsTable; |
||||
uint tlsTableSize; |
||||
uint loadConfigTable; |
||||
uint loadConfigTableSize; |
||||
uint boundImport; |
||||
uint boundImportSize; |
||||
uint iAT; |
||||
uint iATSize; |
||||
uint delayImportDescriptor; |
||||
uint delayImportDescriptorSize; |
||||
uint cliHeader; |
||||
uint cliHeaderSize; |
||||
uint reserved; |
||||
uint reservedSize; |
||||
|
||||
public uint ExportTable { |
||||
get { |
||||
return exportTable; |
||||
} |
||||
set { |
||||
exportTable = value; |
||||
} |
||||
} |
||||
public uint ExportTableSize { |
||||
get { |
||||
return exportTableSize; |
||||
} |
||||
set { |
||||
exportTableSize = value; |
||||
} |
||||
} |
||||
public uint ImportTable { |
||||
get { |
||||
return importTable; |
||||
} |
||||
set { |
||||
importTable = value; |
||||
} |
||||
} |
||||
public uint ImportTableSize { |
||||
get { |
||||
return importTableSize; |
||||
} |
||||
set { |
||||
importTableSize = value; |
||||
} |
||||
} |
||||
public uint ResourceTable { |
||||
get { |
||||
return resourceTable; |
||||
} |
||||
set { |
||||
resourceTable = value; |
||||
} |
||||
} |
||||
public uint ResourceTableSize { |
||||
get { |
||||
return resourceTableSize; |
||||
} |
||||
set { |
||||
resourceTableSize = value; |
||||
} |
||||
} |
||||
public uint ExceptionTable { |
||||
get { |
||||
return exceptionTable; |
||||
} |
||||
set { |
||||
exceptionTable = value; |
||||
} |
||||
} |
||||
public uint ExceptionTableSize { |
||||
get { |
||||
return exceptionTableSize; |
||||
} |
||||
set { |
||||
exceptionTableSize = value; |
||||
} |
||||
} |
||||
public uint CertificateTable { |
||||
get { |
||||
return certificateTable; |
||||
} |
||||
set { |
||||
certificateTable = value; |
||||
} |
||||
} |
||||
public uint CertificateTableSize { |
||||
get { |
||||
return certificateTableSize; |
||||
} |
||||
set { |
||||
certificateTableSize = value; |
||||
} |
||||
} |
||||
public uint BaseRelocationTable { |
||||
get { |
||||
return baseRelocationTable; |
||||
} |
||||
set { |
||||
baseRelocationTable = value; |
||||
} |
||||
} |
||||
public uint BaseRelocationTableSize { |
||||
get { |
||||
return baseRelocationTableSize; |
||||
} |
||||
set { |
||||
baseRelocationTableSize = value; |
||||
} |
||||
} |
||||
public uint DebugTable { |
||||
get { |
||||
return debugTable; |
||||
} |
||||
set { |
||||
debugTable = value; |
||||
} |
||||
} |
||||
public uint DebugTableSize { |
||||
get { |
||||
return debugTableSize; |
||||
} |
||||
set { |
||||
debugTableSize = value; |
||||
} |
||||
} |
||||
public uint CopyrightTable { |
||||
get { |
||||
return copyrightTable; |
||||
} |
||||
set { |
||||
copyrightTable = value; |
||||
} |
||||
} |
||||
public uint CopyrightTableSize { |
||||
get { |
||||
return copyrightTableSize; |
||||
} |
||||
set { |
||||
copyrightTableSize = value; |
||||
} |
||||
} |
||||
public uint GlobalPtr { |
||||
get { |
||||
return globalPtr; |
||||
} |
||||
set { |
||||
globalPtr = value; |
||||
} |
||||
} |
||||
public uint GlobalPtrSize { |
||||
get { |
||||
return globalPtrSize; |
||||
} |
||||
set { |
||||
globalPtrSize = value; |
||||
} |
||||
} |
||||
public uint TlsTable { |
||||
get { |
||||
return tlsTable; |
||||
} |
||||
set { |
||||
tlsTable = value; |
||||
} |
||||
} |
||||
public uint TlsTableSize { |
||||
get { |
||||
return tlsTableSize; |
||||
} |
||||
set { |
||||
tlsTableSize = value; |
||||
} |
||||
} |
||||
public uint LoadConfigTable { |
||||
get { |
||||
return loadConfigTable; |
||||
} |
||||
set { |
||||
loadConfigTable = value; |
||||
} |
||||
} |
||||
public uint LoadConfigTableSize { |
||||
get { |
||||
return loadConfigTableSize; |
||||
} |
||||
set { |
||||
loadConfigTableSize = value; |
||||
} |
||||
} |
||||
public uint BoundImport { |
||||
get { |
||||
return boundImport; |
||||
} |
||||
set { |
||||
boundImport = value; |
||||
} |
||||
} |
||||
public uint BoundImportSize { |
||||
get { |
||||
return boundImportSize; |
||||
} |
||||
set { |
||||
boundImportSize = value; |
||||
} |
||||
} |
||||
public uint IAT { |
||||
get { |
||||
return iAT; |
||||
} |
||||
set { |
||||
iAT = value; |
||||
} |
||||
} |
||||
public uint IATSize { |
||||
get { |
||||
return iATSize; |
||||
} |
||||
set { |
||||
iATSize = value; |
||||
} |
||||
} |
||||
public uint DelayImportDescriptor { |
||||
get { |
||||
return delayImportDescriptor; |
||||
} |
||||
set { |
||||
delayImportDescriptor = value; |
||||
} |
||||
} |
||||
public uint DelayImportDescriptorSize { |
||||
get { |
||||
return delayImportDescriptorSize; |
||||
} |
||||
set { |
||||
delayImportDescriptorSize = value; |
||||
} |
||||
} |
||||
public uint CliHeader { |
||||
get { |
||||
return cliHeader; |
||||
} |
||||
set { |
||||
cliHeader = value; |
||||
} |
||||
} |
||||
public uint CliHeaderSize { |
||||
get { |
||||
return cliHeaderSize; |
||||
} |
||||
set { |
||||
cliHeaderSize = value; |
||||
} |
||||
} |
||||
public uint Reserved { |
||||
get { |
||||
return reserved; |
||||
} |
||||
set { |
||||
reserved = value; |
||||
} |
||||
} |
||||
public uint ReservedSize { |
||||
get { |
||||
return reservedSize; |
||||
} |
||||
set { |
||||
reservedSize = value; |
||||
} |
||||
} |
||||
|
||||
public void LoadFrom(BinaryReader binaryReader) |
||||
{ |
||||
exportTable = binaryReader.ReadUInt32(); |
||||
exportTableSize = binaryReader.ReadUInt32(); |
||||
|
||||
importTable = binaryReader.ReadUInt32(); |
||||
importTableSize = binaryReader.ReadUInt32(); |
||||
|
||||
resourceTable = binaryReader.ReadUInt32(); |
||||
resourceTableSize = binaryReader.ReadUInt32(); |
||||
|
||||
exceptionTable = binaryReader.ReadUInt32(); |
||||
exceptionTableSize = binaryReader.ReadUInt32(); |
||||
|
||||
certificateTable = binaryReader.ReadUInt32(); |
||||
certificateTableSize = binaryReader.ReadUInt32(); |
||||
|
||||
baseRelocationTable = binaryReader.ReadUInt32(); |
||||
baseRelocationTableSize = binaryReader.ReadUInt32(); |
||||
|
||||
debugTable = binaryReader.ReadUInt32(); |
||||
debugTableSize = binaryReader.ReadUInt32(); |
||||
|
||||
copyrightTable = binaryReader.ReadUInt32(); |
||||
copyrightTableSize = binaryReader.ReadUInt32(); |
||||
|
||||
globalPtr = binaryReader.ReadUInt32(); |
||||
globalPtrSize = binaryReader.ReadUInt32(); |
||||
|
||||
tlsTable = binaryReader.ReadUInt32(); |
||||
tlsTableSize = binaryReader.ReadUInt32(); |
||||
|
||||
loadConfigTable = binaryReader.ReadUInt32(); |
||||
loadConfigTableSize = binaryReader.ReadUInt32(); |
||||
|
||||
boundImport = binaryReader.ReadUInt32(); |
||||
boundImportSize = binaryReader.ReadUInt32(); |
||||
|
||||
iAT = binaryReader.ReadUInt32(); |
||||
iATSize = binaryReader.ReadUInt32(); |
||||
|
||||
delayImportDescriptor = binaryReader.ReadUInt32(); |
||||
delayImportDescriptorSize = binaryReader.ReadUInt32(); |
||||
|
||||
cliHeader = binaryReader.ReadUInt32(); |
||||
cliHeaderSize = binaryReader.ReadUInt32(); |
||||
|
||||
reserved = binaryReader.ReadUInt32(); |
||||
reservedSize = binaryReader.ReadUInt32(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,42 +0,0 @@
@@ -1,42 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.PE { |
||||
|
||||
public class IAT |
||||
{ |
||||
uint nameTableRVA; |
||||
uint empty; |
||||
|
||||
public uint NameTableRVA { |
||||
get { |
||||
return nameTableRVA; |
||||
} |
||||
set { |
||||
nameTableRVA = value; |
||||
} |
||||
} |
||||
public uint Empty { |
||||
get { |
||||
return empty; |
||||
} |
||||
set { |
||||
empty = value; |
||||
} |
||||
} |
||||
|
||||
|
||||
public void LoadFrom(BinaryReader binaryReader) |
||||
{ |
||||
nameTableRVA = binaryReader.ReadUInt32(); |
||||
empty = binaryReader.ReadUInt32(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,34 +0,0 @@
@@ -1,34 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.PE { |
||||
|
||||
public class ImportTable |
||||
{ |
||||
const int UNUSED_SIZE = 20; |
||||
|
||||
uint importLookupTable = 0; |
||||
uint dateTimeStamp = 0; |
||||
uint forwarderChain = 0; |
||||
uint importTableName = 0; |
||||
uint importAddressTable = 0; |
||||
byte[] unused = new byte[UNUSED_SIZE]; |
||||
|
||||
public void LoadFrom(BinaryReader binaryReader) |
||||
{ |
||||
importLookupTable = binaryReader.ReadUInt32(); |
||||
dateTimeStamp = binaryReader.ReadUInt32(); |
||||
forwarderChain = binaryReader.ReadUInt32(); |
||||
importTableName = binaryReader.ReadUInt32(); |
||||
importAddressTable = binaryReader.ReadUInt32(); |
||||
binaryReader.Read(unused, 0, UNUSED_SIZE); |
||||
} |
||||
} |
||||
} |
||||
@ -1,45 +0,0 @@
@@ -1,45 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.PE { |
||||
|
||||
public class NTSpecificFields |
||||
{ |
||||
const uint IMAGE_BASE = 0x400000; |
||||
const uint SECTION_ALIGNMENT = 0x2000; |
||||
|
||||
// uint fileAlignment; // either 0x200 or 0x1000
|
||||
// ushort osMajor;
|
||||
// ushort osMinor;
|
||||
// ushort userMajor;
|
||||
// ushort userMinor;
|
||||
// ushort subSysMajor;
|
||||
// ushort subSysMinor;
|
||||
// uint reserved;
|
||||
// uint imageSize;
|
||||
// uint headerSize;
|
||||
// uint fileChecksum;
|
||||
// ushort subSystem;
|
||||
// ushort dllFlags;
|
||||
// uint stackReserveSize;
|
||||
// uint stackCommitSize;
|
||||
// uint heapReserveSize;
|
||||
// uint heapCommitSize;
|
||||
// uint loaderFlags;
|
||||
// uint numberOfDataDirectories;
|
||||
|
||||
public void LoadFrom(BinaryReader binaryReader) |
||||
{ |
||||
// TODO
|
||||
byte[] buffer = new byte[68]; |
||||
binaryReader.Read(buffer, 0, 68); |
||||
} |
||||
} |
||||
} |
||||
@ -1,50 +0,0 @@
@@ -1,50 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.PE { |
||||
|
||||
public class NameTable |
||||
{ |
||||
ushort hint; |
||||
string name; |
||||
|
||||
public ushort Hint { |
||||
get { |
||||
return hint; |
||||
} |
||||
set { |
||||
hint = value; |
||||
} |
||||
} |
||||
|
||||
public string Name { |
||||
get { |
||||
return name; |
||||
} |
||||
set { |
||||
name = value; |
||||
} |
||||
} |
||||
|
||||
|
||||
|
||||
public void LoadFrom(BinaryReader binaryReader) |
||||
{ |
||||
hint = binaryReader.ReadUInt16(); |
||||
|
||||
name = String.Empty; |
||||
byte b = binaryReader.ReadByte(); |
||||
while (b != 0) { |
||||
name += (char)b; |
||||
b = binaryReader.ReadByte(); |
||||
} |
||||
} |
||||
} |
||||
} |
||||
@ -1,145 +0,0 @@
@@ -1,145 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.Diagnostics; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.PE { |
||||
|
||||
public class PEFileHeader |
||||
{ |
||||
const ushort machineSign = 0x14C; |
||||
const ushort IMAGE_FILE_DLL = 0x2000; |
||||
|
||||
ushort numberOfSections; |
||||
uint time; |
||||
uint ptrToSymbolTable; |
||||
uint numerOfSymbols; |
||||
ushort optionalHeaderSize; |
||||
ushort characteristics; |
||||
|
||||
// optional header:
|
||||
StandardFields standardFields = new StandardFields(); |
||||
NTSpecificFields ntSpecificFields = new NTSpecificFields(); |
||||
DataDirectories dataDirectories = new DataDirectories(); |
||||
|
||||
public ushort NumberOfSections { |
||||
get { |
||||
return numberOfSections; |
||||
} |
||||
set { |
||||
numberOfSections = value; |
||||
} |
||||
} |
||||
|
||||
public uint Time { |
||||
get { |
||||
return time; |
||||
} |
||||
set { |
||||
time = value; |
||||
} |
||||
} |
||||
|
||||
public uint PtrToSymbolTable { |
||||
get { |
||||
return ptrToSymbolTable; |
||||
} |
||||
set { |
||||
ptrToSymbolTable = value; |
||||
} |
||||
} |
||||
|
||||
public uint NumerOfSymbols { |
||||
get { |
||||
return numerOfSymbols; |
||||
} |
||||
set { |
||||
numerOfSymbols = value; |
||||
} |
||||
} |
||||
|
||||
public ushort OptionalHeaderSize { |
||||
get { |
||||
return optionalHeaderSize; |
||||
} |
||||
set { |
||||
optionalHeaderSize = value; |
||||
} |
||||
} |
||||
|
||||
public bool IsDLL { |
||||
get { |
||||
return (characteristics & IMAGE_FILE_DLL) == IMAGE_FILE_DLL; |
||||
} |
||||
set { |
||||
if (value) { |
||||
characteristics |= IMAGE_FILE_DLL; |
||||
} else { |
||||
characteristics = (ushort)(characteristics & ~IMAGE_FILE_DLL); |
||||
} |
||||
} |
||||
} |
||||
|
||||
public StandardFields StandardFields { |
||||
get { |
||||
return standardFields; |
||||
} |
||||
} |
||||
|
||||
public NTSpecificFields NtSpecificFields { |
||||
get { |
||||
return ntSpecificFields; |
||||
} |
||||
} |
||||
|
||||
public DataDirectories DataDirectories { |
||||
get { |
||||
return dataDirectories; |
||||
} |
||||
} |
||||
|
||||
|
||||
public void LoadFrom(BinaryReader binaryReader) |
||||
{ |
||||
// pe signature (always PE\0\0)
|
||||
byte[] signature = new byte[4]; |
||||
binaryReader.Read(signature, 0, 4); |
||||
if (signature[0] != (byte)'P' && signature[1] != (byte)'E' && signature[2] != 0 && signature[3] != 0) { |
||||
Console.WriteLine("NO PE FILE"); |
||||
return; |
||||
} |
||||
ushort machine = binaryReader.ReadUInt16(); |
||||
|
||||
if (machine != machineSign) { |
||||
Console.WriteLine("Wrong machine : " + machineSign); |
||||
return; |
||||
} |
||||
|
||||
numberOfSections = binaryReader.ReadUInt16(); |
||||
time = binaryReader.ReadUInt32(); |
||||
|
||||
ptrToSymbolTable = binaryReader.ReadUInt32(); |
||||
if (ptrToSymbolTable != 0) { |
||||
Console.WriteLine("warning: ptrToSymbolTable != 0"); |
||||
} |
||||
|
||||
numerOfSymbols = binaryReader.ReadUInt32(); |
||||
if (numerOfSymbols != 0) { |
||||
Console.WriteLine("warning: numerOfSymbols != 0"); |
||||
} |
||||
|
||||
optionalHeaderSize = binaryReader.ReadUInt16(); |
||||
characteristics = binaryReader.ReadUInt16(); |
||||
|
||||
standardFields.LoadFrom(binaryReader); |
||||
ntSpecificFields.LoadFrom(binaryReader); |
||||
dataDirectories.LoadFrom(binaryReader); |
||||
} |
||||
} |
||||
} |
||||
@ -1,215 +0,0 @@
@@ -1,215 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.PE { |
||||
|
||||
public class SectionTable |
||||
{ |
||||
const int NAME_LEN = 8; |
||||
|
||||
const uint IMAGE_SCN_CNT_CODE = 0x20; |
||||
const uint IMAGE_SCN_CNT_INITIALIZED_DATA = 0x40; |
||||
const uint IMAGE_SCN_CNT_UNINITIALIZED_DATA = 0x80; |
||||
const uint IMAGE_SCN_MEM_EXECUTE = 0x20000000; |
||||
const uint IMAGE_SCN_MEM_READ = 0x40000000; |
||||
const uint IMAGE_SCN_MEM_WRITE = 0x80000000; |
||||
|
||||
byte[] name = new byte[NAME_LEN]; |
||||
uint virtualSize = 0; |
||||
uint virtualAddress = 0; |
||||
uint sizeOfRawData = 0; |
||||
uint pointerToRawData = 0; |
||||
uint pointerToRelocations = 0; |
||||
uint pointerToLinenumbers = 0; |
||||
uint numberOfRelocations = 0; |
||||
uint numberOfLinenumbers = 0; |
||||
uint characteristics = 0; |
||||
|
||||
public string Name { |
||||
get { |
||||
return System.Text.Encoding.ASCII.GetString(name); |
||||
} |
||||
set { |
||||
byte[] nameBytes = System.Text.Encoding.ASCII.GetBytes(value); |
||||
name = new byte[NAME_LEN]; |
||||
for (int i = 0; i < NAME_LEN; ++i) { |
||||
name[i] = 0; |
||||
} |
||||
Array.Copy(nameBytes, 0, name, 0, Math.Min(NAME_LEN, nameBytes.Length)); |
||||
} |
||||
} |
||||
|
||||
|
||||
public uint VirtualSize { |
||||
get { |
||||
return virtualSize; |
||||
} |
||||
set { |
||||
virtualSize = value; |
||||
} |
||||
} |
||||
|
||||
public uint VirtualAddress { |
||||
get { |
||||
return virtualAddress; |
||||
} |
||||
set { |
||||
virtualAddress = value; |
||||
} |
||||
} |
||||
|
||||
public uint SizeOfRawData { |
||||
get { |
||||
return sizeOfRawData; |
||||
} |
||||
set { |
||||
sizeOfRawData = value; |
||||
} |
||||
} |
||||
|
||||
public uint PointerToRawData { |
||||
get { |
||||
return pointerToRawData; |
||||
} |
||||
set { |
||||
pointerToRawData = value; |
||||
} |
||||
} |
||||
|
||||
public uint PointerToRelocations { |
||||
get { |
||||
return pointerToRelocations; |
||||
} |
||||
set { |
||||
pointerToRelocations = value; |
||||
} |
||||
} |
||||
|
||||
public uint PointerToLinenumbers { |
||||
get { |
||||
return pointerToLinenumbers; |
||||
} |
||||
set { |
||||
pointerToLinenumbers = value; |
||||
} |
||||
} |
||||
|
||||
public uint NumberOfRelocations { |
||||
get { |
||||
return numberOfRelocations; |
||||
} |
||||
set { |
||||
numberOfRelocations = value; |
||||
} |
||||
} |
||||
|
||||
public uint NumberOfLinenumbers { |
||||
get { |
||||
return numberOfLinenumbers; |
||||
} |
||||
set { |
||||
numberOfLinenumbers = value; |
||||
} |
||||
} |
||||
|
||||
// characteristics
|
||||
public bool ContainsExecutableCode { |
||||
get { |
||||
return (characteristics & IMAGE_SCN_CNT_CODE) == IMAGE_SCN_CNT_CODE; |
||||
} |
||||
set { |
||||
if (value) { |
||||
characteristics |= IMAGE_SCN_CNT_CODE; |
||||
} else { |
||||
characteristics &= ~IMAGE_SCN_CNT_CODE; |
||||
} |
||||
} |
||||
} |
||||
|
||||
public bool ContainsInitializedData { |
||||
get { |
||||
return (characteristics & IMAGE_SCN_CNT_INITIALIZED_DATA) == IMAGE_SCN_CNT_INITIALIZED_DATA; |
||||
} |
||||
set { |
||||
if (value) { |
||||
characteristics |= IMAGE_SCN_CNT_INITIALIZED_DATA; |
||||
} else { |
||||
characteristics &= ~IMAGE_SCN_CNT_INITIALIZED_DATA; |
||||
} |
||||
} |
||||
} |
||||
|
||||
public bool ContainsUninitializedData { |
||||
get { |
||||
return (characteristics & IMAGE_SCN_CNT_UNINITIALIZED_DATA) == IMAGE_SCN_CNT_UNINITIALIZED_DATA; |
||||
} |
||||
set { |
||||
if (value) { |
||||
characteristics |= IMAGE_SCN_CNT_UNINITIALIZED_DATA; |
||||
} else { |
||||
characteristics &= ~IMAGE_SCN_CNT_UNINITIALIZED_DATA; |
||||
} |
||||
} |
||||
} |
||||
|
||||
public bool SectionCanBeExecutedAsCode { |
||||
get { |
||||
return (characteristics & IMAGE_SCN_MEM_EXECUTE) == IMAGE_SCN_MEM_EXECUTE; |
||||
} |
||||
set { |
||||
if (value) { |
||||
characteristics |= IMAGE_SCN_MEM_EXECUTE; |
||||
} else { |
||||
characteristics &= ~IMAGE_SCN_MEM_EXECUTE; |
||||
} |
||||
} |
||||
} |
||||
|
||||
public bool SectionCanBeRead { |
||||
get { |
||||
return (characteristics & IMAGE_SCN_MEM_READ) == IMAGE_SCN_MEM_READ; |
||||
} |
||||
set { |
||||
if (value) { |
||||
characteristics |= IMAGE_SCN_MEM_READ; |
||||
} else { |
||||
characteristics &= ~IMAGE_SCN_MEM_READ; |
||||
} |
||||
} |
||||
} |
||||
|
||||
public bool SectionCanWrittenTo { |
||||
get { |
||||
return (characteristics & IMAGE_SCN_MEM_WRITE) == IMAGE_SCN_MEM_WRITE; |
||||
} |
||||
set { |
||||
if (value) { |
||||
characteristics |= IMAGE_SCN_MEM_WRITE; |
||||
} else { |
||||
characteristics &= ~IMAGE_SCN_MEM_WRITE; |
||||
} |
||||
} |
||||
} |
||||
|
||||
public void LoadFrom(BinaryReader binaryReader) |
||||
{ |
||||
binaryReader.Read(name, 0, NAME_LEN); |
||||
virtualSize = binaryReader.ReadUInt32(); |
||||
virtualAddress = binaryReader.ReadUInt32(); |
||||
sizeOfRawData = binaryReader.ReadUInt32(); |
||||
pointerToRawData = binaryReader.ReadUInt32(); |
||||
pointerToRelocations = binaryReader.ReadUInt32(); |
||||
pointerToLinenumbers = binaryReader.ReadUInt32(); |
||||
numberOfRelocations = binaryReader.ReadUInt16(); |
||||
numberOfLinenumbers = binaryReader.ReadUInt16(); |
||||
characteristics = binaryReader.ReadUInt32(); |
||||
} |
||||
} |
||||
} |
||||
@ -1,46 +0,0 @@
@@ -1,46 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using System.Diagnostics; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.PE { |
||||
|
||||
public class StandardFields |
||||
{ |
||||
const ushort MAGIC = 0x10B; |
||||
|
||||
byte lMajor; |
||||
byte lMinor; |
||||
uint codeSize; |
||||
uint initializedDataSize; |
||||
uint uninitializedDataSize; |
||||
uint entryPointRVA; |
||||
uint baseOfCode; |
||||
uint baseOfData; |
||||
|
||||
public void LoadFrom(BinaryReader binaryReader) |
||||
{ |
||||
ushort magic = binaryReader.ReadUInt16(); |
||||
if (magic != MAGIC) { |
||||
Console.WriteLine("Warning OptionalHeader.StandardFields != " + MAGIC + " was " + magic); |
||||
} |
||||
lMajor = binaryReader.ReadByte(); |
||||
Debug.Assert(lMajor == 6 || lMajor == 7); |
||||
lMinor = binaryReader.ReadByte(); |
||||
Debug.Assert(lMinor == 0 || lMinor == 10); |
||||
codeSize = binaryReader.ReadUInt32(); |
||||
initializedDataSize = binaryReader.ReadUInt32(); |
||||
uninitializedDataSize = binaryReader.ReadUInt32(); |
||||
entryPointRVA = binaryReader.ReadUInt32(); |
||||
baseOfCode = binaryReader.ReadUInt32(); |
||||
baseOfData = binaryReader.ReadUInt32(); |
||||
} |
||||
} |
||||
|
||||
} |
||||
@ -1,66 +0,0 @@
@@ -1,66 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Mike Krüger" email="mike@icsharpcode.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
|
||||
using System; |
||||
using System.IO; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.PE { |
||||
|
||||
public class StreamHeader |
||||
{ |
||||
uint offset; |
||||
uint size; |
||||
string name; |
||||
|
||||
public uint Offset { |
||||
get { |
||||
return offset; |
||||
} |
||||
set { |
||||
offset = value; |
||||
} |
||||
} |
||||
|
||||
public uint Size { |
||||
get { |
||||
return size; |
||||
} |
||||
set { |
||||
size = value; |
||||
} |
||||
} |
||||
|
||||
public string Name { |
||||
get { |
||||
return name; |
||||
} |
||||
set { |
||||
name = value; |
||||
} |
||||
} |
||||
|
||||
public void LoadFrom(BinaryReader binaryReader) |
||||
{ |
||||
offset = binaryReader.ReadUInt32(); |
||||
size = binaryReader.ReadUInt32(); |
||||
int bytesRead = 1; |
||||
byte b = binaryReader.ReadByte(); |
||||
while (b != 0) { |
||||
name += (char)b; |
||||
b = binaryReader.ReadByte(); |
||||
++bytesRead; |
||||
} |
||||
// name is filled to 4 byte blocks
|
||||
int filler = bytesRead % 4 == 0 ? 0 : 4 - (bytesRead % 4); |
||||
for (int i = 0; i < filler; ++i) { |
||||
binaryReader.ReadByte(); |
||||
} |
||||
|
||||
} |
||||
} |
||||
} |
||||
@ -1,39 +0,0 @@
@@ -1,39 +0,0 @@
|
||||
// <file>
|
||||
// <copyright see="prj:///doc/copyright.txt">2002-2005 AlphaSierraPapa</copyright>
|
||||
// <license see="prj:///doc/license.txt">GNU General Public License</license>
|
||||
// <owner name="Georg Brandl" email="g.brandl@gmx.net"/>
|
||||
// <version>$Revision$</version>
|
||||
// </file>
|
||||
|
||||
using System; |
||||
using ICSharpCode.SharpAssembly.Metadata; |
||||
using ICSharpCode.SharpAssembly.Metadata.Rows; |
||||
|
||||
namespace ICSharpCode.SharpAssembly.Assembly |
||||
{ |
||||
/// <summary>
|
||||
/// imitates Reflection.AssemblyName, but has less functionality
|
||||
/// </summary>
|
||||
public class SharpAssemblyName : object |
||||
{ |
||||
public string Name; |
||||
public uint Flags; |
||||
public string Culture; |
||||
public Version Version; |
||||
public byte[] PublicKey; |
||||
public int RefId; |
||||
|
||||
public string FullName { |
||||
get { |
||||
string cult = (Culture == "" ? "neutral" : Culture); |
||||
|
||||
return Name + ", Version=" + Version.ToString() + ", Culture=" + cult; |
||||
// + ", PublicKeyToken=" + PublicKey.ToString();
|
||||
} |
||||
} |
||||
|
||||
public SharpAssemblyName() |
||||
{ |
||||
} |
||||
} |
||||
} |
||||
Loading…
Reference in new issue