splice check eip

Тема в разделе "WASM.WIN32", создана пользователем 63F45EF45RB65R6VR, 3 янв 2012.

  1. 63F45EF45RB65R6VR

    63F45EF45RB65R6VR New Member

    Публикаций:
    0
    Регистрация:
    26 окт 2011
    Сообщения:
    70
    Всех с Новым Годом и Всем привет

    вот допустим что при сплайсинге есть опасность что поток в это время выполняет эти самые 6 байт (предпологается сплайс работающей проги)
    например
    push ebp
    mov ebp, esp
    sub esp, 4
    и это не теоритическая опасность я писал специальный пример и падало именно из за того что поток во время сплайса
    исполнял эти 6 байт казалось бы можно заюзать NtSuspendProcess и проверить через GetThreadContext eip каждого потока чтобы он не указывал в эти самые 6 байт это работает правда незнаю насколько это правильно но интересно другое что после NtSuspendProcess сколько бы я не проверял eip уже никогда не указывает на эти 6 байт такое ощущение что после NtSuspendProcess потоки прерываются где то в ядре и впринципе не способны указывать на usermode адреса или я ошибаюсь ? надо или не надо после NtSuspendProcess проверять еще и eip каждого потока ? потому что сколько бы я не пытался поймать поток на первых 6 байтах после NtSuspendProcess у меня не получилось и выходит что можно просто замарозитть процесс NtSuspendProcess и ставить сплайс и потом разморозить и так все нормально будет или я ошибаюсь ?
     
  2. shchetinin

    shchetinin Member

    Публикаций:
    0
    Регистрация:
    27 май 2011
    Сообщения:
    715
    63F45EF45RB65R6VR
    На этих шести байтах поймать поток не реалистично, хотя бы ловить на цикле ...
    Вовсе и не всегда будут ядра ...
     
  3. Malfoy

    Malfoy New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2012
    Сообщения:
    698
    У меня терпения не хватило до конца дочитать..
    A. Изменять атомарно. Не универсально.
    B. Маршрутизация. Копируем в буфер код и переключаем на него тред, каждый тред.