Skip to content

Commit f311afa

Browse files
Merge pull request #3398 from cshung/public/disassemble-single-file-bundle
Support disassembling single file bundle for ILSpy
2 parents 29e5e7d + 9beb9cb commit f311afa

File tree

6 files changed

+35
-20
lines changed

6 files changed

+35
-20
lines changed

Directory.Packages.props

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<PackageVersion Include="DataGridExtensions" Version="2.6.0" />
1010
<PackageVersion Include="DiffLib" Version="2025.0.0" />
1111
<PackageVersion Include="Dirkster.AvalonDock.Themes.VS2013" Version="4.72.1" />
12-
<PackageVersion Include="ILCompiler.Reflection.ReadyToRun.Experimental" Version="9.0.1-rtm.24557.9" />
12+
<PackageVersion Include="ILCompiler.Reflection.ReadyToRun.Experimental" Version="10.0.0-preview.4.25213.101" />
1313
<PackageVersion Include="Iced" Version="1.21.0" />
1414
<PackageVersion Include="JunitXml.TestLogger" Version="6.1.0" />
1515
<PackageVersion Include="K4os.Compression.LZ4" Version="1.3.8" />
@@ -40,9 +40,9 @@
4040
<PackageVersion Include="PowerShellStandard.Library" Version="5.1.1" />
4141
<PackageVersion Include="Shouldly" Version="4.3.0" />
4242
<PackageVersion Include="System.Composition.AttributedModel" Version="9.0.4" />
43-
<PackageVersion Include="System.Collections.Immutable" Version="9.0.4" />
43+
<PackageVersion Include="System.Collections.Immutable" Version="10.0.0-preview.3.25171.5" />
4444
<PackageVersion Include="System.Memory" Version="4.6.3" />
45-
<PackageVersion Include="System.Reflection.Metadata" Version="9.0.4" />
45+
<PackageVersion Include="System.Reflection.Metadata" Version="10.0.0-preview.3.25171.5" />
4646
<PackageVersion Include="System.Resources.Extensions" Version="9.0.4" />
4747
<PackageVersion Include="System.Runtime.CompilerServices.Unsafe" Version="6.1.2" />
4848
<PackageVersion Include="TomsToolbox.Composition.MicrosoftExtensions" Version="2.22.0" />

