GetThreadContext

Тема в разделе "WASM.BEGINNERS", создана пользователем readme, 7 ноя 2005.

  1. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    вот чтото застопорило меня

    .data

    context CONTEXT <>

    .code

    start:

    call GetCurrentThread

    invoke GetThreadContext, eax, offset context



    почемуто неработает, CONTEXT и встеке пытался размещать тоже самое
     
  2. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    readme

    MSDN:

    You cannot get a valid context for a running thread. Use the SuspendThread function to suspend the thread before calling GetThreadContext.



    If you call GetThreadContext for the current thread, the function returns successfully; however, the context returned is not valid.
     
  3. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    вот делаю так

    .data

    context CONTEXT <>

    ThreadID dd ?

    .code

    proba proc

    nop

    ret

    proba endp

    start:

    invoke CreateThread,0,0, offset proba,0,CREATE_SUSPENDED ,offset ThreadID

    invoke GetThreadContext, eax, offset context

    тоже чтото неработает



    заодно подскажи про мсдн http://msdn.microsoft.com/library/rus/

    вот ввожу в левый поиск GetThreadContext нечего ненаходит в каком разделе искать?
     
  4. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    1. Нужно делать прежде SuspendThread.

    2. Твоя ссылка - это перевод MSDN, там очень мало всего. Топай на http://msdn.microsoft.com/library/.

    3. Скачай какой-нибудь справочник по WinAPI, сильно облегчишь себе и другим жизнь. В сети их много (самый распространённый - Win32.hlp из справки от продуктов Борланд, 16 мб), есть и попытки перевода, но не связывайся с этим.
     
  5. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    за ссылку спасибо

    хм зачем делать SuspendThread когда он и так создаётся такой CREATE_SUSPENDED

    чтот неработает всёравно ошибок вроденет lasterr показывает всё нормально

    [​IMG] _1289297035__GetThreadContext.asm
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    readme

    Сорри, не заметил флага сразу. Но у меня работает :)
     
  7. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    хм, но я в ольке сматрю структура context так и остаётся понулям у меня,непойму
     
  8. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Ну, глянь аттач под отладчиком. У меня XP, всё ок, даже без лишнего вызова SuspendThread.

    [​IMG] _112690901__tr.zip
     
  9. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Выравнивать надо.
     
  10. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    чтото я непонимаю но у меня там одни нули, нечего неизменилось

    под софтайсом сматрел?

    я под олей
     
  11. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    volodya

    В его коде CONTEXT первым в секции .data, куда уж больше тут выравнивать.



    readme

    Ты аттач смотрел? Работает?
     
  12. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    да тот что ты дал, в отладчике где (он у тебя с адреса 13000 начинается)CONTEXT там данные так понулям и остаются

    , нечего непойму

    а ты в каком отладчике сматрел? может у меня что нетак
     
  13. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    Вообще то перед вызовом GetThreadContext не мешало бы context.ContextFlags = CONTEXT_FULL установить. Иначе получается чего просишь, то и получаешь - одни нули ;)
     
  14. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    Хм. А в XP, значит, не обязательно?
     
  15. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    спасибо заработало, у меня XP

    а про ContextFlags его нужно заполнять перед вызовом GetThreadContext я так понял какие регистры мне нужно получить
     
  16. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    IceStudent

    > "А в XP, значит, не обязательно?"

    Почему же ? Под XP в твоем tr.exe ContextFlags = 0 и соответственно в context ничего не пишется. Стоит перед вызовом записать валидные флаги - все OK - что попросишь, то винда тебе и выдаст



    К сожалению, в XP до внутренностей GetContextThread -> ZwGetContextThread не доберешься, а вот в win 98 в дизасме все прекрасно видно - последовательно проверяются флаги CONTEXT_XX, если флаг установлен - копирование, если нет - дальше
     
  17. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine


    Я же говорил, у меня этот пример отрабатывает нормально, то есть, CONTEXT заполняется.
     
  18. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    А а у нас с readme тоже "нормально", т.е. не заполняется ;)

    Может от SP? зависит или от отладчика - не знаю каким образом, но чем черт не шутит ;) А ты ведь так и не ответил - в каком отладчике смотрел. А лучше конечно без отладчика - вывести значение какого-нить регистра...
     
  19. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    проверяно с отладчиком и без один результат

    проверил на одном регистре eax

    [​IMG] 599464833__GetThreadContext.asm
     
  20. readme

    readme New Member

    Публикаций:
    0
    Регистрация:
    2 июл 2005
    Сообщения:
    271
    Адрес:
    Russia
    вот ещё вот этот пример каторый в атаче будет стабильно работать в xp и 2000?

    и какой способ есть лёгкий узнавания версии ос

    [​IMG] _1469528697__nativ GetThreadContext.asm