САБЖ Какой функцией воспользоваться, чтобы найти адресс экспортируемой ядерной функции? Либо как проще сделать... Просто не хочется бороздить таблицу экспорта драйвера, подобно тому, как когда-то искал АПИ в 3м кольце в кернеле..
Code (Text): LPVOID my_GetProcAddress(HMODULE module, const char * func) { LPVOID res; unsigned char * buf; MZ_HEADER * mz; PE_HEADER * pe; PE_EXPORT * ex; DWORD ex0; int i; res = NULL; buf = (unsigned char*)module; mz = (MZ_HEADER *)buf; pe = (PE_HEADER *)&buf[mz->mz_neptr]; ex = (PE_EXPORT *)&buf[pe->pe_exportrva]; ex0 = ex->ex_namepointersrva; for (i=0; i<ex->ex_numofnamepointers; ++i) { const char * name = (const char*)&buf[*(int*)&buf[ex0+i*4]]; if (!strcmp(name, fun)) { unsigned short t = *(unsigned short*)&buf[ex->ex_ordinaltablerva+i*2]; t -= ex->ex_ordinalbase; res = (LPVOID)&buf[*(int*)&buf[ex->ex_addresstablerva+t*4]]; break; } } return res; }
censored Спасибки, респектос. самопальное у меня тоже есть.. ) просто я думал, может уже готовое в ядре что-то валяется...
после этого надо бы Code (Text): t += 1; Как Квант заметил в одном из топиков, ошибка в документации. ordinalbase начинается зачастую с 1, а ordinals с 0.
n0name Нет Это была функция для работы с CRC, просто перед тем как запостить передал быстро на строки. asmfan Спасибо. Я запостил, чтобы можно было проверить работает или нет