Also talk about the implementation technology of Thunk in C ++

zhaozj2021-02-16  42

I saw "I have a different kind of idea for the analysis of THUNK in C ". The original code is as follows: #pragma pack (push, 1) // structure to store the machine code thunk {char m_jmp; // Op code of jmp instruction unsigned long m_relproc; // relative jmp

}; # prgma pack (POP)

// this Type of Structure CAN Contain THUNK CODE, Which Can Be Executed on The Fly. Let's Take a Look At The Simple Case In Which We Are Going to Execute Our Required Function by Thunk.

// Program 77

#include

#include

Using namespace std;

Class C;

C * g_pc = NULL;

TYPEDEF VOID (* PFUN) ();

Class C

{

PUBLIC: INT A; INT B; Float Bbj; Thunk M_thunk;

// virtual void g () {};

Void Init (PFUN PFUN, VOID * PTHIS)

{

// Op code of jump instruction

m_thunk.m_jmp = 0xE9;

// Address of the appriate function

/ * @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@Ade

& m_thunk, sizeof (m_thunk));

}

// this is co Call Back Function

Static void calbackfun ()

{

C * pc = g_pc; // initilize the thunk

PC-> Init (staticfun, pc); // Get The Address of Thunk Code

PFUN PFUN = (PFUN) & (PC-> m_thunk); // Start Executing Thunk Code Which Will Call Staticfun

PFUN ();

Cout << "C :: CallbackFun" << Endl;

}

Static void staticfun ()

{

Cout << "c :: staticfun" << Endl;

}

}

int main ()

{

C Objc; g_pc = & objc; C :: CallbackFun (); return 0;}

转载请注明原文地址:https://www.9cbs.com/read-27000.html

New Post(0)