本文整理汇总了C#中IKVM.Reflection.Writer.MetadataWriter类的典型用法代码示例。如果您正苦于以下问题:C# MetadataWriter类的具体用法?C# MetadataWriter怎么用?C# MetadataWriter使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
MetadataWriter类属于IKVM.Reflection.Writer命名空间,在下文中一共展示了MetadataWriter类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C#代码示例。
示例1: Freeze
internal void Freeze(MetadataWriter mw)
{
if (frozen)
throw new InvalidOperationException();
frozen = true;
unalignedlength = GetLength(mw);
}
开发者ID:jira-sarec,项目名称:ICSE-2012-TraceLab,代码行数:7,代码来源:Heaps.cs
示例2: Write
internal void Write(MetadataWriter mw, uint rva)
{
foreach (int offset in linkOffsets)
{
bb.Position = offset;
bb.Write(bb.GetInt32AtCurrentPosition() + (int)rva);
}
mw.Write(bb);
}
开发者ID:ikvm,项目名称:IKVM.NET-cvs-clone,代码行数:9,代码来源:ResourceSection.cs
示例3: Write
internal void Write(MetadataWriter mw)
{
int pos = mw.Position;
WriteImpl(mw);
Debug.Assert(mw.Position == pos + unalignedlength);
int align = Length - unalignedlength;
for (int i = 0; i < align; i++)
{
mw.Write((byte)0);
}
}
开发者ID:jira-sarec,项目名称:ICSE-2012-TraceLab,代码行数:11,代码来源:Heaps.cs
示例4: WriteImpl
protected override void WriteImpl(MetadataWriter mw)
{
foreach (string str in list)
{
mw.Write(System.Text.Encoding.UTF8.GetBytes(str));
mw.Write((byte)0);
}
}
开发者ID:jira-sarec,项目名称:ICSE-2012-TraceLab,代码行数:8,代码来源:Heaps.cs
示例5: WriteParamRecords
internal void WriteParamRecords(MetadataWriter mw)
{
foreach (MethodBuilder mb in methods)
{
mb.WriteParamRecords(mw);
}
}
开发者ID:,项目名称:,代码行数:7,代码来源:
示例6: AssertRVA
private void AssertRVA(MetadataWriter mw, uint rva)
{
Debug.Assert(mw.Position - PointerToRawData + BaseRVA == rva);
}
开发者ID:jira-sarec,项目名称:ICSE-2012-TraceLab,代码行数:4,代码来源:TextSection.cs
示例7: WriteMethodDefRecord
internal void WriteMethodDefRecord(int baseRVA, MetadataWriter mw, ref int paramList)
{
if (rva != -1)
{
mw.Write(rva + baseRVA);
}
else
{
mw.Write(0);
}
mw.Write((short)implFlags);
mw.Write((short)attributes);
mw.WriteStringIndex(nameIndex);
mw.WriteBlobIndex(signature);
mw.WriteParam(paramList);
if (parameters != null)
{
paramList += parameters.Count;
}
}
开发者ID:,项目名称:,代码行数:20,代码来源:
示例8: WriteTypeDefRecord
internal void WriteTypeDefRecord(MetadataWriter mw, ref int fieldList, ref int methodList)
{
mw.Write((int)attribs);
mw.WriteStringIndex(typeName);
mw.WriteStringIndex(typeNameSpace);
mw.WriteTypeDefOrRef(extends);
mw.WriteField(fieldList);
mw.WriteMethodDef(methodList);
methodList += methods.Count;
fieldList += fields.Count;
}
开发者ID:,项目名称:,代码行数:11,代码来源:
示例9: Write
internal void Write(MetadataWriter mw, uint sdataRVA)
{
// sort the exports by ordinal
text.moduleBuilder.unmanagedExports.Sort(CompareUnmanagedExportOrdinals);
// Now write the Export Address Table
text.AssertRVA(mw, exportAddressTableRVA);
for (int i = 0, pos = 0; i < entries; i++)
{
if (text.moduleBuilder.unmanagedExports[pos].ordinal == i + ordinalBase)
{
mw.Write(stubsRVA + (uint)pos * stubLength);
pos++;
}
else
{
mw.Write(0);
}
}
// sort the exports by name
text.moduleBuilder.unmanagedExports.Sort(CompareUnmanagedExportNames);
// Now write the Export Name Pointer Table
text.AssertRVA(mw, exportNamePointerTableRVA);
uint nameOffset = (uint)text.moduleBuilder.fileName.Length + 1;
foreach (UnmanagedExport exp in text.moduleBuilder.unmanagedExports)
{
if (exp.name != null)
{
mw.Write(namesRVA + nameOffset);
nameOffset += (uint)exp.name.Length + 1;
}
}
// Now write the Export Ordinal Table
text.AssertRVA(mw, exportOrdinalTableRVA);
foreach (UnmanagedExport exp in text.moduleBuilder.unmanagedExports)
{
if (exp.name != null)
{
mw.Write((ushort)(exp.ordinal - ordinalBase));
}
}
// Now write the actual names
text.AssertRVA(mw, namesRVA);
mw.Write(Encoding.ASCII.GetBytes(text.moduleBuilder.fileName));
mw.Write((byte)0);
foreach (UnmanagedExport exp in text.moduleBuilder.unmanagedExports)
{
if (exp.name != null)
{
mw.Write(Encoding.ASCII.GetBytes(exp.name));
mw.Write((byte)0);
}
}
text.AssertRVA(mw, namesRVA + namesLength);
// alignment padding
for (int i = (int)(stubsRVA - (namesRVA + namesLength)); i > 0; i--)
{
mw.Write((byte)0);
}
// sort the exports by ordinal
text.moduleBuilder.unmanagedExports.Sort(CompareUnmanagedExportOrdinals);
// Now write the stubs
text.AssertRVA(mw, stubsRVA);
for (int i = 0, pos = 0; i < entries; i++)
{
if (text.moduleBuilder.unmanagedExports[pos].ordinal == i + ordinalBase)
{
switch (text.peWriter.Headers.FileHeader.Machine)
{
case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_I386:
mw.Write((byte)0xFF);
mw.Write((byte)0x25);
mw.Write((uint)text.peWriter.Headers.OptionalHeader.ImageBase + text.moduleBuilder.unmanagedExports[pos].rva.initializedDataOffset + sdataRVA);
mw.Write((short)0); // alignment
break;
case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_AMD64:
mw.Write((byte)0x48);
mw.Write((byte)0xA1);
mw.Write(text.peWriter.Headers.OptionalHeader.ImageBase + text.moduleBuilder.unmanagedExports[pos].rva.initializedDataOffset + sdataRVA);
mw.Write((byte)0xFF);
mw.Write((byte)0xE0);
mw.Write(0); // alignment
break;
default:
throw new NotImplementedException();
}
pos++;
}
}
}
开发者ID:jira-sarec,项目名称:ICSE-2012-TraceLab,代码行数:98,代码来源:TextSection.cs
示例10: WriteImportDirectory
private void WriteImportDirectory(MetadataWriter mw)
{
mw.Write(ImportDirectoryRVA + 40); // ImportLookupTable
mw.Write(0); // DateTimeStamp
mw.Write(0); // ForwarderChain
mw.Write(ImportHintNameTableRVA + 14); // Name
mw.Write(ImportAddressTableRVA);
mw.Write(new byte[20]);
// Import Lookup Table
mw.Write(ImportHintNameTableRVA); // Hint/Name Table RVA
int size = 48;
if (peWriter.Headers.FileHeader.Machine != IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_I386)
{
size += 4;
mw.Write(0);
}
mw.Write(0);
// alignment padding
for (int i = (int)(ImportHintNameTableRVA - (ImportDirectoryRVA + size)); i > 0; i--)
{
mw.Write((byte)0);
}
// Hint/Name Table
AssertRVA(mw, ImportHintNameTableRVA);
mw.Write((ushort)0); // Hint
if ((peWriter.Headers.FileHeader.Characteristics & IMAGE_FILE_HEADER.IMAGE_FILE_DLL) != 0)
{
mw.Write(System.Text.Encoding.ASCII.GetBytes("_CorDllMain"));
}
else
{
mw.Write(System.Text.Encoding.ASCII.GetBytes("_CorExeMain"));
}
mw.Write((byte)0);
// Name
mw.Write(System.Text.Encoding.ASCII.GetBytes("mscoree.dll"));
mw.Write((ushort)0);
}
开发者ID:jira-sarec,项目名称:ICSE-2012-TraceLab,代码行数:40,代码来源:TextSection.cs
示例11: WriteRelocations
internal void WriteRelocations(MetadataWriter mw)
{
uint relocAddress = this.StartupStubRVA;
switch (peWriter.Headers.FileHeader.Machine)
{
case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_I386:
case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_AMD64:
relocAddress += 2;
break;
case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_IA64:
relocAddress += 0x20;
break;
}
WriteRelocationBlock(mw, relocAddress);
if (exportTables != null)
{
exportTables.WriteRelocations(mw);
}
}
开发者ID:jira-sarec,项目名称:ICSE-2012-TraceLab,代码行数:19,代码来源:TextSection.cs
示例12: WriteExportTables
private void WriteExportTables(MetadataWriter mw, uint sdataRVA)
{
if (exportTables != null)
{
exportTables.Write(mw, sdataRVA);
}
}
开发者ID:jira-sarec,项目名称:ICSE-2012-TraceLab,代码行数:7,代码来源:TextSection.cs
示例13: WriteExportDirectory
private void WriteExportDirectory(MetadataWriter mw)
{
if (ExportDirectoryLength != 0)
{
// Flags
mw.Write(0);
// Date/Time Stamp
mw.Write(peWriter.Headers.FileHeader.TimeDateStamp);
// Major Version
mw.Write((short)0);
// Minor Version
mw.Write((short)0);
// Name RVA
mw.Write(exportTables.namesRVA);
// Ordinal Base
mw.Write(exportTables.ordinalBase);
// Address Table Entries
mw.Write(exportTables.entries);
// Number of Name Pointers
mw.Write(exportTables.nameCount);
// Export Address Table RVA
mw.Write(exportTables.exportAddressTableRVA);
// Name Pointer RVA
mw.Write(exportTables.exportNamePointerTableRVA);
// Ordinal Table RVA
mw.Write(exportTables.exportOrdinalTableRVA);
}
}
开发者ID:jira-sarec,项目名称:ICSE-2012-TraceLab,代码行数:28,代码来源:TextSection.cs
示例14: WriteVTableFixups
private void WriteVTableFixups(MetadataWriter mw, uint sdataRVA)
{
foreach (ModuleBuilder.VTableFixups fixups in moduleBuilder.vtablefixups)
{
mw.Write(fixups.initializedDataOffset + sdataRVA);
mw.Write(fixups.count);
mw.Write(fixups.type);
}
}
开发者ID:jira-sarec,项目名称:ICSE-2012-TraceLab,代码行数:9,代码来源:TextSection.cs
示例15: WriteRelocationBlock
// note that we're lazy and write a new relocation block for every relocation
// even if they are in the same page (since there is typically only one anyway)
private void WriteRelocationBlock(MetadataWriter mw, uint relocAddress)
{
uint pageRVA = relocAddress & ~0xFFFU;
mw.Write(pageRVA); // PageRVA
mw.Write(0x000C); // Block Size
switch (peWriter.Headers.FileHeader.Machine)
{
case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_I386:
mw.Write(0x3000 + relocAddress - pageRVA); // Type / Offset
break;
case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_AMD64:
mw.Write(0xA000 + relocAddress - pageRVA); // Type / Offset
break;
case IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_IA64:
// on IA64 the StartupStubRVA is 16 byte aligned, so these two addresses won't cross a page boundary
mw.Write((short)(0xA000 + relocAddress - pageRVA)); // Type / Offset
mw.Write((short)(0xA000 + relocAddress - pageRVA + 8)); // Type / Offset
break;
}
}
开发者ID:jira-sarec,项目名称:ICSE-2012-TraceLab,代码行数:22,代码来源:TextSection.cs
示例16: WriteDebugDirectory
private void WriteDebugDirectory(MetadataWriter mw)
{
if (DebugDirectoryLength != 0)
{
IMAGE_DEBUG_DIRECTORY idd = new IMAGE_DEBUG_DIRECTORY();
idd.Characteristics = 0;
idd.TimeDateStamp = peWriter.Headers.FileHeader.TimeDateStamp;
byte[] buf = SymbolSupport.GetDebugInfo(moduleBuilder.symbolWriter, ref idd);
idd.PointerToRawData = (DebugDirectoryRVA - BaseRVA) + DebugDirectoryLength + PointerToRawData;
mw.Write(idd.Characteristics);
mw.Write(idd.TimeDateStamp);
mw.Write(idd.MajorVersion);
mw.Write(idd.MinorVersion);
mw.Write(idd.Type);
mw.Write(idd.SizeOfData);
mw.Write(idd.AddressOfRawData);
mw.Write(idd.PointerToRawData);
mw.Write(buf);
}
}
开发者ID:jira-sarec,项目名称:ICSE-2012-TraceLab,代码行数:20,代码来源:TextSection.cs
示例17: WriteFieldRecords
internal void WriteFieldRecords(MetadataWriter mw)
{
mw.Write((short)attribs);
mw.WriteStringIndex(nameIndex);
mw.WriteBlobIndex(signature);
}
开发者ID:jira-sarec,项目名称:ICSE-2012-TraceLab,代码行数:6,代码来源:FieldBuilder.cs
示例18: WriteModule
internal static void WriteModule(StrongNameKeyPair keyPair, byte[] publicKey, ModuleBuilder moduleBuilder, PEFileKinds fileKind, PortableExecutableKinds portableExecutableKind, ImageFileMachine imageFileMachine, ByteBuffer versionInfoData, byte[] unmanagedResources, int entryPointToken)
{
moduleBuilder.FixupMethodBodyTokens();
moduleBuilder.ModuleTable.Add(0, moduleBuilder.Strings.Add(moduleBuilder.moduleName), moduleBuilder.Guids.Add(moduleBuilder.ModuleVersionId), 0, 0);
if (moduleBuilder.UserStrings.IsEmpty)
{
// for compat with Ref.Emit, if there aren't any user strings, we add one
moduleBuilder.UserStrings.Add(" ");
}
using (FileStream fs = new FileStream(moduleBuilder.FullyQualifiedName, FileMode.Create))
{
PEWriter writer = new PEWriter(fs);
switch (imageFileMachine)
{
case ImageFileMachine.I386:
writer.Headers.FileHeader.Machine = IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_I386;
writer.Headers.FileHeader.Characteristics |= IMAGE_FILE_HEADER.IMAGE_FILE_32BIT_MACHINE;
break;
case ImageFileMachine.AMD64:
writer.Headers.FileHeader.Machine = IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_AMD64;
writer.Headers.FileHeader.Characteristics |= IMAGE_FILE_HEADER.IMAGE_FILE_LARGE_ADDRESS_AWARE;
writer.Headers.FileHeader.SizeOfOptionalHeader = 0xF0;
writer.Headers.OptionalHeader.Magic = IMAGE_OPTIONAL_HEADER.IMAGE_NT_OPTIONAL_HDR64_MAGIC;
writer.Headers.OptionalHeader.SizeOfStackReserve = 0x400000;
writer.Headers.OptionalHeader.SizeOfStackCommit = 0x4000;
writer.Headers.OptionalHeader.SizeOfHeapCommit = 0x2000;
break;
case ImageFileMachine.IA64:
writer.Headers.FileHeader.Machine = IMAGE_FILE_HEADER.IMAGE_FILE_MACHINE_IA64;
writer.Headers.FileHeader.Characteristics |= IMAGE_FILE_HEADER.IMAGE_FILE_LARGE_ADDRESS_AWARE;
writer.Headers.FileHeader.SizeOfOptionalHeader = 0xF0;
writer.Headers.OptionalHeader.Magic = IMAGE_OPTIONAL_HEADER.IMAGE_NT_OPTIONAL_HDR64_MAGIC;
writer.Headers.OptionalHeader.SizeOfStackReserve = 0x400000;
writer.Headers.OptionalHeader.SizeOfStackCommit = 0x4000;
writer.Headers.OptionalHeader.SizeOfHeapCommit = 0x2000;
break;
default:
throw new ArgumentOutOfRangeException("imageFileMachine");
}
if (fileKind == PEFileKinds.Dll)
{
writer.Headers.FileHeader.Characteristics |= IMAGE_FILE_HEADER.IMAGE_FILE_DLL;
}
switch (fileKind)
{
case PEFileKinds.WindowApplication:
writer.Headers.OptionalHeader.Subsystem = IMAGE_OPTIONAL_HEADER.IMAGE_SUBSYSTEM_WINDOWS_GUI;
break;
default:
writer.Headers.OptionalHeader.Subsystem = IMAGE_OPTIONAL_HEADER.IMAGE_SUBSYSTEM_WINDOWS_CUI;
break;
}
writer.Headers.OptionalHeader.DllCharacteristics =
IMAGE_OPTIONAL_HEADER.IMAGE_DLLCHARACTERISTICS_DYNAMIC_BASE |
IMAGE_OPTIONAL_HEADER.IMAGE_DLLCHARACTERISTICS_NO_SEH |
IMAGE_OPTIONAL_HEADER.IMAGE_DLLCHARACTERISTICS_NX_COMPAT |
IMAGE_OPTIONAL_HEADER.IMAGE_DLLCHARACTERISTICS_TERMINAL_SERVER_AWARE;
CliHeader cliHeader = new CliHeader();
cliHeader.Cb = 0x48;
cliHeader.MajorRuntimeVersion = 2;
cliHeader.MinorRuntimeVersion = moduleBuilder.MDStreamVersion < 0x20000 ? (ushort)0 : (ushort)5;
if ((portableExecutableKind & PortableExecutableKinds.ILOnly) != 0)
{
cliHeader.Flags |= CliHeader.COMIMAGE_FLAGS_ILONLY;
}
if ((portableExecutableKind & PortableExecutableKinds.Required32Bit) != 0)
{
cliHeader.Flags |= CliHeader.COMIMAGE_FLAGS_32BITREQUIRED;
}
if (keyPair != null)
{
cliHeader.Flags |= CliHeader.COMIMAGE_FLAGS_STRONGNAMESIGNED;
}
if (moduleBuilder.IsPseudoToken(entryPointToken))
{
entryPointToken = moduleBuilder.ResolvePseudoToken(entryPointToken);
}
cliHeader.EntryPointToken = (uint)entryPointToken;
moduleBuilder.Strings.Freeze();
moduleBuilder.UserStrings.Freeze();
moduleBuilder.Guids.Freeze();
moduleBuilder.Blobs.Freeze();
MetadataWriter mw = new MetadataWriter(moduleBuilder, fs);
moduleBuilder.Tables.Freeze(mw);
TextSection code = new TextSection(writer, cliHeader, moduleBuilder, publicKey != null);
ResourceSection resources = new ResourceSection(versionInfoData, unmanagedResources);
// Import Directory
writer.Headers.OptionalHeader.DataDirectory[1].VirtualAddress = code.ImportDirectoryRVA;
writer.Headers.OptionalHeader.DataDirectory[1].Size = code.ImportDirectoryLength;
// Import Address Table Directory
writer.Headers.OptionalHeader.DataDirectory[12].VirtualAddress = code.ImportAddressTableRVA;
writer.Headers.OptionalHeader.DataDirectory[12].Size = code.ImportAddressTableLength;
//.........这里部分代码省略.........
开发者ID:ikvm,项目名称:IKVM.NET-cvs-clone,代码行数:101,代码来源:ModuleWriter.cs
示例19: WriteParamRecord
internal void WriteParamRecord(MetadataWriter mw)
{
mw.Write(flags);
mw.Write(sequence);
mw.WriteStringIndex(nameIndex);
}
开发者ID:jira-sarec,项目名称:ICSE-2012-TraceLab,代码行数:6,代码来源:ParameterBuilder.cs
示例20: WriteMethodDefRecords
internal void WriteMethodDefRecords(int baseRVA, MetadataWriter mw, ref int paramList)
{
foreach (MethodBuilder mb in methods)
{
mb.WriteMethodDefRecord(baseRVA, mw, ref paramList);
}
}
开发者ID:,项目名称:,代码行数:7,代码来源:
注:本文中的IKVM.Reflection.Writer.MetadataWriter类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论