Запуск нейтивного ассемблера из C# на лету
От: Shmj Ниоткуда  
Дата: 31.01.22 05:08
Оценка: 83 (7) -1 :)
Интересная, оказывается, есть возможность почти прямо из коробки.

Пример: https://github.com/WhiteBlackGoose/AsmToDelegate

С помощью https://github.com/icedland/iced из ассемблерных инструкций делается массив байт машинных инструкций — внутри C# проекта прямо. На лету. Получается просто массив двоичных данных. Потом этот массив записывается в память и с помощью такой магии:

(delegate* unmanaged[Cdecl]<TIn1, TIn2, TIn3, TOut>)s.Pointer;


— получаем делегат. Если этот делегат дернуть — то исполнятся машинные инструкции, которые вы сформировали в рантайме

P.S.
А вот из C++ x64 теперь нельзя вызвать __asm инструкцию — MS данную возможность отключила: https://rsdn.org/forum/cpp/4585123.all
Автор: SWW
Дата: 21.01.12
Отредактировано 31.01.2022 5:10 Shmj . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.