Re[8]: Передать this в виде object
От: drVanо Россия https://vmpsoft.com
Дата: 18.03.24 12:16
Оценка: +1
Здравствуйте, Serginio1, Вы писали:

V>>Рефлексия нужна, но она будет использоваться ниже по стеку, когда this уже невиден.

S> Ты лучше объясни, что тебе надо.

Я вот тут вкрадце
Автор: drVanо
Дата: 18.03 14:50
уже объяснил что нужно.

S>Если ты хочешь сайд эффект, то моё мнение проще копировать. То есть боксить к объекту изменять свойства и копировать в this


Спасибо, я уже тоже пришел к такому выводу.
Re[6]: Передать this в виде object
От: Sinclair Россия https://github.com/evilguest/
Дата: 18.03.24 15:20
Оценка:
Здравствуйте, 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?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[7]: Передать this в виде object
От: drVanо Россия https://vmpsoft.com
Дата: 18.03.24 16:50
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>А код этого Move кто пишет — вы?


В процессе обфускации тела метода CIL команды виртуализируются (преобразуется в команды с отличной от CIL архитектурой), а его тело заменяется на вызов виртуальной машины.

S>Автомат, который подменяет оригинальный код Move на вот такой, только автосгенерированный?

S>Как VirtualMachine понимает, что ей нужно сделать с этим array в ответ на Opcode 10809?

В данном случае 10809 — это "указатель" на пикод для ВМ. Если вам интересно пощупать это дело, то демку можно скачать здесь.
Отредактировано 18.03.2024 16:55 drVanо . Предыдущая версия .
Re[8]: Передать this в виде object
От: Sinclair Россия https://github.com/evilguest/
Дата: 19.03.24 07:18
Оценка:
Здравствуйте, drVanо, Вы писали:
V>В данном случае 10809 — это "указатель" на пикод для ВМ. Если вам интересно пощупать это дело, то демку можно скачать здесь.
Если честно, то выбранный вами способ выглядит наиболее вменяемым:
1. Просто боксим все ValueType объекты, чтобы можно было их передать в VM в единообразном виде через массив object.
2. Для ref- и out- параметров, после возврата из VM присваиваем значения обратно туда, откуда взяли на шаге 1.

Это неэффективно, но надёжно и предсказуемо.
Всякие манипуляции со взятием указателей и т.п. трудно сделать безопасным образом, и ещё труднее сделать это обобщённо для value- и reference-типов.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[9]: Передать this в виде object
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 19.03.24 15:14
Оценка:
Здравствуйте, drVanо, Вы писали:

V>Здравствуйте, Serginio1, Вы писали:


V>>>Рефлексия нужна, но она будет использоваться ниже по стеку, когда this уже невиден.

S>> Ты лучше объясни, что тебе надо.

V>Я вот тут вкрадце
Автор: drVanо
Дата: 18.03 14:50
уже объяснил что нужно.


Я кстати в свое время извращался
.Net Core, AppDomain, WCF, RPC маршалинг по Tcp/Ip свой велосипед
и солнце б утром не вставало, когда бы не было меня
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.