All pastes #796307 Raw Edit

Miscellany

public cpp v1 · immutable
#796307 ·published 2007-11-24 23:37 UTC
rendered paste body
FARPROC aapi::GetProcAddress( HMODULE hModule, LPCSTR lpProcName ){	DWORD EATA,OP;	IMAGE_DOS_HEADER *DOSH = ( IMAGE_DOS_HEADER* )hModule;	IMAGE_NT_HEADERS *NTH = NULL;	if( DOSH->e_magic != IMAGE_DOS_SIGNATURE )		return NULL;	NTH = ( ( PIMAGE_NT_HEADERS )( ( DWORD )( DOSH ) + ( DWORD )( DOSH->e_lfanew ) ) );		if( NTH->Signature != IMAGE_NT_SIGNATURE )		return NULL;	EATA = NTH->OptionalHeader.DataDirectory[ IMAGE_DIRECTORY_ENTRY_EXPORT ].VirtualAddress;	IMAGE_EXPORT_DIRECTORY *EATP = ( IMAGE_EXPORT_DIRECTORY* )( ( DWORD )EATA + ( DWORD )hModule );    for ( DWORD i = 0;i < EATP->NumberOfFunctions;i++ )    {		DWORD * ENTP = (DWORD*)( ( DWORD )hModule + ((DWORD)EATP->AddressOfNames + (sizeof(DWORD)*i)));        if( strcmp( ( char* )( ( DWORD )hModule + *ENTP ), lpProcName )== 0 )        {			WORD * AONP = ( WORD* )( ( DWORD )hModule + ( ( DWORD )EATP->AddressOfNameOrdinals + ( i * sizeof( WORD ) ) ) );			DWORD * AOF  = ( DWORD* )( ( DWORD )hModule + ( ( DWORD )EATP->AddressOfFunctions + ( sizeof( DWORD )**AONP ) ) );           return ( FARPROC )( *AOF + DWORD( hModule ) );        }    }}