vinduer - Hooking/omvej virtuelle funktioner

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har forsøgt at krog/omgå en virtuel funktion i et klasseobjekt, og jeg har haft succes med at kalde en anden funktion, men jeg skal gøre noget, der er ukorrekt med hensyn til hvordan this nøgleordet overføres til funktionen.


Jeg læste en artikel om tilslutning af D3D-funktioner på en lignende måde, og det nævnte, at kompilatoren vil vende en funktion som int Class::method(int) til int method(Class* this, int), men hvis jeg erstatter adressen i vtable med en funktion, som er defineret som sådan, adressen til 'dette' er forkert, så det er nok ikke rigtigt.


Hvordan er medlemsfunktioner udarbejdet af kompilatoren, og er det muligt at repræsentere det i ikke-medlemsfunktionsformular, så jeg kan indstille adressen i vtablet til en sådan funktion og kunne henvise til den relevante objekt?

Bedste reference


Du skal definere din funktion som thiscall. Det passerer thisecx registeret. Den måde du har gjort, forventer funktionen this på stakken og læsning af den forkerte værdi, som sandsynligvis tilhørte et andet argument. [7]