- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在寻找一个新手问题,但找不到一个简单的例子。谁能给我一个简单的例子,说明如何将 MethodBody 放入最可用的字符串结果中?喜欢:
using Mono.Cecil;
using Mono.Cecil.Cil;
namespace my
{
public class Main
{
public Main()
{
// phseudo code, but doesnt work
Console.Write( getMethod("HelloWorld").GetMethodBody().ToString() );
}
public void HelloWorld(){
MessageBox.Show("Hiiiiiiiiii");
}
}
}
最佳答案
从阅读您的程序集开始:
var path = "... path to your assembly ...";
var assembly = AssemblyDefinition.ReadAssembly(path);
如果你想打开正在运行的进程,你可以使用 System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName
作为 path
现在获取您要检查的所有类型和方法
var toInspect = assembly.MainModule
.GetTypes()
.SelectMany(t => t.Methods
.Where(m => m.HasBody)
.Select(m => new {t, m}))
如果您已经知道类型和方法名称,您可以像这样修改您的查询:
toInspect = toInspect.Where(x => x.t.Name.EndsWith("Main") && x.m.Name == "HelloWorld");
之后只需遍历该集合:
foreach (var method in toInspect)
{
Console.WriteLine($"\tType = {method.t.Name}\n\t\tMethod = {method.m.Name}");
foreach (var instruction in method.m.Body.Instructions)
Console.WriteLine($"{instruction.OpCode} \"{instruction.Operand}\"");
}
输出将是
Type = Main
Method = HelloWorld
ldstr "Hiiiiiiiiii"
call "System.Windows.Forms.DialogResult System.Windows.Forms.MessageBox::Show(System.String)"
pop ""
ret ""
关于c# - Mono.Cecil - 如何获取方法体的简单示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49923757/
我正在使用 Mono.Cecil 生成一个程序集,该程序集包含一个派生类,该派生类覆盖导入的基类中的特定方法。覆盖方法是一种“隐式”覆盖。问题是我无法弄清楚如何将其指定为覆盖。 我正在使用以下代码来创
我正在使用Mono.Cecil DLL 文件并编写此代码: AssemblyDefinition sourceAssembly = AssemblyFactory.GetAssembly(assemb
我正在尝试从 .NET 类型获取 Mono.Cecil TypeDefinition,但没有成功。 我正在使用这样的代码: var type = typeof(MarkdownMonster.AppC
我正在使用 Cecil 来尝试读取我的属性属性: [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited =
我有以下方法: public void DoSomething() { Console.WriteLine(""); } 我想用 Mono Cecil 修改这段代码。我想在方法中创建自定义类的实例
我想通过 Mono.Cecil 添加一个新方法,它有一个输出参数,比如: private static bool XXXXX(out Int32 a) 我尝试了以下代码来添加此参数 TypeRefer
如何通过名称获取基类方法的 MethodReference? 我试过了 type.BaseType.Resolve().Methods; 如果我将包含基类的 dll 添加到 assemblyresol
我一直在寻找一个新手问题,但找不到一个简单的例子。谁能给我一个简单的例子,说明如何将 MethodBody 放入最可用的字符串结果中?喜欢: using Mono.Cecil; using Mono.
Cecil中有类似Reflection.Emit.DynamicMethod的东西吗?谢谢。 动态方法 编辑: 下面的事情呢? EmitCall(例如 IL.EmitCall(OpCodes.Call
出于某种原因,当我尝试加载一些程序集并对其进行分析时,出现错误 Mono.Cecil.AssemblyResolutionException: Failed to resolve assembly..
我正在使用 Mono.Cecil 编辑我的目标方法的 IL 代码,以便我可以记录该方法的入口点,而无需编辑实际代码。我能够将调用指令插入到可以执行日志记录操作的方法中。但我不知道如何记录我的目标方法的
我正在尝试重写一个属性的 get 方法: get { return dataString; } 到: get { string temp = dataString;
我正在使用 Mono.Cecil 在属性 setter 中注入(inject)一些指令,并且在注入(inject) Brfalse_s 指令时出现奇怪的错误。这是代码,它简短而简单。 private
我正在使用 Mono.Cecil 在自动实现的属性 setter 中注入(inject)一些 IL 代码。问题是,我可以从 TypeDefinition.Fields 对象中获取对它的引用,但是当我注
我遵循了提示 here ,我什至将以下几行放入: var MSILWorker = prop.SetMethod.Body.GetILProcessor(); MSILWorker.Body.Init
任务: 查找所有调用函数 public static void WriteString(int index0, string s, int index1) { Console.WriteLin
我怎样才能像这样转动字符串: "call System.Console.WriteLine" "ldstr \"hello\"" 带操作数的指令? 最佳答案 如果您现在如何使
好吧,这个问题可能看起来很奇怪,但它很简单——我的意思是如果我在反编译代码中有一个“goto”(brtrue 等),比如示例 br IL_0003 call ***** IL_0003: ret 然后
有没有办法在代码中获取str1? [MyAttribute("str1")] class X {} Mono.Cecil.CustomAttribute.Fields 的实例是空的。 最佳答案 在 .
我的项目中的静态构造函数一直存在一些问题。我需要向类型“”添加一个静态构造函数,以便调用我的资源解密方法。 在下面的 gif 中,您会看到我遇到的问题。 我还将包含代码片段。 创建cctor的代码:
我是一名优秀的程序员,十分优秀!