Отличить функцию от переменной в экспорте

Тема в разделе "WASM.NT.KERNEL", создана пользователем Denwer, 15 апр 2007.

  1. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Не знаю как там в ядре, а в ntdll большинство Rtl\Nt-функций начинается именно так - вызывается стандартная функция, которая ставит SEH, выполняет пролог, выделяет локальные переменные и сохраняет ebx,esi,edi
     
  2. Denwer

    Denwer New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2006
    Сообщения:
    104
    Выяснил причину происходящего, если в функции устанавливается фрейм обработки SEH, и плюс к этому у компилятора стоит оптимизация по размеру, то вот и получается такой пролог, сосбтвенно он можно сказать стандартный.

    В ntdll.dll вроде как все функции Nt вообще без пролога, там они всего до заполняют два регистра и вызывают прерывание.
     
  3. Denwer

    Denwer New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2006
    Сообщения:
    104
    Даже с учетом новой добавки в алгоритм определения, функции определяются верно не более 90 процентов в ядре, полно таких которые начинаются от балды.
     
  4. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    В ХР обычно не прерывание 2e, а команда SYSENTER, но суть не меняется) там даже код для прерывания остался.
    чекай что первая команда push. если это она, скорее всего это функция
     
  5. Denwer

    Denwer New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2006
    Сообщения:
    104
    Да в том то и дело что многи начинаются еще и с mov, короче можно только сказать что это функция уверенно, но не наоборот.
     
  6. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    ну чекай что первая команда mov или push. я думаю других фукнций там нету, поэтому можно будет однозначно сказать, что это функция
     
  7. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    Можно посмотреть, как этот экспорт используется "компетентным" кодом - чтение/запись или исполнение.
     
  8. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    по-моему, фиксапы - самый реальный способ
     
  9. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Nouzui
    оптимизация ж часто используется вида
    mov esi, offset function
    ...
    call esi
    ...
    call esi

    так что тут можно жестко обломаться
     
  10. HoBleen

    HoBleen New Member

    Публикаций:
    0
    Регистрация:
    15 янв 2007
    Сообщения:
    77
    Нет =) Видел в одном кернеле начало типа
    Код (Text):
    1. cmp dword ptr [esp+8], 0
     
  11. green

    green New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2003
    Сообщения:
    1.217
    Адрес:
    Ukraine
    AFAIK, в ХР теперь все ф-ции начинаются с mov edi, edi.
    Для облегчения сплайсинга.
     
  12. Quantum

    Quantum Паладин дзена

    Публикаций:
    0
    Регистрация:
    6 янв 2003
    Сообщения:
    3.143
    Адрес:
    Ukraine
    green
    В апишных библиотеках почти все.
     
  13. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    У меня XP, далеко не всё начинается с mov edi,edi
     
  14. Asterix

    Asterix New Member

    Публикаций:
    0
    Регистрация:
    25 фев 2003
    Сообщения:
    3.576
    а это только с СП2 пошло вроде
     
  15. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Asterix
    ну у меня SP2
     
  16. Denwer

    Denwer New Member

    Публикаций:
    0
    Регистрация:
    20 дек 2006
    Сообщения:
    104
    В СП2 просто туча функций без пролога, сделал прогу, и просканил все загруженные модули этой функцией, целый список выдала ФУНКЦИЙ, которые начинаются непонятно с чего(это точно функции).
     
  17. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    Denwer
    Обойдись такой проверкой, как у меня она буквально несколько переменных не определяет.
     
  18. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    Great
    вообще-то да
     
  19. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    Nouzui
    ну о чем я и говорю) фиксапы будут далеко не только на переменные указывать
    к тому же вызовы импортируемых функций вида call dword ptr [12345678] тоже будут профиксапены. так что не катит