MSIL et chargement d'argument

Signaler
Messages postés
495
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
9 novembre 2007
-
Messages postés
495
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
9 novembre 2007
-
.method private hidebysig instance void Trucage(class Mouarf.IMangousteAQuatreCuls mangouste) cil managed
{
// Code size 9 (0x9)
.maxstack 8
IL_0000: nop
IL_0001: ldarg.1
IL_0002: callvirt instance void TestReflectPerf.IMangousteAQuatreCuls::Action()
IL_0007: nop
IL_0008: ret
} // end of method A::Trucage

si quelqu'un sait pourquoi la decompilation de ma methode me donne ca, ou est l'argument 1 ???

en fait je viens de faire un test avec ldarg.3 et ca fonctionne aussi :S
si quelqu'un sait pourquoi, j'aimerais savoir

merci d'avance :)

3 réponses

Messages postés
495
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
9 novembre 2007
1
peut-etre plus claire comme ca, l'avatare ne gene plus


.method private hidebysig instance void Trucage(class Mouarf.IMangousteAQuatreCuls mangouste) cil managed
{
// Code size 9 (0x9)
.maxstack 8
IL_0000: nop
IL_0001: ldarg.1
IL_0002: callvirt instance void TestReflectPerf.IMangousteAQuatreCuls::Action()
IL_0007: nop
IL_0008: ret
} // end of method A::Trucage

si quelqu'un sait pourquoi la decompilation de ma methode me donne ca, ou est l'argument 1 ???

en fait je viens de faire un test avec ldarg.3 et ca fonctionne aussi :S
si quelqu'un sait pourquoi, j'aimerais savoir

merci d'avance :)
Messages postés
2368
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
20
L'argument 1 est Mouarf.IMangousteAQuatreCuls mangouste. Si il y avait ldarg.0 tu aurais charger ton objet courant (classe).

Les arguments commencent à 1 pour les méthodes d'instances. Les instructions LD chargent sur la pile.

La tu charges quelquechose que tu n'utilises apparemment pas ,(mangouste).

Quand tu ldarg.3, il doit probablement charger null sur ta pile et comme de toute manière tu ne t'en sers pas , ton programme marche.

Mais je ne suis pas expert MSIL.

::|The S@ib|::
MVP C#.NET
Messages postés
495
Date d'inscription
dimanche 6 juillet 2003
Statut
Membre
Dernière intervention
9 novembre 2007
1
biensure que si je m'en sert, se que je charge sur la pile sert pour l'appel de la fonction action

la fonction Action contient un appel a une MessageBox, et cette messagebox est bien appeler, meme si je met Ldarg.3, c'est ca qui est louche.

IL_0001: ldarg.1 // <-- ici est charger mon parametre pour l'appel de la ligne du dessous
IL_0002: callvirt instance void TestReflectPerf.IMangousteAQuatreCuls::Action()

effecticvement, apres une bonne dose de tests, et certains tutoriaux, il semble que l'argument 0 soit bien le this (pour une method non static).

cependant le code que j'ai copier coller fonctionne aussi avec Ldarg.0...

bref, c'est louche, mais au moins j'ai ma reponse, merci tout de meme pour ta participation, et ta confirmation, qui m'eclaire d'avantage :)