Насколько я понимаю, суть фразы можно свести к "В полностью управляемом коде AccessViolationException быть не может."In programs consisting entirely of verifiable managed code, all references are either valid or null, and access violations are impossible. An AccessViolationException occurs only when verifiable managed code interacts with unmanaged code or with unsafe managed code.
Однако вот такой код является и verifiable и managed и safe, но тем не менее вызывает обозначенный exception.
- Код: Выделить всё
.assembly ILT
{
}
.class ILT
{
.method public static void Main() cil managed
{
.entrypoint
ldftn void ILT::Main()
call void [mscorlib]System.Console::WriteLine(string)
ret
}
}
А функция System.Console::WriteLine(string) в свою очередь интерпретирует содержимое ecx как указатель на строку.
Что непонятно, так это ПОЧЕМУ этот код не вызывает никаких ошибок при проверке на целостность. Это какоето нарушение концепции, разве нет?