Отладка приложений


         

В отладочных построениях выполнить тщательную




ЛИСТИНГ 12-2. Функция HookImportedFunctionsByNaine из файла 

                                 HOOKIMPORTEDFUNCTIONSBYNAME.CPP . 

BOOL BUGSUTIL_DLLINTERFACE _stdcall

HooklmportedFunctionsByName ( HMODULE hModule ,

LPCSTR szImportMod,

 UINT uiCount 

LPHOOKFUNCDESCA paHookArray, 

PROC * paOrigFuncs, 

LPDWORD pdwHooked )

 {

// Проверить параметры.

ASSERT ( FALSE == IsBadReadPtr ( hModule

sizeof ( IMAGE_DOS_HEADER) ));

ASSERT ( FALSE == IsBadStringPtr ( szImportMod, MAX_PATH)); 

ASSERT ( 0 != uiCount); 

ASSERT ( NULL != paHookArray);

 ASSERT ( FALSE == IsBadReadPtr ( paHookArray,

sizeof (HOOKFUNCDESC) * uiCount));

// В отладочных построениях выполнить тщательную проверку paHookArray.

 #ifdef _DEBUG

if ( NULL != paOrigFuncs)

 {

ASSERT ( FALSE == IsBadWritePtr ( paOrigFuncs,

sizeof ( PROC) * uiCount)); 

}

if ( NULL != pdwHooked)

 {

ASSERT ( FALSE == IsBadWritePtr ( pdwHooked, sizeof ( UINT)));

}

// Проверить каждый элемент массива подключения.

 {

for ( UINT i = 0; i < uiCount; i++) 

{

ASSERT ( NULL != paHookArray[ i ].szFunc );

ASSERT ( '\0' != *paHookArray[ i ].szFunc);

// If the function address isn't NULL, it is validated.

if ( NULL != paHookArray[ i ].pProc)

{

ASSERT ( FALSE == IsBadCodePtr ( paHookArray[i].pProc)); 

}

 } 



#endif

// Выполнить проверку ошибок параметров.  

if ( ( 0 == uiCount ) | | 

( NULL == szIinportMod ) | | 

( TRUE == IsBadReadPtr ( paHookArray,

sizeof ( HOOKFUNCDESC) * uiCount))) 

{

SetLastErrorEx ( ERROR_INVALID_PARAMETER, SLE_ERROR);

return ( FALSE);

 }

if ( ( NULL != paOrigFuncs) && 

( TRUE == IsBadWritePtr ( paOrigFuncs,

sizeof ( PROC) * uiCount)) ) 

{

SetLastErrorEx ( ERROR_INVALID_PARAMETER, SLE_ERROR);


Содержание  Назад  Вперед