Je suis tombé, par hasard sur quelque chose d'un peu intéréssant :
si j'ai une structure comme celle ci :
Si l'on marshalle cette structure, les string ne sont pas enregistrés.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 [StructLayout(LayoutKind.Sequential)] struct DateOfBirth2 { //Normalement, il faudrait utiliser MarshalAs... public string Day; public string Mounth; public int Year; }
Mais ce sont les addresse des valeurs qui le sont, et celà fait que si on
s'arrange bien on peut même corrompre le CLR en cours d'éxécution.
L'endroit où j'avais utilisé cette structure à provoqué un crash de
l'application, crash non déboggable (puisque c'est le kernel qui se plante)
et donc difficile à identifier.
N'y a-t-il pas une sécurité dans .NET qui empêche ce genre de surprises ?
PS:
Dans mon cas j'avais fait encore mieux, car la classe chargée de
marshaller la valeur était générique, et apparament j'ai permis de
contourner la limitation de sizeof
Partager