Skip to content

Support disassembling single file bundle for ILSpy #112541

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Mar 10, 2025
Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -379,10 +379,12 @@ internal IAssemblyMetadata R2RManifestMetadata
}

/// <summary>
/// Initializes the fields of the R2RHeader and R2RMethods
/// Minimally initializes the R2R reader.
/// </summary>
/// <param name="filename">PE image</param>
/// <exception cref="BadImageFormatException">The Cor header flag must be ILLibrary</exception>
/// <param name="assemblyResolver">Assembly resolver</param>
/// <param name="metadata">Assembly metadata</param>
/// <param name="peReader">PE image</param>
/// <param name="filename">PE file name</param>
public ReadyToRunReader(IAssemblyResolver assemblyResolver, IAssemblyMetadata metadata, PEReader peReader, string filename)
{
_assemblyResolver = assemblyResolver;
Expand All @@ -392,17 +394,48 @@ public ReadyToRunReader(IAssemblyResolver assemblyResolver, IAssemblyMetadata me
}

/// <summary>
/// Initializes the fields of the R2RHeader and R2RMethods
/// Minimally initializes the R2R reader.
/// </summary>
/// <param name="filename">PE image</param>
/// <exception cref="BadImageFormatException">The Cor header flag must be ILLibrary</exception>
/// <param name="assemblyResolver">Assembly resolver</param>
/// <param name="metadata">Assembly metadata</param>
/// <param name="peReader">PE image</param>
/// <param name="filename">PE file name</param>
/// <param name="content">PE image content</param>
public ReadyToRunReader(IAssemblyResolver assemblyResolver, IAssemblyMetadata metadata, PEReader peReader, string filename, ImmutableArray<byte> content)
{
_assemblyResolver = assemblyResolver;
CompositeReader = peReader;
Filename = filename;
Image = Unsafe.As<ImmutableArray<byte>, byte[]>(ref content);
Initialize(metadata);
}

/// <summary>
/// Minimally initializes the R2R reader.
/// </summary>
/// <param name="assemblyResolver">Assembly resolver</param>
/// <param name="filename">PE file name</param>
public unsafe ReadyToRunReader(IAssemblyResolver assemblyResolver, string filename)
{
_assemblyResolver = assemblyResolver;
Filename = filename;
Initialize(metadata: null);
}

/// <summary>
/// Minimally initializes the R2R reader.
/// </summary>
/// <param name="assemblyResolver">Assembly resolver</param>
/// <param name="filename">PE file name</param>
/// <param name="content">PE image content</param>
public unsafe ReadyToRunReader(IAssemblyResolver assemblyResolver, string filename, ImmutableArray<byte> content)
{
_assemblyResolver = assemblyResolver;
Filename = filename;
Image = Unsafe.As<ImmutableArray<byte>, byte[]>(ref content);
Initialize(metadata: null);
}

public static bool IsReadyToRunImage(PEReader peReader)
{
if (peReader.PEHeaders == null)
Expand Down Expand Up @@ -441,10 +474,18 @@ private unsafe void Initialize(IAssemblyMetadata metadata)

if (CompositeReader == null)
{
byte[] image = File.ReadAllBytes(Filename);
Image = image;
ImagePin = new PinningReference(image);
byte[] image = null;
if (Image == null)
{
File.ReadAllBytes(Filename);
Image = image;
}
else
{
image = Image;
}

ImagePin = new PinningReference(image);
CompositeReader = new PEReader(Unsafe.As<byte[], ImmutableArray<byte>>(ref image));
}
else
Expand Down Expand Up @@ -1140,7 +1181,7 @@ private void CountRuntimeFunctions(bool[] isEntryPoint, IDictionary<int, int[]>
count++;
i++;
} while (i < isEntryPoint.Length && !isEntryPoint[i] && i < firstColdRuntimeFunction);

if (dHotColdMap.ContainsKey(runtimeFunctionId))
{
int coldSize = dHotColdMap[runtimeFunctionId].Length;
Expand Down
Loading