Exemple #1
0
void KImageModule::ShowFPO(ULONG SymbolAddress)
{
	if ( m_bShowFPO )
	{
		const FPO_DATA * pFPO = (const FPO_DATA *) SymFunctionTableAccess(m_hProcess, SymbolAddress);
		
		if ( pFPO )
		{
			Output("         ");
			Output("s=%4d l=%2d, p=%2d, e=%2d, r=%2d, s=%d, b=%d, f=%d\n",
					pFPO->cbProcSize,
					pFPO->cdwLocals,
					pFPO->cdwParams,
					pFPO->cbProlog,
					pFPO->cbRegs,
					pFPO->fHasSEH,
					pFPO->fUseBP,
					pFPO->cbFrame);
		}
	}
}
Exemple #2
0
LPVOID
SwFunctionTableAccess(
    HANDLE  hProcess,
    DWORD   AddrBase
    )
{
#if defined(TARGET_i386) || defined(CHICAGO)
    return (LPVOID)FindFpoDataForModule( AddrBase );
#else
    static IMAGE_RUNTIME_FUNCTION_ENTRY irfe;
    PIMAGE_FUNCTION_ENTRY pife = SymFunctionTableAccess( hProcess, AddrBase );
    if (pife) {
        irfe.BeginAddress     = pife->StartingAddress;
        irfe.EndAddress       = pife->EndingAddress;
        irfe.ExceptionHandler = 0;
        irfe.HandlerData      = 0;
        irfe.PrologEndAddress = pife->EndOfPrologue;
        return &irfe;
    } else {
        return NULL;
    }
#endif
}
Exemple #3
0
static void* CALLBACK FunctionTableAccess(HANDLE hProcess,
        ULONG_ADDR dwAddrBase)
{
    return SymFunctionTableAccess(hProcess, dwAddrBase);
}
Exemple #4
0
static LPVOID __stdcall FunctionTableAccess(HANDLE hProcess, DWORD dwPCAddress)
{
	return SymFunctionTableAccess(hProcess, dwPCAddress);
}