помогите вкурить Strace

Тема в разделе "WASM.WIN32", создана пользователем billi12, 8 окт 2011.

  1. billi12

    billi12 New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2011
    Сообщения:
    44
    Привет. Разбираю эту утилиту. Как бы исходники уже все почитал, но непонятны некоторые вещи. Скорее даже не некоторые. Еще такие нагромождения из макросов, что ппц. Если кто вкурил эту тему, подскажите плз? Особенно непонятно как установка перехватчиков происходит.
     
  2. billi12

    billi12 New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2011
    Сообщения:
    44
    и что значит эта хрень?
    struct syscall_map nt4sp3_map[] = {
    #include "sp3callx.h"
    };

    как в этой дурацкой структуре syscall_map присваивается значения параметров?? fn и hook

    т.е. как заполняются соответствующие карты вызовов
     
  3. billi12

    billi12 New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2011
    Сообщения:
    44
    вкурил. но если у вас есть комменты по этой утилите - оставьте плиз)
     
  4. Aquila

    Aquila Самурай дзена

    Публикаций:
    0
    Регистрация:
    30 авг 2002
    Сообщения:
    1.467
    Адрес:
    Russia, Moscow
    Ты бы написал ответы к вопросам своим, может другим пригодится.
     
  5. billi12

    billi12 New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2011
    Сообщения:
    44
    =) Угу. Там просто используются повсеместно макросы, я даже предположить не мог, что с ними такое можно творить. Перед инициализацией структуры syscall_map определен макрос, означающией, что вместо МэджикФу с его параметрами, будет исп-ся выражение справа.

    #define MagicFoo(call,args) { call##_##args, hook_##call##_##args },

    Выше по тексту есть реализация хук-функции, кот так и называется hook_##call##_##args. В файле "sp3callx.h" лежат имена сервисов и количество параметров. Это длиинный список типа MagicFoo(NtAddAtom,8). Таким образом происходит инициализация

    struct syscall_map nt4sp3_map[] =
    { {NtAddAtom_8, hook_NtAddAtom_8},......};

    Потом NtAddTom_8 исп-ся как 1 из членов enum'a syscall, ну а хук_тололо_ололо - указатель на соответствующую хук-функцию.