in src/BinSkim.Driver/DumpCommand.cs [48:131]
private void DumpFile(string target, bool verbose)
{
PE pe;
var sb = new StringBuilder();
try
{
pe = new PE(target);
}
catch (UnauthorizedAccessException)
{
Console.WriteLine(Path.GetFileName(target) + ": Unauthorized access exception");
return;
}
sb.AppendLine(Path.GetFileName(pe.FileName) + ":");
if (verbose)
{
sb.AppendLine(Indent + "Path: " + pe.FileName);
}
sb.Append(Indent + "Attr: ");
if (!pe.IsPEFile)
{
sb.AppendLine("Not a portable executable");
sb.AppendLine();
return;
}
string language = pe.IsManaged ? "Pure Managed" : "Native";
if (pe.IsManaged && !pe.IsILOnly) { language = "Mixed Managed"; }
sb.Append(language);
string machine = pe.Machine.ToString();
sb.Append(Delimiter + machine);
string subsystem = pe.Subsystem.ToString();
sb.Append(Delimiter + subsystem);
if (pe.IsKernelMode)
{
sb.Append(Delimiter + "Kernel Mode");
}
if (pe.IsResourceOnly)
{
sb.Append(Delimiter + "Resource Only");
}
sb.Append(Delimiter + "Link " + pe.LinkerVersion.ToString());
sb.AppendLine(); // Close comma-separated attributes line
sb.Append(Indent + "Pdb : ");
Pdb pdb = null;
try
{
string extension = Path.GetExtension(pe.FileName);
pdb = extension.Equals(".pdb", StringComparison.OrdinalIgnoreCase)
? new Pdb(pe.FileName, false)
: new Pdb(pe.FileName, null, null, false);
}
catch (PdbException pdbParseException)
{
sb.AppendLine(pdbParseException.ExceptionDisplayMessage);
}
if (pdb != null)
{
if (verbose)
{
sb.AppendLine(pdb.PdbLocation);
}
else
{
sb.AppendLine(Path.GetFileName(pdb.PdbLocation));
}
}
sb.AppendLine(Indent + "SHA1: " + pe.SHA1Hash);
Console.Out.WriteLineAsync(sb.ToString());
}