Skip to content

Instantly share code, notes, and snippets.

@nguerrera
Created December 5, 2015 18:59
Show Gist options
  • Save nguerrera/72444715c7ea0b40addb to your computer and use it in GitHub Desktop.
Save nguerrera/72444715c7ea0b40addb to your computer and use it in GitHub Desktop.
GetMethodBodyViaSRM
/*
"dependencies": {
"System.Console": "4.0.0-beta-23516",
"System.IO.FileSystem": "4.0.1-beta-23516",
"System.Reflection": "4.1.0-beta-23516",
"System.Reflection.Metadata": "1.1.0",
"System.Reflection.TypeExtensions": "4.1.0-beta-23516"
}
*/
using System.IO;
using System.Reflection;
using System.Reflection.Metadata;
using System.Reflection.Metadata.Ecma335;
using System.Reflection.PortableExecutable;
public class Program
{
public static void Main(string[] args)
{
var typeInfo = typeof(Program).GetTypeInfo();
var methodInfo = typeInfo.GetDeclaredMethod("Main");
var metadataToken = methodInfo.GetMetadataToken();
using (var stream = File.OpenRead(typeInfo.Assembly.Location)) // Issue: Location is empty on DNX
using (var peReader = new PEReader(stream))
{
var metadataReader = peReader.GetMetadataReader();
var methodHandle = MetadataTokens.MethodDefinitionHandle(metadataToken);
var methodDef = metadataReader.GetMethodDefinition(methodHandle);
var methodBody = peReader.GetMethodBody(methodDef.RelativeVirtualAddress);
// ..
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment