.NET vs GetThreadContext
От: -Forester-  
Дата: 19.04.08 19:57
Оценка:
Коллеги, всем всего доброго!

Похоже, что .NET прибавил интеллекта функции GetThreadContext.

Задача типовая — создаем процесс с CREATE_SUSPENDED, через вызов GetThreadContext определяем точку входа в exe и прописываем туда свой код. В случае не-.NET процессов все работает как и планировалось. А вот если с .NET такую штуку проделать, то внедренный код не получает управления.

Если взять простой отладчик (MSVS2005) и после вызова GetThreadContext посмотреть в CONTEXT.Eax, то там будет адрес, похожий на точку входа, типа 0x0004.....
А вот если помимо CONTEXT.Eax посмотреть еще и CONTEXT.Eip, взять значение CONTEXT.Eip, пойти в WinDbg и сделать bu на это значение, то WinDbg в этой точке в Eax будет показывать адрес в аккурат _CorExeMain. И при трассировке прямиком туда и попадет.

Я вижу три варианта того, что происходит.

    1. Либо GetThreadContext стал очень умным и подменяет значение в EAX, когда там адрес _CorExeMain, на адрес точки входа.
    2. Либо WinDbg стал очень умным и подменяет значение в EAX на _CorExeMain (типа все равно по стандартной заглушке туда попадешь).
    3. Либо меня глючит и обе машины, где я это наблюдал, тоже. Обе XP SP2.

Вы за какой вариант голосуете?
Может быть у вас есть свои варианты?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.