Mono在运行时嵌入API修改方法体

问题描述 投票:1回答:1

是否可以使用mono embed API在运行时修改方法体。是否有办法访问方法的正文和签名。我知道它有点复杂,但我真的需要它用于学校项目。

我能够用.Net框架做到这一点。我发现.Net框架解析了托管代码中的所有方法,并且有一个名为SetmethodIL的外部方法,我必须使用refelection调用它并且它工作但是mono采用不同的路径。 Mono采用非托管代码选择,调用一个名为create_runtime_class的外部方法来完成工作。

感谢您的支持。

c mono
1个回答
0
投票

我通过检查reflection_methodbuilder_to_mono_method方法发现MonoMethod必须有一个MonoMethodHeader,其中包含有关该方法的信息。

在第3014行,您将看到他们如何通过将数组地址作为guint8传递来设置方法的代码。据我所知,代码包含CIL指令,它是一个字节数组。

通过使用名为mono_method_get_header的方法,您将能够获得任何方法的标头,并通过使用上面的技术,您将能够修改代码。但我不确定这是否会起作用它可能只适用于动态生成的方法。

如果你使用字节数组参数调用内部调用c也许我们可以正确使用它。

© www.soinside.com 2019 - 2024. All rights reserved.