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

Discussion in 'WASM.WIN32' started by billi12, Oct 8, 2011.

  1. billi12

    billi12 New Member

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

    billi12 New Member

    Blog Posts:
    0
    и что значит эта хрень?
    struct syscall_map nt4sp3_map[] = {
    #include "sp3callx.h"
    };

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

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

    billi12 New Member

    Blog Posts:
    0
    вкурил. но если у вас есть комменты по этой утилите - оставьте плиз)
     
  4. Aquila

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

    Blog Posts:
    0
    Ты бы написал ответы к вопросам своим, может другим пригодится.
     
  5. billi12

    billi12 New Member

    Blog Posts:
    0
    =) Угу. Там просто используются повсеместно макросы, я даже предположить не мог, что с ними такое можно творить. Перед инициализацией структуры 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, ну а хук_тололо_ололо - указатель на соответствующую хук-функцию.