Source file: /~heha/hsn/thunk.zip/Thunk.cpp

// Klasse, um an eine Rückrufadresse eine benutzerspezifische Adresse
// zu liefern; Anwendungsbeispiel siehe THUNK.H - h#s 12/05

#define WIN32_LEAN_AND_MEAN
#include "Thunk.h"

// _cdecl-Version
CThunk::MakeCdecl(LPVOID FuncPtr, PVOID Arg) {
#ifdef _M_IX86
 code[0] = 0x68;	// push Arg	; Objekt-Zeiger vorn hinzufügen
 *(PDWORD)(code+1) = (DWORD)Arg;	// (Returnadresse bleibt liegen)
 code[5] = 0xE8;	// call FuncPtr	; Fkt. mit 2 Parametern mehr aufrufen
 *(PDWORD)(code+6) = (DWORD)FuncPtr - (DWORD)(code+10);
 code[10] = 0x59;	// pop ecx	; Objekt-Zeiger entfernen
 code[11] = 0xC3;	// ret		; Aufrufer räumt den Rest vom Stack auf
#else
# error Nicht unterstützte Plattform! Ggf. Kode hier einfügen!
#endif
}

// _stdcall-Version
CThunk::MakeStdcall(LPVOID FuncPtr, PVOID Arg) {
#ifdef _M_IX86
 code[0] = 0x59;	// pop ecx		; Returnadresse vom Stack
 code[1] = 0x68;	// push Arg		; Objekt-Zeiger vorn hinzufügen
 *(PDWORD)(code+2) = (DWORD)Arg;
 code[6] = 0x51;	// push ecx		; Returnadresse auf Stack
 code[7] = 0xE9;	// jmp FuncPtr	; Fkt. mit 1 Parameter mehr anspringen
 *(PDWORD)(code+8) = (DWORD)FuncPtr - (DWORD)(code+12);
#else
# error Nicht unterstützte Plattform! Ggf. Kode hier einfügen!
#endif
}

Detected encoding: ANSI (CP1252)4
Wrong umlauts? - Assume file is ANSI (CP1252) encoded