Проблема с подсчетом CRC32 в драйвере

Тема в разделе "WASM.WIN32", создана пользователем SPath, 23 авг 2005.

  1. SPath

    SPath New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2005
    Сообщения:
    13
    Помогите разобратся почему так происходит.

    Есть метод для вычисления crc

    ULONG Calculate(PUCHAR buffer, ULONG size)

    {

    PUCHAR pbyte = buffer;

    ULONG CRC = 0xFFFFFFFF;

    ULONG t=0;

    while(size--)

    {

    DbgPrint("t %lu\n",t++);

    CRC = (CRC >> 8) ^ Table[(CRC & 0xFF) ^ *pbyte++];

    }

    return CRC ^ 0xFFFFFFFF;

    }

    Проблема в том что цикл больше чем ~ 447 раз не выполняется, а значения будут намного больше. Проблема

    даже не столько с crc сколько с циклом.

    Если код в таком виде то переменная t доходит до ~447 а потом увеличивается сразу на несколько тысяч и тд

    Пробовал поднять приоритет потока, так оно доходит только до 447 и все.

    Кто может объяснить почему так происходит и как от этого можно отделаться?
     
  2. dr_dred

    dr_dred Сергей

    Публикаций:
    0
    Регистрация:
    12 мар 2005
    Сообщения:
    301
    Адрес:
    Russia
    RtlComputeCrc32 не поможет? (ntdll.dll)
     
  3. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    А если убрать (вынести за цикл) вызов DbgPrint?
     
  4. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    у тебя buffer и size между собой дружат?
     
  5. SPath

    SPath New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2005
    Сообщения:
    13
    dr_dred

    RtlComputeCrc32 - интересно, запомним

    но хотелось бы в драйвере



    S_T_A_S_

    оно чисто для наглядности

    хотя почему с dbgprint так получается тоже интересно



    volodya

    как они могут не дружить

    я их получаю из PLDR_DATA_TABLE_ENTRY

    LdrDataTableEntry->DllBase

    LdrDataTableEntry->SizeOfImage



    может у кого нибудь есть готовые наработки по вычислению crc в драйвере
     
  6. SPath

    SPath New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2005
    Сообщения:
    13
    для большей ясности приведу код

    PsLookupProcessByProcessId(ProcessId,&childproc);

    LoadOrderListHead = &((PPEB_LDR_DATA)((PPEB)childproc->Peb)->Ldr)->InLoadOrderModuleList;

    InitOrderListHead = &((PPEB_LDR_DATA)((PPEB)childproc->Peb)->Ldr)->InInitializationOrderModuleList;



    Next = LoadOrderListHead->Flink;

    while ( Next != LoadOrderListHead ) {

    LdrDataTableEntry = CONTAINING_RECORD( Next, LDR_DATA_TABLE_ENTRY, InLoadOrderModuleList);

    crc = Calculate (LdrDataTableEntry->DllBase, LdrDataTableEntry->SizeOfImage);

    break;

    // Next = Next->Flink;//ïîèñê âñåõ çàãðóæåííûõ ìîäóëåé â ïðîöåññå

    }



    я пробовал значение размера ставить <500 - crc считался нормально, а вот при 500 уже какаето отсебятина начиналась



    почему так - не могу понять, сума схожу

    тупость какаето



    если ктото может помочь с crc32 в драйвере буду признателен
     
  7. SPath

    SPath New Member

    Публикаций:
    0
    Регистрация:
    10 авг 2005
    Сообщения:
    13
    попробовал считать crc файла не из памяти а с диска - все нормально

    а при подсчете crc файла из памяти теже глюки.

    Значит что то есть что скорее всего мешает.

    Что это может быть и как с этим бороться?