Биндинг импорта. Неожиданные траблы.

Тема в разделе "WASM.NT.KERNEL", создана пользователем zoool, 22 апр 2008.

  1. zoool

    zoool New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2007
    Сообщения:
    412
    Возникла проблема при ручном биндинге импорта.

    Есть функция из ндис.сис

    Например NdisInitUnicodeString

    Мы в драйвере

    1. Находим ImageBase ndis.sys
    2. находим таблицу экспорта
    3. Парсим ее, находим нужный ординал
    4. Умножаем ординал на 4 и прибавляем VA таблицы адресов.
    Теоретически, в нормальных ситуациях, в полученной ячейке лежит адрес экспортируемой функции.
    В большинстве случаев так и есть. Но изредка,как в случае с NdisInitUnicodeString, в ячейке лежит указатель на строку
    "NTOSKRNL.RtlInitUnicodeString"

    Я дописал еще часть кода, которая выдегивает имя модуля ntoskrnl и имя функции и все по новой с шага 1 для соотв. модуля

    Такие вопросы:

    NTOSKRNL.xxxx - это частный случай или встречаются и другие подобные случаи с другими модулями?
    И например, если есть два модуля OurModule.dll, OurModue.sys и все в кернелспейсе, а функа ссылается на
    OurMoudle.OurFunction, то как обрабатывать подобные ситуации?
     
  2. 0lenev0d

    0lenev0d New Member

    Публикаций:
    0
    Регистрация:
    25 дек 2006
    Сообщения:
    2
    По первому вопросу:
    Такая штука называется форвард, простейший пример - функция kernel32.HeapAlloc в ntdll.RtlAllocateHeap.
    обрабатывается так: берется тот адрес, который ты находишь по таблице экспорта и проверяется
    на принадлежность к самой таблице, если адрес лежит внутри ее, то это форвард.
    все что до точки - имя модуля, все что после - имя функции.
    более подробно "описано" в функции GetProcAddress ;)
     
  3. zoool

    zoool New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2007
    Сообщения:
    412
    ясно
    спасибо!
    респект!

    далее сам разрулю
     
  4. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    "Visual Studio, Microsoft Portable Executable and Common Object File Format Specification" обычно тоже помогает %)

     
  5. zoool

    zoool New Member

    Публикаций:
    0
    Регистрация:
    1 дек 2007
    Сообщения:
    412
    n0name
    да
    но постинг в разделе кернел ))

    и я нашел форварды на NTOSKRNL.EXE, HAL.DLL, ACP.VXD