Je clone des Types via System.Reflection.Emit.
Cela marche très bien pour à peu près n'importe quoi, sauf, apparemment, pour les méthodes qui retournent des valeurs.
Voici le code MSIL original :
Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 public class TestClass { public string Text() { return "texte"; } }
Et voici le code généré...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 0000 : nop 0001 : ldstr "texte" 0006 : stloc.0 0007 : br.s 0009 0009 : ldloc.0 000a : ret
A noter que je copie instruction par instruction, et qu'à priori, les instructions copiées sont correctes (j'ai vérifié avec une exécution pas-à-pas du programme de copie).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 0000 : nop 0001 : ldstr "texte" 0006 : stloc.0 0007 : br.s 0012 0009 : nop 000a : nop 000b : nop 000c : ldloc.0 000d : ret
Comment expliquer ces 3 nop supplémentaires et le décalage de 9 octets dans l'opérande du br.s ?
Partager