Отслеживание повторного входа потока в функцию

Тема в разделе "WASM.WIN32", создана пользователем Nouzui, 28 фев 2009.

  1. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Sol_Ksacap
    Интересно, какие недостатки у кода:
    Код (Text):
    1.     mov eax,1
    2.     lock xadd dword ptr fs:[PAGE_SIZE - 4],eax
    Или так:
    Код (Text):
    1.     xor eax,eax
    2.     mov edx,1
    3.     lock cmpxchg dword ptr fs:[PAGE_SIZE - 4],edx
     
  2. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Nouzui
    Если честно, то не вижу, как из этого следует, что по ID "не канает". Создаём общий связный список, содержащий TID'ы и изначально нулевые счётчики входов в функцию.
    Каждый поток на своём старте пробегается по этому связному списку и, если свой TID не находит, то добавляет его в связный список, а если находит, то просто обнуляет уже существующий счётчик входов. Ну и на входе в функцию опять таки каждый поток пробегает по списку и смотрит, а не больше ли нуля его счётчик входов.
     
  3. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    l_inc
    потоки не мои, иначе и вопроса бы не было

    в принципе, сойдет. просто я сейчас под старой студией
     
  4. l_inc

    l_inc New Member

    Публикаций:
    0
    Регистрация:
    29 сен 2005
    Сообщения:
    2.566
    Nouzui
    Вообще об этом упоминать в условии стоит. Так а что тогда Ваше? Только одна единственная функция? Если есть какой-нибудь ещё Ваш кусок кода, через который каждый поток обязательно пройдёт ровно один раз и именно перед выполнением функции, то и он, разумеется, подойдёт.
    Да и в чём конкретно проблема со стеком? На дне стека любого потока находится нулевой DWORD. Им можно воспользоваться, да и искать его нетрудно. Или ещё учитывать такие извращения, как подмена стека тоже нужно?
     
  5. Nouzui

    Nouzui New Member

    Публикаций:
    0
    Регистрация:
    17 ноя 2006
    Сообщения:
    856
    l_inc
    да сделал я уже с tid'ами (все равно никто ничего другого не предложил)
    в чём проблема со стеком? ни в чем. главное, чтобы два так написанных шелкода случайно не встретились друг с другом..

    ps:
    asd
    время создания - опять же парсить структуры или юзать kernel32. на нэйтиве я не знаю, его как получить
     
  6. asmfan

    asmfan New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2006
    Сообщения:
    1.004
    Адрес:
    Abaddon
    NtQueryInformationThread, вот только не помню кушает ли она псевдохэндл -2... извернуться можно в любом случае.