Я видел, как говорилось, что декомпиляция запутанного C# и Java упрощается за счет наличия вызовов API фреймворка, например String. Но для меня это не совсем имеет смысл, потому что не должна ли программа на C также иметь очевидные вызовы некоторых стандартных библиотек, которые были бы эквивалентны API C#?
Я также видел, как говорилось, что каким-то образом различие между регистровой машиной (аппаратное обеспечение, которое будет запускать сборку из C) и стековой машиной (виртуальная машина, которая будет запускать байт-код) важно для сложности декомпиляции.
Так является ли здесь главной проблемой машины стека/регистра? Скажем, если бы виртуальная машина CLR была повторно реализована как регистровая машина, стал бы вдруг байт-код C# так же трудно декомпилировать, как исполняемый файл C? Или есть какие-то другие существенные различия в сложности, которые не исчезнут при таком капитальном ремонте платформы?