/usr/share/cli-common/ildasm-monodis is in cli-common-dev 0.9.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | #!/usr/bin/perl
#
# Setup
#
# Directives
use strict;
use warnings;
# Modules
use Getopt::Long;
#
# Variables
#
# Filenames
my $assemblyref;
# Get the mode
GetOptions(
"assemblyref!" => \$assemblyref,
);
# Get the filenames
my $dll_filename = shift;
usage() if (!defined $dll_filename);
# Figure out what to do
if ($assemblyref)
{
parse_assemblyref($dll_filename);
}
else
{
# As per meeby, do assemblyref
parse_assemblyref($dll_filename);
}
#
# Create a pipe to the 'ildasm' program and give it the given
# DLL. Then, take the results, parse them, and write it out to stdout.
#
sub parse_assemblyref
{
# Get the parameters
my $dll_filename = shift;
# Open the pipe
open PIPE, "/usr/bin/ildasm $dll_filename |"
or die "Cannot open /usr/bin/ildasm $dll_filename ($!)";
# Print out the header
print "AssemblyRef Table\n";
# Go through the results
my $count = 0;
while (<PIPE>)
{
# Clean up the line
chomp;
# Check for assembly ref
if (/^\.assembly extern (.*?)$/)
{
# We have an assembly reference
my $name = $1;
my $version = undef;
my $key = "\tZero sized public key";
$count++;
# On occasion, the name has quotes around it, but monodis
# doesn't.
$name =~ s/\'//g;
$name =~ s/\"//g;
# Go through and parse the rest of the variables until we
# get to a } which signals the end of the block.
while (<PIPE>)
{
# Stop if we get a }
last if /^\}/;
s/^\s+//;
# Check for the keys
if (/\.ver (\d+):(\d+):(\d+):(\d+)/)
{
# Make it look like mono
$version = "$1.$2.$3.$4";
next;
}
# Check for public key
if (/\.publickeytoken = \((.*?)\)/)
{
# Monodis adds a space at the end of this next line
$key = "\tPublic Key:\n0x00000000: $1 ";
}
}
# Emit it
print join("\n",
"$count: Version=$version",
"\tName=$name",
$key,
), "\n";
}
}
# Mono also has an extra space at the end
print "\n";
# Close the pipe
close PIPE;
}
#
# Usage. Just your typical complain function that automatically exits
# out of perl after complaining.
#
sub usage
{
print STDERR join("\n",
"USAGE: $0 [options] /path/to/something.dll",
"",
"Options:",
sprintf("%-20.20s %s",
"--assemblyref",
"Dumps output like 'monodis --assemblyref'"),
), "\n";
exit 1;
}
|