Е, в .NET 4 Microsoft добави атрибута HandleProcessCorruptedStateExceptions:
HandleProcessCorruptedStateExceptionsAttribute Class
Искам да тествам тази функция. Как мога да доведа приложението си до „повредено състояние“?
Е, в .NET 4 Microsoft добави атрибута HandleProcessCorruptedStateExceptions:
HandleProcessCorruptedStateExceptionsAttribute Class
Искам да тествам тази функция. Как мога да доведа приложението си до „повредено състояние“?
Прецакването на купчината боклук винаги е добър начин:
using System;
using System.Runtime.InteropServices;
class Program {
unsafe static void Main(string[] args) {
var obj = new byte[1];
var pin = GCHandle.Alloc(obj, GCHandleType.Pinned);
byte* p = (byte*)pin.AddrOfPinnedObject();
for (int ix = 0; ix < 256; ++ix) *p-- = 0;
GC.Collect(); // kaboom
}
}
Просто дереферирайте произволно число:
private static unsafe void AccessViolation()
{
byte b = *(byte*) (8762765876);
}
или препълване на стека:
private static void StackOverflow()
{
StackOverflow();
}
Тествайте функцията HandleProcessCorruptedStateExceptions
:
using System.Diagnostics;
using System.Runtime.ExceptionServices;
using System.Runtime.InteropServices;
...
[HandleProcessCorruptedStateExceptions]
public void HandleCorruptedStateException()
{
try
{
var ptr = new IntPtr(42);
Marshal.StructureToPtr(42, ptr, true);
}
catch(Exception ex)
{
Debug.WriteLine(ex.Message);
}
}