Информация об изменениях

Сообщение Запуск нейтивного ассемблера из C# на лету от 31.01.2022 5:08

Изменено 31.01.2022 5:10 Shmj

Запуск нейтивного ассемблера из C# на лету
Интересная, оказывается, есть возможность почти прямо из коробки.

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

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

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


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

Пример: 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