提交 7a09beae 编写于 作者: A AlekseyTs

Strengthen MetadataVisualizer against crashing due to bad metadata in PE.

上级 5546c6a9
......@@ -187,36 +187,43 @@ private unsafe void VisualizeGenerations(List<GenerationData> generations)
private static unsafe void VisualizeGenerationIL(MetadataVisualizer visualizer, int generationIndex, GenerationData generation, MetadataReader mdReader)
{
if (generation.PEReaderOpt != null)
try
{
foreach (var methodHandle in mdReader.MethodDefinitions)
if (generation.PEReaderOpt != null)
{
var method = mdReader.GetMethodDefinition(methodHandle);
var rva = method.RelativeVirtualAddress;
if (rva != 0)
foreach (var methodHandle in mdReader.MethodDefinitions)
{
var body = generation.PEReaderOpt.GetMethodBody(rva);
visualizer.VisualizeMethodBody(body, methodHandle);
var method = mdReader.GetMethodDefinition(methodHandle);
var rva = method.RelativeVirtualAddress;
if (rva != 0)
{
var body = generation.PEReaderOpt.GetMethodBody(rva);
visualizer.VisualizeMethodBody(body, methodHandle);
}
}
}
}
else if (generation.DeltaILOpt != null)
{
fixed (byte* deltaILPtr = generation.DeltaILOpt)
else if (generation.DeltaILOpt != null)
{
foreach (var generationHandle in mdReader.MethodDefinitions)
fixed (byte* deltaILPtr = generation.DeltaILOpt)
{
var method = mdReader.GetMethodDefinition(generationHandle);
var rva = method.RelativeVirtualAddress;
if (rva != 0)
foreach (var generationHandle in mdReader.MethodDefinitions)
{
var body = MethodBodyBlock.Create(new BlobReader(deltaILPtr + rva, generation.DeltaILOpt.Length - rva));
visualizer.VisualizeMethodBody(body, generationHandle, generationIndex);
var method = mdReader.GetMethodDefinition(generationHandle);
var rva = method.RelativeVirtualAddress;
if (rva != 0)
{
var body = MethodBodyBlock.Create(new BlobReader(deltaILPtr + rva, generation.DeltaILOpt.Length - rva));
visualizer.VisualizeMethodBody(body, generationHandle, generationIndex);
}
}
}
}
}
catch (BadImageFormatException)
{
visualizer.WriteLine("<bad metadata>");
}
}
private static readonly string[] s_PEExtensions = new[] { "*.dll", "*.exe", "*.netmodule", "*.winmd" };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册