Здравствуйте, Serginio1, Вы писали:
V>>Рефлексия нужна, но она будет использоваться ниже по стеку, когда this уже невиден.
S> Ты лучше объясни, что тебе надо.
Я вот
тут вкрадцеАвтор: drVanо
Дата: 18.03.24
уже объяснил что нужно.
S>Если ты хочешь сайд эффект, то моё мнение проще копировать. То есть боксить к объекту изменять свойства и копировать в this
Спасибо, я уже тоже пришел к такому выводу.
Здравствуйте, drVanо, Вы писали:
V>Почти угадали. Мы занимаемся разработкой продукта, который позволяет "вируализировать" CIL команды и выполнять их на собственном интерпретаторе. Поэтому есть проблема с передачей ref аргументов (в том числе и this у ValueType) в унифицированном виде. Сейчас это выглядит так:
V>V>public void Move(int a, int b)
V>{
V> object[] array = new object[]
V> {
V> this,
V> a,
V> b
V> };
V> try
V> {
V> new VirtualMachine().Invoke(array, 10809);
V> }
V> finally
V> {
V> this = (Program.Point)array[0];
V> }
V>}
V>
А код этого Move кто пишет — вы? Автомат, который подменяет оригинальный код Move на вот такой, только автосгенерированный?
Как VirtualMachine понимает, что ей нужно сделать с этим array в ответ на Opcode 10809?
Здравствуйте, Sinclair, Вы писали:
S>А код этого Move кто пишет — вы?
В процессе обфускации тела метода CIL команды виртуализируются (преобразуется в команды с отличной от CIL архитектурой), а его тело заменяется на вызов виртуальной машины.
S>Автомат, который подменяет оригинальный код Move на вот такой, только автосгенерированный?
S>Как VirtualMachine понимает, что ей нужно сделать с этим array в ответ на Opcode 10809?
В данном случае 10809 — это "указатель" на пикод для ВМ. Если вам интересно пощупать это дело, то демку можно скачать
здесь.
Здравствуйте, drVanо, Вы писали:
V>В данном случае 10809 — это "указатель" на пикод для ВМ. Если вам интересно пощупать это дело, то демку можно скачать здесь.
Если честно, то выбранный вами способ выглядит наиболее вменяемым:
1. Просто боксим все ValueType объекты, чтобы можно было их передать в VM в единообразном виде через массив object.
2. Для ref- и out- параметров, после возврата из VM присваиваем значения обратно туда, откуда взяли на шаге 1.
Это неэффективно, но надёжно и предсказуемо.
Всякие манипуляции со взятием указателей и т.п. трудно сделать безопасным образом, и ещё труднее сделать это обобщённо для value- и reference-типов.
Здравствуйте, drVanо, Вы писали:
V>Здравствуйте, Serginio1, Вы писали:
V>>>Рефлексия нужна, но она будет использоваться ниже по стеку, когда this уже невиден.
S>> Ты лучше объясни, что тебе надо.
V>Я вот тут вкрадцеАвтор: drVanо
Дата: 18.03.24
уже объяснил что нужно.
Я кстати в свое время извращался
.Net Core, AppDomain, WCF, RPC маршалинг по Tcp/Ip свой велосипед