/// <summary> /// Loads an assembly from a specific file using the specific reading parameters. /// </summary> /// <param name="file">The file to read.</param> /// <param name="arguments">The reading parameters to use.</param> /// <returns></returns> /// <exception cref="System.BadImageFormatException"></exception> public static LWin32 LoadFile(string file, ReadingParameters arguments) { try { LWin32 a = new LWin32(); a._path = file; a.ReadingArguments = arguments; a._peImage = PeImage.LoadFromAssembly(a); a._headerReader = PeHeaderReader.FromAssembly(a); a._ntHeader = NTHeader.FromAssembly(a); a._mzHeader = MZHeader.FromAssembly(a); a._headerReader.LoadData(arguments.IgnoreDataDirectoryAmount); if (!arguments.OnlyManaged) { a._importExportTableReader = new ImportExportTableReader(a._ntHeader); a._resourcesReader = new ResourcesReader(a._ntHeader); } a._netHeader = NETHeader.FromAssembly(a); a._peImage.SetOffset(a._ntHeader.OptionalHeader.HeaderSize); return(a); } catch (Exception ex) { if (ex is AccessViolationException || ex is FileNotFoundException) { throw; } throw new BadImageFormatException("The file is not a valid Portable Executable File.", ex); } }
public ImportExportTableReader(NTHeader header) { this.header = header; image = header._assembly._peImage; LoadExports(); LoadImports(); }
internal NETHeaderReader(NTHeader header, NETHeader parent) { this.parent = parent; header._assembly._netHeader = parent; image = header._assembly._peImage; this.ntHeader = header; }
internal ResourceDirectoryEntry(PeImage image, uint offset, Structures.IMAGE_RESOURCE_DIRECTORY_ENTRY rawEntry, string customName) { this._image = image; this._offset = offset; this._rawEntry = rawEntry; this._customName = customName; }
internal LibraryReference(PeImage image, uint offset, Structures.IMAGE_IMPORT_DESCRIPTOR rawDescriptor, string libraryName, ImportMethod[] importMethods) { this._image = image; this._offset = offset; this._rawDescriptor = rawDescriptor; this.LibraryName = libraryName; this.ImportMethods = importMethods; }
public MSILAssembler(MethodBody methodBody) { this.MethodBody = methodBody; _disassembler = new MSILDisassembler(methodBody); _image = methodBody.Method._netheader._assembly.Image; _offsetConverter = new OffsetConverter(Section.GetSectionByRva(methodBody.Method._netheader._assembly, methodBody.Method.RVA)); _bodyOffset = _offsetConverter.RvaToFileOffset(methodBody.Method.RVA) + methodBody.HeaderSize; _tokenResolver = methodBody.Method._netheader.TokenResolver; }
internal ResourceDirectory(PeImage image, uint offset, ResourcesReader reader, ResourceDirectoryEntry parentEntry, Structures.IMAGE_RESOURCE_DIRECTORY rawDirectory) { this._image = image; this.ParentEntry = parentEntry; this._offset = offset; this._fileOffset = offset + image.ParentAssembly._ntHeader.OptionalHeader.DataDirectories[(int)DataDirectoryName.Resource].TargetOffset.FileOffset; this._rawDirectory = rawDirectory; this._reader = reader; }
internal NETMethodReader(PeImage peImage, MethodBody methodbody) { tokenResolver = new MetaDataTokenResolver(peImage.ParentAssembly._netHeader); this.peImage = peImage; this.rva = methodbody.Method.RVA; this.methodbody = methodbody; peImage.SetOffset(Offset.FromRva(rva, peImage.ParentAssembly).FileOffset); rawoffset = (uint)peImage.Stream.Position; signature = peImage.Reader.ReadByte(); }
internal ResourceDataEntry(PeImage image, uint offset, ResourceDirectoryEntry parentEntry, Structures.IMAGE_RESOURCE_DATA_ENTRY rawDataEntry) { this._image = image; this._offset = offset; this.ParentEntry = parentEntry; this._rawDataEntry = rawDataEntry; Section resourceSection = Section.GetSectionByRva(image.ParentAssembly, image.ParentAssembly._ntHeader.OptionalHeader.DataDirectories[(int)DataDirectoryName.Resource].TargetOffset.Rva); _targetOffset = OffsetToData - resourceSection.RVA + resourceSection.RawOffset; }
internal ResourcesReader(NTHeader header) { this.header = header; this.image = header._assembly._peImage; resourceDirectory = header.OptionalHeader.DataDirectories[(int)DataDirectoryName.Resource]; if (header._assembly._peImage.TrySetOffset(resourceDirectory.TargetOffset.FileOffset)) { stream = header._assembly._peImage.ReadStream((int)resourceDirectory.Size); reader = new BinaryReader(stream); ReadRootDirectory(); } }