J
nurf schrieb:
template pointer schrieb:
Das Problem ist mir bekannt, nur kenne ich die Lösung nicht. Das einzigste was mir einfallen würde wäre, über GetProcAddres, aber muss doch auch ohne gehen.
Also ihr wollt einen Class::*member umwandeln in einen int?
Das geht meines Wissens nach nur mit einem Union.
Ich will mit dem Pointer auf die Member-Function zuerst die Funktion Detouren (um etwas aus dem ersten Parameter der Funktion einen Wert zu extrahieren (könnte man auch mit Mid-Funktions-Hooking machen, wodurch das ganze kack casten, womit ich nur Probleme habe, wegfallen würde, nur wäre es dann noch komplizierter mit Adressen und Patch-Code)) und anschließend so aufrufen, dass ich das ich mit einem __cdecl-Call (indem ich den Pointer eines Objekts in ecx über inline-assembler ablege) von dem Member-Function-Pointer aufrufe.
volkard schrieb:
template pointer schrieb:
Das Problem ist mir bekannt, nur kenne ich die Lösung nicht. Das einzigste was mir einfallen würde wäre, über GetProcAddres, aber muss doch auch ohne gehen.
Muss nicht passen.
Der Memberfunktionszeiger könnte vielleicht sowas sein wie
struct MFZ{
bool virtelleFunktionOderNicht;
void* adresse;//wird nur bei nichtvirtuellen genommen
int indexInDerVtbl;//wird immer bei virtuellen genummen
size_t offsetVomVprtZuThis;//Vptr stehe mal am Anfang der des Basisklassenobjekts
//wird's bei mehrfacher Erblichkeit noch schlimmer?
};
Ich würde nicht erwarten, daß in einen int reindrücken und später wieder extrahieren zu können.
Irgendwo habe ich das schon mal gesehen, CodeProjekt oder so, wo es ein Tut gibt, wie man eine Memberfunktion über GetProcAddress aufruft.
Ich habe schon versucht den Pointer nochmal zu dereferenzieren^^. Aber an die V-Table müsste ich ja kommen.
Die Theorie kling so einfach, aber der Compiler machts einem einfach so verdammt schwer an die kack Adresse zu kommen, ich verstehe nicht ganz wieso, da ich ja ganz explizit sagen kann, welche Funktion ich will und die Funktion liegt ja auch irgendwo im Speicher...