|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Янв 24, 2004 23:27:32 Имеем следующий код API функции IsDebuggerPresent: .text:77E72E92 IsDebuggerPresent proc near ; CODE XREF: .text:77EC8EBCp .text:77E72E92 mov eax, large fs:18h .text:77E72E98 mov eax, [eax+30h] .text:77E72E9B movzx eax, byte ptr [eax+2] .text:77E72E9F retn .text:77E72E9F IsDebuggerPresent endp Вопрос в следующем, для всех ли процессов в системе то что находится в fs:18h будет одинаково? |
|
|
Дата: Янв 25, 2004 00:27:42 нет там структура какая то |
|
|
Дата: Янв 25, 2004 01:05:15 Ты чего, земеля, с дуба упал? Каждый процесс имеет свою ВИРТУАЛЬНУЮ ПАМЯТЬ. Набор VA обеспечивается разными PTE! Вот если бы ты спросил: для всех ли ПОТОКОВ в ПРОЦЕССЕ то, что находится в fs:18h будет одинаково, то ответ мой был бы другим :) |
|
|
Дата: Янв 25, 2004 01:05:40 · Поправил: Grenader [мда, косяк вышел - это я с дуба упал] |
|
|
Дата: Янв 25, 2004 01:06:10 volodya гм. |
|
|
Дата: Янв 25, 2004 01:07:15 Что за "гм"? |
|
|
Дата: Янв 25, 2004 01:09:48 · Поправил: Grenader [туда же...] |
|
|
Дата: Янв 25, 2004 01:34:53 Я не понял каков ответ-то всё-таки...? В реале там всегда один и тот же адрес. |
|
|
Дата: Янв 25, 2004 01:43:48 Это понятно что каждый процесс имеет свою виртуальную память, но например kernel32.dll в каждом процессе грузится по одному и тому же адресу, хотя это нигде и не документировано, на этом кстати основана фишка с CreateRemoteThread, вот я и думаю если я в своём процессе проверю fs:18h, могу ли я рассчитывать что в другом процессе там будет находиться тот же адрес?? |
|
|
Дата: Янв 25, 2004 02:07:36 У ВСЕХ процессов по ВИРТУАЛЬНОМУ (еще раз - с физическим он не имеет ничего общего) адресу fs:18 лежит указатель на TEB (текущего потока, ессно). Понятно, что если потоков несколько, то DWORD по этому адресу будет отличаться в каждом из них. Другое дело, что в каком потоке не смотри - ты все равно можешь получить указатель на PEB (как это и делает код "mov eax, large fs:18h; mov eax, [eax+30h]"). А смещения в PEB, ясное дело, постоянны. В принципе, и адрес PEB постоянен - но ориентироваться на это нельзя, т.к. он может изменяться в разных версиях NT. И еще раз - для каждого процесса в системе селекторы настроны так, что в сегмент fs отображаються оределенные системные структуры. |
|
|
Дата: Янв 25, 2004 02:08:19 · Поправил: Quantum Asterix Виртуальный адрес один и тотже, но физический адрес ячейки будет различным. ЗЫ: Пока я тут репу чесал... два новых поста появилось. |
|
|
Дата: Янв 25, 2004 02:11:08 Quantum смотри выше - не ты один :-/ |
|
|
Дата: Янв 25, 2004 02:19:59 Grenader Ну накрутил, ты сам то понял что написал... :-) Мля..., я спрашиваю теперь совсем тупо, там будет находится один и тот же DWORD?? Причём здесь другая система, в другой системе ясно DWORD будет другой, но опять же должен он быть одинаков для всех процессов или нет?? |
|
|
Дата: Янв 25, 2004 02:24:36 Quantum Я с тобой полностью согласен. |
|
|
Дата: Янв 25, 2004 02:33:35 Asterix в каждом процессе есть как минимум один поток. так? адрес структуры TEB для этого потока и храниться по адресу fs:18. для первого потока он фиксирован, а если создать еще потоки? при обращении из второго потока, мы получим, конечно, ДРУГОЙ DWORD, указывающий на ДРУГУЮ структуру. повторяю - при обращении из РАЗНЫХ потоков в предлах одного процесса мы получим РАЗНЫЕ DOWRD'ы! это все игра с селекторами, PTE и прочей виртуальной ерундой. но! поскольку у каждого процесса PEB есть только в одном экземпляре, ВСЕ структуры TEB (в данном процессе) в поле TEB.ProcessEnvironmentBlock, будут содержать ОДИН И ТОТ ЖЕ DWORD. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.055 |