是否可以在运行时使用单嵌入API修改方法主体。有没有办法访问方法的主体和签名。我知道这有点复杂,但是我确实需要在学校项目中使用它。
我能够使用.Net框架做到这一点。我发现.Net框架可以解析托管代码中的所有方法,并且有一个名为SetmethodIL的外部方法,我必须使用反射实现来调用它,并且它起作用了,但是mono采用了不同的方法。 Mono采用非托管代码选择,该代码选择调用名为create_runtime_class的外部方法来完成工作。
感谢您的支持。
答案 0 :(得分:0)
通过检查reflection_methodbuilder_to_mono_method方法,我发现MonoMethod必须具有包含有关该方法的信息的MonoMethodHeader。
在第3014行,您将看到他们如何通过将数组地址作为guint8传递来设置方法的代码。 据我所知,代码包含CIL指令,它是字节数组。
通过使用名为mono_method_get_header的方法,您将能够获取任何方法的标头,并且通过使用上述技术,您将能够修改代码。但是我不确定这是否行得通,它可能仅适用于动态生成的方法。
如果您使用c的字节数组参数调用内部调用,也许我们可以正确解决。