GetProcAddress в r0

Тема в разделе "WASM.BEGINNERS", создана пользователем nitrotoluol, 1 июн 2007.

  1. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    САБЖ
    Какой функцией воспользоваться, чтобы найти адресс экспортируемой ядерной функции?
    Либо как проще сделать...

    Просто не хочется бороздить таблицу экспорта драйвера, подобно тому, как когда-то искал АПИ в 3м кольце в кернеле..
     
  2. censored

    censored New Member

    Публикаций:
    0
    Код (Text):
    1. LPVOID my_GetProcAddress(HMODULE module, const char * func) {
    2.   LPVOID res;
    3.   unsigned char * buf;
    4.   MZ_HEADER * mz;
    5.   PE_HEADER * pe;
    6.   PE_EXPORT * ex;
    7.   DWORD ex0;
    8.   int i;
    9.  
    10.   res = NULL;
    11.   buf = (unsigned char*)module;
    12.   mz = (MZ_HEADER *)buf;
    13.   pe = (PE_HEADER *)&buf[mz->mz_neptr];
    14.   ex = (PE_EXPORT *)&buf[pe->pe_exportrva];
    15.   ex0 = ex->ex_namepointersrva;
    16.   for (i=0; i<ex->ex_numofnamepointers; ++i) {
    17.     const char * name = (const char*)&buf[*(int*)&buf[ex0+i*4]];
    18.     if (!strcmp(name, fun)) {
    19.       unsigned short t = *(unsigned short*)&buf[ex->ex_ordinaltablerva+i*2];
    20.       t -= ex->ex_ordinalbase;
    21.       res = (LPVOID)&buf[*(int*)&buf[ex->ex_addresstablerva+t*4]];
    22.       break;
    23.     }
    24.   }
    25.  
    26.   return res;
    27. }
     
  3. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    censored
    Спасибки, респектос.
    самопальное у меня тоже есть.. ) просто я думал, может уже готовое в ядре что-то валяется...
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    а придётся.

    censored
    а ты компилил?
    просто сразу в глаза бросается strcmp(name, fun) ;)
     
  5. asmfan

    asmfan New Member

    Публикаций:
    0
    после этого надо бы
    Код (Text):
    1.       t += 1;
    Как Квант заметил в одном из топиков, ошибка в документации.
    ordinalbase начинается зачастую с 1, а ordinals с 0.
     
  6. censored

    censored New Member

    Публикаций:
    0
    n0name
    Нет :) Это была функция для работы с CRC, просто перед тем как запостить передал быстро на строки.
    asmfan
    Спасибо. Я запостил, чтобы можно было проверить работает или нет :)
     
  7. Four-F

    Four-F New Member

    Публикаций:
    0
    http://alter.org.ua/ru/docs/nt_kernel/procaddr/