Моно встраивать тело метода изменения API во время выполнения - PullRequest
1 голос
/ 09 марта 2019

Возможно ли изменить тело метода во время выполнения, используя моно-API для встраивания. Есть ли способ получить доступ к телу и подписи метода. Я знаю, что это немного сложно, но мне действительно нужно это для школьного проекта.

Я смог сделать это с помощью .Net Framework. Я обнаружил, что .Net Framework разрешает все методы в управляемом коде, и есть внешний метод с именем SetmethodIL , который мне пришлось вызывать с помощью рефлексии, и он работал, но mono использует другой маршрут. Mono выбирает неуправляемый код, который вызывает внешний метод с именем create_runtime_class , который выполняет работу.

Спасибо за вашу поддержку.

1 Ответ

0 голосов
/ 10 марта 2019

Я выяснил, изучив метод refle_methodbuilder_to_mono_method , что MonoMethod должен иметь MonoMethodHeader, который содержит информацию о методе.

В строке 3014 вы увидите, как они смогли установить код метода, передавая адрес массива как guint8. Насколько я знаю, код содержит инструкции CIL, которые представляют собой массив байтов.

Используя метод mono_method_get_header, вы сможете получить заголовок любого метода, а с помощью описанной выше техники вы сможете изменить код. Но я не уверен, сработает ли это или нет. Это может работать только с динамически генерируемыми методами.

Если вы вызываете внутренний вызов с параметром массива байтов для c Возможно, мы могли бы сделать это правильно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...