Сравнение строк в RING0

Тема в разделе "WASM.BEGINNERS", создана пользователем PsReadRtfm, 16 дек 2006.

  1. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    В этой строке, по крайней мере, две ошибки: nameptr и fileptr являются указателями на строки, а &nameptr и &fileptr - это адреса указателей. Т.е. д.б. так memcmp(nameptr,fileptr,16), но и это неправильно, т.к. функция memcmp будет тупо сравнивать 16 байт, даже если строка из одного символа. Т.е. сравниваемые строки могут быть равны, но оставшиеся байты сверх 16 - нет. Это будет работать только в том случае, если длины строк = 15 + терминатор или 16 и без терминатора.

    Надо так: _strnicmp(nameptr,fileptr,16)

    И вообще, проблема выеденного яйца не стоит и если уж ошибка не видна по исходнику, то решается простым пошаговым прохождением в отладчике.
     
  2. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    значит, ошибка в параметрах
     
  3. PsReadRtfm

    PsReadRtfm New Member

    Публикаций:
    0
    Регистрация:
    16 дек 2006
    Сообщения:
    32
    Four-F т.е. я в memcmp , в первом параметре допустим при запуска драйвера (net.exe) сравниваю 7 байт и 1 дальше т.е. мусор, и из-за этого...а сейчас попробуем как сказал Nouzui , и ещё,как узнать длину nameptr?
     
  4. Four-F

    Four-F New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2002
    Сообщения:
    1.237
    Точно не скажу, но в массиве EPROCESS.ImageFileName[16], скорее всего не мусор а нули за строкой, а вот за "core.exe" мусор. В отладчике всё очень хорошо должно быть видно.

    Длина nameptr, очевидно, 4 байта для 32-х битного драйвера. Если имеется в виду длина строки, на которую указывает nameptr, то идти по строке до тех пор, поке не встретится ноль, но не дальше чем на 16 символов.