Перехват API, что не так

Тема в разделе "WASM.WIN32", создана пользователем xenom0rph, 2 май 2009.

  1. xenom0rph

    xenom0rph New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    59
    K10
    нет, пока ещё
     
  2. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Потому что компиляция в режиме C и в режиме C++ отличаются. И файлы с расширением .c по умолчанию в студии компилируются не так, как файлы с расширением .cpp. В частности, в Си законны присваивания void* a = (любой указатель), а в C++ требуется явный кастинг.
     
  3. xenom0rph

    xenom0rph New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    59
    diamond
    это я уже понял, так какой здесь выход, переделывать весь проект на чистом С, или как то можно выкрутится продалжая дальше использовать С++ ?
     
  4. xenom0rph

    xenom0rph New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    59
    на данный момент, проблеммы в следующем коде
    Код (Text):
    1. ...
    2. PVOID *MappedSystemCallTable;
    3. #define SYSCALL_INDEX(_Function) *(PULONG)((PUCHAR)_Function+1)
    4. #define HOOK_SYSCALL(_Function, _Hook, _Orig )  \
    5.        _Orig = (PVOID) InterlockedExchange( (PLONG) &MappedSystemCallTable[SYSCALL_INDEX(_Function)], (LONG) _Hook)
    6. ...
    7.   MappedSystemCallTable = MmMapLockedPages(g_pmdlSystemCall, KernelMode);
    так естественно даёт ошибку.
    Код (Text):
    1. 1>.\include\hide.cpp(196) : error C2440: '=' : cannot convert from 'PVOID' to 'PVOID *'
    2. 1>        Conversion from 'void*' to pointer to non-'void' requires an explicit cast
    делаю так
    Код (Text):
    1.  MappedSystemCallTable = (PVOID *)MmMapLockedPages(g_pmdlSystemCall, KernelMode);
    Сотрю в отладчик - фатальная ошибка.
    Прямо замкунтый круг))
     
  5. diamond

    diamond New Member

    Публикаций:
    0
    Регистрация:
    21 май 2004
    Сообщения:
    507
    Адрес:
    Russia
    Явное приведение типов устраняет ошибку компиляции. Если сбой при работе - значит, где-то в коде есть ошибка, не связанная с этим.
     
  6. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    Фатальная ошибка это бсод)) Это можно и без отладчика посмотреть, он же для другого создавался, ты что не можешь бряки поставить и посмотреть что там происходит?
     
  7. xenom0rph

    xenom0rph New Member

    Публикаций:
    0
    Регистрация:
    2 апр 2009
    Сообщения:
    59
    Так что там происходит, когда флаг меняю, тогда и фатальная ошибка на этой строке, да ещё как то через раз бывает ошибка когда страницу блокирую. х.з. вроде всё нормально, потом хоп и ошибка. Несколько раз было вообще всё нормально проходило но не скрывало ни чего. Вообщем плюнул я на эту затею, всё переделал, на чистом С.