Адреса GDT и IDT.

Discussion in 'WASM.WIN32' started by n0name, May 2, 2005.

  1. n0name

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    Использую sgdt/sidt для определения адреса GDT/IDT. Но вот проблема: вызываю 1 раз возвращается норм. значение 8003F400. Вызываю другой раз возвращается другое значение - F9515560. Одно из этих 2х значений. Делал дамп памяти по этим адресам, память различается несколькими байтами.
     
  2. _BC_

    _BC_ БЦ

    Blog Posts:
    0
    Joined:
    Jan 20, 2005
    Messages:
    759
    Это случаем не под vmware делается ?
     
  3. Chingachguk

    Chingachguk New Member

    Blog Posts:
    0
    Joined:
    Sep 2, 2002
    Messages:
    340
    В 98-ой idt меняется, если я ничего не забыл. И тот, кто что-то перехватывает, вынужден обрабатывать сообщения от vmm в своем коде.
     
  4. n0name

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    _BC_, _Chingachguk_: всё происходит в WinXP SP0, чисто под виндой, без эмулятора.
     
  5. Chingachguk

    Chingachguk New Member

    Blog Posts:
    0
    Joined:
    Sep 2, 2002
    Messages:
    340
    Ну и пусть себе меняется... Ты что делаешь ? Если перехват какого-нибудь int, то раз она меняется, то и тебе придется обработчик какой-то вешать. Так не только я делал, в реальной защите такое видел.
     
  6. Wolfgang

    Wolfgang New Member

    Blog Posts:
    0
    Joined:
    May 11, 2005
    Messages:
    82
    Location:
    Russia
    А как отследить смену IDT? То есть как при этом получить какое-то уведомление?
     
  7. Nimnul

    Nimnul New Member

    Blog Posts:
    0
    Joined:
    Feb 21, 2005
    Messages:
    136
    Location:
    не Китай
    n0name



    Когда происходит попытка записи в область памяти ядра происходит Copy-On-Write, измененый модуль целиком копируется в область памяти "наглово" процесса.
     
  8. Nimnul

    Nimnul New Member

    Blog Posts:
    0
    Joined:
    Feb 21, 2005
    Messages:
    136
    Location:
    не Китай
    n0name



    Видать то, что ты смотриш меняется...
     
  9. Nimnul

    Nimnul New Member

    Blog Posts:
    0
    Joined:
    Feb 21, 2005
    Messages:
    136
    Location:
    не Китай
    Wolfgang



    1. Хукать исключение(защита от записи)

    2. В цикле смотреть не изменилось ли чего



    2й способ помойму единственный в ринге 3 :)
     
  10. alpet

    alpet Александр

    Blog Posts:
    0
    Joined:
    Sep 21, 2004
    Messages:
    1,221
    Location:
    Russia
    Ядро меняет соответствующие адреса с помощью lidt, lgdt. Соответственно надо эти комманды поискать и поставить бряки на них, иначе действительно только в цикле ждать изменения.
     
  11. Wolfgang

    Wolfgang New Member

    Blog Posts:
    0
    Joined:
    May 11, 2005
    Messages:
    82
    Location:
    Russia
    На самом деле на многопроцессорных системах у каждого проца своя таблица IDT. То есть вместо того, чтобы что-то хучить, достаточно определить, каким процом выполняется данный поток.
     
  12. n0name

    n0name New Member

    Blog Posts:
    0
    Joined:
    Jun 5, 2004
    Messages:
    4,336
    Location:
    Russia
    А не может быть это из-за использования HT?

    Я сразу не подумал. Вель для Винды это 2 проца.

    Возникает вопрос - для каждого процессора - своя GDT?
     
  13. infern0

    infern0 New Member

    Blog Posts:
    0
    Joined:
    Oct 7, 2003
    Messages:
    811
    Location:
    Russia
    n0name

    ессно
     
  14. alpet

    alpet Александр

    Blog Posts:
    0
    Joined:
    Sep 21, 2004
    Messages:
    1,221
    Location:
    Russia
    Можно проверить, задав через SetProcessAffinityMask чтобы процесс работал только на первом процессе, другое дело что сомнительно что таблицы IDT разных процессоров так "далеко" друг от друга отстоят, да и на GDT указатель в таком случае не должен менятся.