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


     Tece инсталляция для унитаза смотрите здесь. |     

Здесь можно рассмотреть возможность двоичного


 if ( IMAGE_ORDINAL_FLAG !=

( pOrigThunk->ul.Ordinal & IMAGE_ORDINAL_FLAG)) 

{

// Поиск имени данной импортируемой функции.

PIMAGE_IMPORT_BY_NAME pByName;

pByName = MakePtr ( PIMAGE_IMPORT_BY_NAME,

hModule ,

 pOrigThunk->ul.AddressOfData );

// Если имя начинается с NULL, то пропустить элемент,

 if ( '\0' == pByName->Name[ 0 ]) 

{

continue; 

}

// Определить, подключилась ли функция

 BOOL bDoHook = FALSE;

// Здесь можно рассмотреть возможность двоичного поиска. 

// Посмотреть, есть ли имя импортируемой функции в массиве

 // подключения. Обдумайте требования к paHookArray для 

// сортировки по именам функций, что позволило бы использо-

// вать двоичный поиск, который увеличил бы скорость поиска.

 // Однако размер параметра uiCount, получаемого этой

// функцией, должен быть скорее небольшим для успешного

 // поиска по всему массиву paHookArray для каждой функции,

 // импортированной модулем szImportMod.

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

{

if ( ( paHookArray[i].szFunc[0] ==

pByName->Name [0]) & & 

( 0 == strcmpi ( paHookArray[i].szFunc,

(char*)pByName->Name ) ) )

 {

// Если адрес функции есть NULL, то — немедленный

 // выход; иначе приступить к подключению функции.

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

{

bDoHook = TRUE; 

}

break; 

}

 }

if ( TRUE == bDoHook}

 {

// Функция для подключения найдена. Теперь нужно

 // изменить защиту памяти на "read-write" (для записи), 

// прежде чем перезаписывать указатели функций. Заметьте,

 // что в реальную область переходников запись 

//не производится!

MEMORY_BASIC_INFORMATION mbi_thunk;

 VirtualQuery ( pRealThunk , 

&mbi_thunk  ,

 sizeof ( MEMORY_BASIC_INFORMATION));

if ( FALSE — VirtualProtect ( mbi_thunk.BaseAddress,

mbi_thunk.RegionSize , 

PAGE_READWRITE , 


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