Question : IAT raccordant, problème en appelant en arrière à la fonction originale de cible ?

Bonjour, le

I se demandait si un expert pourrait m'aider avec IAT raccordant sur O/Ss basé par NT car je suis venu unstuck.  J'essaye d'installer un crochet d'api using l'injection de DLL (technique de LoadLibrary/CreateRemoteThread), et puis raccorde deux ou trois fonctions d'OpenGL pour pouvoir arrêter leurs paramètres et effectuer des opérations avant d'appeler les originaux.  Toute la ceci fonctionne indépendamment de, il semble, quand j'appelle de nouveau aux versions originales des fonctions qui ont une liste de paramètre - appeler en arrière aux fonctions sans des paramètres est suspect de fine.

I qu'il est comment j'ai spécifié par des indicateurs de fonction, je suis nouveau à cette technique et ne peux pas sembler figurer dehors qui est la manière correcte de faire des choses.  Quand j'appelle de nouveau aux fonctions originales avec la liste de paramètre elle se brise juste le code de la cible process.

The que j'emploie est comme suit : - indicateur du

//à la fonction originale :

void (*glRotatefOrig de WINAPI) (angle de GLfloat, GLfloat X, GLfloat y, GLfloat z) ; code du

//pour obtenir l'indicateur original de fonction :

glRotatefOrig = (vide (WINAPI *) (GLfloat, GLfloat, GLfloat, GLfloat)) GetProcAddress (hMod, « glRotatef ») ; hMod = poignée de // à l'openGL module.

//mon propre implentation de fonction (ceci s'appelle avec succès par la cible de processus après pièce rapportée d'IAT) : myglRotatef du

void (angle de GLfloat, GLfloat X, GLfloat y, z)
{console->Write de
(« glRotatef de GLfloat appelé \ n ») ; glRotatefOrig de l'ok
d'impression de // (angle, x, y, z) ; // cet appel se brise l'application (aucune erreur signicative donnée). le

Can n'importe qui du
} m'indiquent probablement où je vais mal ?  J'ai essayé de nombreuses différentes manières de spécifier l'indicateur original de fonction mais tous extrémité en larmes : /

Cheers à l'avance si vous pouvez aider,
Chris
class= de

Réponse : IAT raccordant, problème en appelant en arrière à la fonction originale de cible ?

Salut Chris,

Le raccordement d'IAT est quelque chose que j'ai jouée du violon énormément il n'y a pas très longtemps : Les livres de J.Richter sont vraiment lecture exigée sur ceci :)

J'ai écrit une classe d'emballage, inspirée par le monsieur ci-dessus, telles que lequel m'a permis d'accrocher avec succès des fonctions : : MessageBox etc.  J'ai attaché ma classe d'aide ci-dessous, avec l'utilisation d'exemple.  Veuillez l'essayer dehors using vos fonctions d'OpenGL - elle devrait fonctionner sans problème.

Vous verrez cela quand j'accroche l'appel : : MessageBox, je change le texte qui était à l'origine spécifique « moi ont accroché cet appel ! »
1 :
2 :
3 :
4 :
5 :
6 :
7 :
8 :
9 :
10 :
11 :
12 :
13 :
14 :
15 :
16 :
17 :
18 :
19 :
20 :
21 :
// a installé le crochet
VÉRIFIER (CFuncInAPIHook : : Citer () .HookFunction (_T (« user32.dll »), _T (« MessageBoxW »), AfxGetInstanceHandle (), &MyMessageBox (PROC))) ;

Procédé de remplacement de //
international WINAPI MyMessageBox (hWnd de HWND,
    lpText de LPCTSTR,
    lpCaption de LPCTSTR,
    uType d'UINT
)
{
	L'indicateur de fonction de // doit avoir la même convention appelante que PROC (WINAPI) !  , Ajouter par conséquent WINAPI au début (__stdcall) !
	typedef international  (*MESSAGEBOX_FUNC de WINAPI) (HWND, LPCTSTR, LPCTSTR, UINT) ;

	// recherchent seulement l'adresse de fonction originale une fois !
	pFunc statique de MESSAGEBOX_FUNC = (MESSAGEBOX_FUNC) CFuncInAPIHook : : Citer () .RetrieveOriginalAPIFunctionAddress (_T (« user32.dll »), _T (« MessageBoxW »)) ;
	AFFIRMER (pFunc) ;
	renvoyer le pFunc ? (*pFunc) (hWnd, _T (« j'ai accroché cet appel ! "), lpCaption, uType) : 0 ;
}

// cet appel sera accroché
: : MessageBox (NULLE, _T (""), _T (« titre »), MB_OK) ;
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us