Skip to content
/ cecil Public
forked from jbevain/cecil

Commit

Permalink
Merge remote-tracking branch 'upstream/master'
Browse files Browse the repository at this point in the history
  • Loading branch information
marek-safar committed Feb 15, 2018
2 parents dfee11e + efa6341 commit ece408e
Show file tree
Hide file tree
Showing 7 changed files with 20 additions and 15 deletions.
2 changes: 1 addition & 1 deletion Mono.Cecil.Cil/Symbols.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1000,7 +1000,7 @@ public static string GetMdbFileName (string assemblyFileName)

public static bool IsPortablePdb (string fileName)
{
using (var file = new FileStream (fileName, FileMode.Open, FileAccess.Read, FileShare.Read))
using (var file = new FileStream (fileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
return IsPortablePdb (file);
}

Expand Down
1 change: 1 addition & 0 deletions Mono.Cecil.PE/Image.cs
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ sealed class Image : IDisposable {
public string RuntimeVersion;
public TargetArchitecture Architecture;
public ModuleCharacteristics Characteristics;
public ushort LinkerVersion;

public ImageDebugHeader DebugHeader;

Expand Down
12 changes: 6 additions & 6 deletions Mono.Cecil.PE/ImageReader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -81,15 +81,16 @@ void ReadImage ()
// Characteristics 2
ushort characteristics = ReadUInt16 ();

ushort subsystem, dll_characteristics;
ReadOptionalHeaders (out subsystem, out dll_characteristics);
ushort subsystem, dll_characteristics, linker_version;
ReadOptionalHeaders (out subsystem, out dll_characteristics, out linker_version);
ReadSections (sections);
ReadCLIHeader ();
ReadMetadata ();
ReadDebugHeader ();

image.Kind = GetModuleKind (characteristics, subsystem);
image.Characteristics = (ModuleCharacteristics) dll_characteristics;
image.LinkerVersion = linker_version;
}

TargetArchitecture ReadArchitecture ()
Expand All @@ -108,7 +109,7 @@ static ModuleKind GetModuleKind (ushort characteristics, ushort subsystem)
return ModuleKind.Console;
}

void ReadOptionalHeaders (out ushort subsystem, out ushort dll_characteristics)
void ReadOptionalHeaders (out ushort subsystem, out ushort dll_characteristics, out ushort linker)
{
// - PEOptionalHeader
// - StandardFieldsHeader
Expand All @@ -118,8 +119,7 @@ void ReadOptionalHeaders (out ushort subsystem, out ushort dll_characteristics)

// pe32 || pe64

// LMajor 1
// LMinor 1
linker = ReadUInt16 ();
// CodeSize 4
// InitializedDataSize 4
// UninitializedDataSize4
Expand All @@ -142,7 +142,7 @@ void ReadOptionalHeaders (out ushort subsystem, out ushort dll_characteristics)
// ImageSize 4
// HeaderSize 4
// FileChecksum 4
Advance (66);
Advance (64);

// SubSystem 2
subsystem = ReadUInt16 ();
Expand Down
5 changes: 2 additions & 3 deletions Mono.Cecil.PE/ImageWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -218,9 +218,8 @@ Section LastSection ()

void WriteOptionalHeaders ()
{
WriteUInt16 ((ushort) (!pe64 ? 0x10b : 0x20b)); // Magic
WriteByte (8); // LMajor
WriteByte (0); // LMinor
WriteUInt16 ((ushort) (!pe64 ? 0x10b : 0x20b)); // Magic
WriteUInt16 (module.linker_version);
WriteUInt32 (text.SizeOfRawData); // CodeSize
WriteUInt32 ((reloc != null ? reloc.SizeOfRawData : 0)
+ (rsrc != null ? rsrc.SizeOfRawData : 0)); // InitializedDataSize
Expand Down
10 changes: 6 additions & 4 deletions Mono.Cecil/AssemblyWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2414,10 +2414,12 @@ void AddAsyncMethodBodyDebugInformation (ICustomDebugInformationProvider provide
var signature = CreateSignatureWriter ();
signature.WriteUInt32 ((uint) async_method.catch_handler.Offset + 1);

for (int i = 0; i < async_method.yields.Count; i++) {
signature.WriteUInt32 ((uint) async_method.yields [i].Offset);
signature.WriteUInt32 ((uint) async_method.resumes [i].Offset);
signature.WriteCompressedUInt32 (async_method.resume_methods [i].MetadataToken.RID);
if (!async_method.yields.IsNullOrEmpty ()) {
for (int i = 0; i < async_method.yields.Count; i++) {
signature.WriteUInt32 ((uint) async_method.yields [i].Offset);
signature.WriteUInt32 ((uint) async_method.resumes [i].Offset);
signature.WriteCompressedUInt32 (async_method.resume_methods [i].MetadataToken.RID);
}
}

AddCustomDebugInformation (provider, async_method, signature);
Expand Down
4 changes: 3 additions & 1 deletion Mono.Cecil/ModuleDefinition.cs
Original file line number Diff line number Diff line change
Expand Up @@ -276,6 +276,7 @@ public sealed class ModuleDefinition : ModuleReference, ICustomAttributeProvider
TargetArchitecture architecture;
ModuleAttributes attributes;
ModuleCharacteristics characteristics;
internal ushort linker_version = 8;
Guid mvid;
internal uint timestamp;

Expand Down Expand Up @@ -350,7 +351,7 @@ public ModuleCharacteristics Characteristics {
set { characteristics = value; }
}

[Obsolete("Use FileName")]
[Obsolete ("Use FileName")]
public string FullyQualifiedName {
get { return file_name; }
}
Expand Down Expand Up @@ -607,6 +608,7 @@ internal ModuleDefinition (Image image)
this.architecture = image.Architecture;
this.attributes = image.Attributes;
this.characteristics = image.Characteristics;
this.linker_version = image.LinkerVersion;
this.file_name = image.FileName;
this.timestamp = image.Timestamp;

Expand Down
1 change: 1 addition & 0 deletions Mono.Cecil/ModuleKind.cs
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public enum TargetArchitecture {
public enum ModuleAttributes {
ILOnly = 1,
Required32Bit = 2,
ILLibrary = 4,
StrongNameSigned = 8,
Preferred32Bit = 0x00020000,
}
Expand Down

0 comments on commit ece408e

Please sign in to comment.