ICSharpCode.BamlDecompiler/packages.lock.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
},
2424
"System.Collections.Immutable": {
2525
"type": "CentralTransitive",
26-
"requested": "[9.0.4, )",
26+
"requested": "[10.0.0-preview.3.25171.5, )",
2727
"resolved": "6.0.0",
2828
"contentHash": "l4zZJ1WU2hqpQQHXz1rvC3etVZN+2DLmQMO79FhOTZHMn8tDRr+WU287sbomD0BETlmKDn0ygUgVy9k5xkkJdA==",
2929
"dependencies": {
@@ -32,7 +32,7 @@
3232
},
3333
"System.Reflection.Metadata": {
3434
"type": "CentralTransitive",
35-
"requested": "[9.0.4, )",
35+
"requested": "[10.0.0-preview.3.25171.5, )",
3636
"resolved": "6.0.0",
3737
"contentHash": "sffDOcex1C3HO5kDolOYcWXTwRpZY/LvJujM6SMjn63fWMJWchYAAmkoAJXlbpZ5yf4d+KMgxd+LeETa4gD9sQ==",
3838
"dependencies": {

ICSharpCode.ILSpyCmd/packages.lock.json

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@
369369
"K4os.Compression.LZ4": "[1.3.8, )",
370370
"Mono.Cecil": "[0.11.6, )",
371371
"System.Composition.AttributedModel": "[9.0.4, )",
372-
"System.Reflection.Metadata": "[9.0.4, )",
372+
"System.Reflection.Metadata": "[10.0.0-preview.3.25171.5, )",
373373
"System.Runtime.CompilerServices.Unsafe": "[6.1.2, )"
374374
}
375375
},
@@ -424,7 +424,7 @@
424424
},
425425
"System.Collections.Immutable": {
426426
"type": "CentralTransitive",
427-
"requested": "[9.0.4, )",
427+
"requested": "[10.0.0-preview.3.25171.5, )",
428428
"resolved": "8.0.0",
429429
"contentHash": "AurL6Y5BA1WotzlEvVaIDpqzpIPvYnnldxru8oXJU2yFxFUy3+pNXjXd1ymO+RA0rq0+590Q8gaz2l3Sr7fmqg=="
430430
},
@@ -436,9 +436,9 @@
436436
},
437437
"System.Reflection.Metadata": {
438438
"type": "CentralTransitive",
439-
"requested": "[9.0.4, )",
440-
"resolved": "9.0.4",
441-
"contentHash": "qeJNsMmZPc/Lieg0Md+D4F6LoLcxV3b9QsUNmBRXc2ZVOkMbAcwuO9l2jbQFv3n+fLiHJilN8v6i5aJNivjrCQ=="
439+
"requested": "[10.0.0-preview.3.25171.5, )",
440+
"resolved": "10.0.0-preview.3.25171.5",
441+
"contentHash": "+vmMtMSXPQTYqaHoLgWcd39Pwb7yGD4sCewmvVrdNzziRCBxjf6/DK8XCWzELxNsLhOmViZ4LIIr+uPa6K5pRw=="
442442
},
443443
"System.Runtime.CompilerServices.Unsafe": {
444444
"type": "CentralTransitive",

ICSharpCode.ILSpyX/packages.lock.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,9 @@
3838
},
3939
"System.Reflection.Metadata": {
4040
"type": "Direct",
41-
"requested": "[9.0.4, )",
42-
"resolved": "9.0.4",
43-
"contentHash": "qeJNsMmZPc/Lieg0Md+D4F6LoLcxV3b9QsUNmBRXc2ZVOkMbAcwuO9l2jbQFv3n+fLiHJilN8v6i5aJNivjrCQ=="
41+
"requested": "[10.0.0-preview.3.25171.5, )",
42+
"resolved": "10.0.0-preview.3.25171.5",
43+
"contentHash": "+vmMtMSXPQTYqaHoLgWcd39Pwb7yGD4sCewmvVrdNzziRCBxjf6/DK8XCWzELxNsLhOmViZ4LIIr+uPa6K5pRw=="
4444
},
4545
"System.Runtime.CompilerServices.Unsafe": {
4646
"type": "Direct",
@@ -73,7 +73,7 @@
7373
},
7474
"System.Collections.Immutable": {
7575
"type": "CentralTransitive",
76-
"requested": "[9.0.4, )",
76+
"requested": "[10.0.0-preview.3.25171.5, )",
7777
"resolved": "6.0.0",
7878
"contentHash": "l4zZJ1WU2hqpQQHXz1rvC3etVZN+2DLmQMO79FhOTZHMn8tDRr+WU287sbomD0BETlmKDn0ygUgVy9k5xkkJdA==",
7979
"dependencies": {

ILSpy.ReadyToRun/ReadyToRunLanguage.cs

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,15 @@
2020

2121
using System;
2222
using System.Collections.Generic;
23+
using System.Collections.Immutable;
2324
using System.Composition;
2425
using System.Diagnostics;
2526
using System.IO;
2627
using System.Linq;
2728
using System.Reflection.Metadata;
2829
using System.Reflection.PortableExecutable;
2930
using System.Runtime.CompilerServices;
31+
using System.Runtime.InteropServices;
3032

3133
using ICSharpCode.AvalonEdit.Highlighting;
3234
using ICSharpCode.Decompiler;
@@ -240,23 +242,35 @@ private ReadyToRunReaderCacheEntry GetReader(LoadedAssembly assembly, MetadataFi
240242
result = new ReadyToRunReaderCacheEntry();
241243
try
242244
{
243-
if (file is not PEFile module)
245+
if ((file is not PEFile module) || (module.Reader == null))
244246
{
245247
result.readyToRunReader = null;
246248
result.failureReason = "File is not a valid PE file.";
247249
}
248250
else
249251
{
250-
result.readyToRunReader = new ReadyToRunReader(new ReadyToRunAssemblyResolver(assembly), new StandaloneAssemblyMetadata(module.Reader), module.Reader, module.FileName);
252+
ReadOnlyMemory<byte> content = module.Reader.GetEntireImage().GetContent().AsMemory();
253+
result.readyToRunReader = new ReadyToRunReader(new ReadyToRunAssemblyResolver(assembly), new StandaloneAssemblyMetadata(module.Reader), module.Reader, module.FileName, content);
251254
if (result.readyToRunReader.Machine != Machine.Amd64 && result.readyToRunReader.Machine != Machine.I386)
252255
{
253256
result.failureReason = $"Architecture {result.readyToRunReader.Machine} is not currently supported.";
254257
result.readyToRunReader = null;
255258
}
256259
else if (result.readyToRunReader.OwnerCompositeExecutable != null)
257260
{
258-
string compositePath = Path.Combine(Path.GetDirectoryName(module.FileName), result.readyToRunReader.OwnerCompositeExecutable);
259-
result.compositeReadyToRunReader = new ReadyToRunReader(new ReadyToRunAssemblyResolver(assembly), compositePath);
261+
string compositeModuleName = Path.GetFileNameWithoutExtension(result.readyToRunReader.OwnerCompositeExecutable);
262+
PEFile compositeFile = assembly.GetAssemblyResolver().ResolveModule(assembly.GetMetadataFileOrNull(), compositeModuleName) as PEFile;
263+
if (compositeFile == null)
264+
{
265+
result.readyToRunReader = null;
266+
result.failureReason = "Composite File is not a valid PE file.";
267+
}
268+
else
269+
{
270+
ReadOnlyMemory<byte> compositeContent = compositeFile.Reader.GetEntireImage().GetContent().AsMemory();
271+
result.compositeReadyToRunReader = new ReadyToRunReader(new ReadyToRunAssemblyResolver(assembly), compositeModuleName, compositeContent);
272+
}
273+
260274
}
261275
}
262276
}
@@ -288,7 +302,7 @@ public IAssemblyMetadata FindAssembly(MetadataReader metadataReader, AssemblyRef
288302

289303
public IAssemblyMetadata FindAssembly(string simpleName, string parentFile)
290304
{
291-
return GetAssemblyMetadata(assemblyResolver.ResolveModule(loadedAssembly.GetMetadataFileOrNull(), simpleName + ".dll"));
305+
return GetAssemblyMetadata(assemblyResolver.ResolveModule(loadedAssembly.GetMetadataFileOrNull(), simpleName));
292306
}
293307

294308
private IAssemblyMetadata GetAssemblyMetadata(MetadataFile module)

NuGet.config

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,15 @@
55
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
66
<add key="dotnet-tools" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet-tools/nuget/v3/index.json" />
77
<add key="dotnet9-transport" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet9-transport/nuget/v3/index.json" />
8+
<add key="dotnet10-transport" value="https://pkgs.dev.azure.com/dnceng/public/_packaging/dotnet10-transport/nuget/v3/index.json" />
89
</packageSources>
910
<packageSourceMapping>
1011
<packageSource key="nuget.org">
1112
<package pattern="*" />
1213
<package pattern="Microsoft.DiaSymReader.Native" />
1314
<package pattern="Microsoft.DiaSymReader" />
1415
</packageSource>
15-
<packageSource key="dotnet9-transport">
16+
<packageSource key="dotnet10-transport">
1617
<package pattern="ILCompiler.Reflection.ReadyToRun.Experimental" />
1718
</packageSource>
1819
<packageSource key="dotnet-tools">

0 commit comments

Comments
 (0)