Forums Neueste Beiträge
 

PrivateImplementationDetails: nach Reflector/Disassemblieren aufrufen/reassemblieren

21/06/2009 - 23:00 von Andreas Wenke | Report spam
Hallo!

Ich schaue mir diverse .net EXEs und DLLs an, indem ich den reflector
von Lutz Roeder nutze. Dabei bin ich bei einigen Assemblies auf
<PrivateImplementationDetails> Klassen gestoßen. Natürlich habe ich
dazu recherchiert, worum es sich handelt. (vom Compiler generierte
Hilfsklassen)

Mein Problem ist, dass ich die disassemblierten Klassen nicht
kompilieren kann, weil immer wieder eine Methode aus dieser privaten
Klasse aufgerufen wird, oder sonstwie eine Referenz besteht. Was kann
ich machen, um einen solchen Aufruf einer Methode im Code
zurechtzubiegen? (z.B. <PrivateImplementationDetails>{XXXYYYZZ-AAAA-
BBBB-CCCC-DDDDEEEEFFFF}.$$method0x000032f-1.TryGetValue(name, out
num))

Die Frage geht von der Annahme aus, dass das überhaupt geht.
Vielleicht habe ich das mit "PrivateImplementationDetails" nicht
richtig verstanden, abre deswegen frage ich mal hier.

Danke für ne Antwort! Andi
 

Lesen sie die antworten

#1 Andreas Wenke
21/06/2009 - 23:33 | Warnen spam
Zu meiner Frage ... ich habe nochmals recherchiert und den
disassemblierten Quellcode angeschaut. An den paar Stellen, an denen
eine "PrivateImplementationDetails"-Methode aufgerufen wird, handelt
es sich um eine "umgestaltete Switch-Anweisung", bei der der zu
untersuchende Wert ursprünglich ein _String_ war!

Der Compiler baut so ein Switch um und verwendert anstelle ein
Dictionary<string, int>, um nicht dauenrd String Compares zu machen.
Die Methode liefert dann ein integer zurück, womit ein switch auf
dieses int gemacht wird.

Damit - so vermute ich - kann ich diesen Call auf eine
PrivateImplementationDetails-Methode/Klasse gar nicht auflösen, außer
ich errate/??? die möglichen Werte der Abfrage und baue die Switch-
Logik auf den String von Hand nach.

Ähnliche fragen