En utilisant sos, je peux obtenir la liste d'entrée de table de méthode pour une classe particulière:Comment faire correspondre une entrée de table de méthode CLR avec MethodDesc?
!DumpMT -MD 1d3c58 PDB symbol for mscorwks.dll not loaded EEClass: 001d195c Module: 001d2f2c Name: Class1.B mdToken: 02000005 BaseSize: 0xc ComponentSize: 0x0 Number of IFaces in IFaceMap: 0 Slots in VTable: 7 -------------------------------------- MethodDesc Table Entry MethodDesc JIT Name 691f6a90 69071248 PreJIT System.Object.ToString() 691f6ab0 69071250 PreJIT System.Object.Equals(System.Object) 691f6b20 69071280 PreJIT System.Object.GetHashCode() 692674c0 690712a4 PreJIT System.Object.Finalize() 001dc088 001d3c34 NONE Class1.B.M() 001dc090 001d3c40 NONE Class1.B.N() 001dc098 001d3c4c JIT Class1.B..ctor()
Mais je ne peux pas comprendre comment sos peut correspondre à une entrée de la table avec un MethodDesc
- ayant un coup de coude autour de la méthode La table en mémoire ne donne que les valeurs d'entrée, qui pointent vers le talon JIT. Je ne peux pas comprendre comment vous pouvez obtenir les MethodDesc
à partir de là. Quelqu'un a des idées?
Je veux le faire dans un code dangereux dans son propre espace de processus, n'utilisant pas sos dans une session de débogage – thecoop
Avez-vous l'intention d'héberger CLR? Je ne vous parle pas de "code dangereux et de propre espace de processus". Le CLR peut être démonté dans le débogueur. – Naveen
Mon arrière-pensée est d'obtenir un type pour manipuler ses propres vtables de code dangereux. Ce qui est stocké dans les tables de méthodes de type est l'adresse du talon JIT, et je dois lier ceux jusqu'à l'adresse de la méthode (obtenue par un pointeur de méthode d'un délégué de la méthode) pointant vers, donc je peux le changer à autre chose. Je sais que c'est extrêmement diabolique, mais bon :) – thecoop