Qt4 'DrawText' Hooking -> wie rufe ich die ORIGINALE DrawText Funktion richtig auf?
-
Hallo,
Ersteinmal: Ich nutze den IAT Hooking Code schon etwas länger, ich glaube also nicht das das Hooken an sich den Fehler hervorbringt.
Wenn ich jetzt aber eine Nicht-WindowsAPI Hooken will (in diesem fall DrawText von Qt4) stürzt das Programm, in welches ich meine DLL Injecte, ab.
Hier der Code:
int(*drawText1)(void*,void*,void*); int Hooked_drawText1(void* rect, void* qtstring, void* pav) { fprintf(file,"In Hooked_drawText1\n"); fflush(file); if(!drawText1) drawText1 = (void*)GetProcAddress(GetModuleHandle("QtGui4.dll"),"?drawText@QPainter@@QAEXABVQRectF@@HABVQString@@PAV2@@Z"); return 0;//drawText1(rect,qtstring,pav); }
Meine Annahme:
Wenn ich die richtige Adresse der QTFunktion 'drawText' via GetProcAddress laden kann (und das hab ich bereits überprüft, GetProcAddress liefert definitiv die gleiche Adresse die auch in der IAT steht, also die richtige!) kann ich diese auch korrekt aufrufen da intern ja nicht zwischen Datentypen unterschieden wird (deswegen void*).Dazu muss ich nur die Parameter Zahl kennen.
Als Prototypen stehen laut http://doc.qt.nokia.com/latest/qpainter.htmlvoid drawText ( const QPointF & position, const QString & text )
void drawText ( const QPoint & position, const QString & text )
void drawText ( const QRectF & rectangle, int flags, const QString & text, QRectF * boundingRect = 0 )
void drawText ( const QRect & rectangle, int flags, const QString & text, QRect * boundingRect = 0 )
void drawText ( int x, int y, const QString & text )
void drawText ( int x, int y, int width, int height, int flags, const QString & text, QRect * boundingRect = 0 )
void drawText ( const QRectF & rectangle, const QString & text, const QTextOption & option = QTextOption() )zur Auswahl.
Aus ?drawText@QPainter@@QAEXABVQRectF@@HABVQString@@PAV2@@Z schliese ich das die letzte Funktion die ist die ich Hooke -> also 3 Parameter.
Leider stürzt das Programm ab sobald "return" ausgeführt wird, egal ob ich 0 oder drawText1() returnen will.
An was kann das liegen?
Ich würde mich über jede Hilfe sehr freuenmfg
PS: Wusste nicht in welches Forum das genau gehört also hab ichs mal hier gepostet
-
Nachtrag: Ist es vielleicht möglich eine calling convention zu wählen die den Stack nicht verändert und dann einfach am ende des Hook Codes mit einem JMP in die eigentliche Funktion zu springen?
-
Kenne mich mit Hooking zwar nicht aus aber vergisst du nicht das implizite this bei den Übergabeparametern?