На C# написать интерпретатор, который с помощью рефлексии достаёт байт-код и интерпретирует его.
Интерпритатор достаёт байт-код произвольной программы под CLI. Либо с помощью таких библиотек как Mono.Cecil, либо с помощью встроенных средств рефлексии среды, на которой выполняется. Пример последнего может выглядеть например так: typeof(Program).GetMethods()[0].GetMethodBody().GetILAsByteArray(). Получив байт-код - последовательно интерпретировать закодированные в нём инструкции.