книги хакеры / журнал хакер / 115_Optimized
.pdf
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
|
hang |
e |
|
|
|
|
|
|
|
|
|
C |
E |
|
|
|
|
|
|
|
C |
E |
|
|
|
|||||||
|
|
X |
|
|
|
|
|
|
|
|
|
X |
|
|
|
|
|
||||||
|
- |
|
|
|
|
|
d |
|
|
|
- |
|
|
|
|
d |
|
||||||
|
F |
|
|
|
|
|
|
|
i |
|
|
|
F |
|
|
|
|
|
|
i |
|
||
|
|
|
|
|
|
|
|
t |
|
|
|
|
|
|
|
|
|
t |
|
||||
P |
D |
|
|
|
|
|
|
|
|
o |
|
P |
D |
|
|
|
|
|
|
|
o |
||
|
|
NOW! |
r |
|
|
|
|
NOW! |
r |
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
to BUY |
|
>> ХАКЕР.PRO |
|
|
|
|
to BUY |
|
|
|
|
|
|
||||||
w |
|
|
|
|
|
|
|
|
|
m |
|
w |
|
|
|
|
|
|
|
|
m |
||
w Click |
|
|
|
|
|
|
o |
|
w Click |
|
|
|
|
|
o |
||||||||
|
w |
|
|
|
|
|
|
|
|
|
|
|
w |
|
|
|
|
|
|
|
|
||
|
. |
|
|
|
|
|
|
.c |
|
|
|
. |
|
|
|
|
|
.c |
|
||||
|
|
p |
df |
|
|
|
|
e |
|
|
|
|
p |
df |
|
|
|
e |
|
||||
|
|
|
|
|
g |
|
|
|
|
|
|
|
|
g |
|
|
|
||||||
|
|
|
|
n |
|
|
|
|
|
|
|
|
|
n |
|
|
|
|
|||||
|
|
|
|
-xcha |
|
|
|
|
|
|
|
|
|
|
|
-x cha |
|
|
|
|
|
||
|
|
|
|
Soft-Ice считает, что остановился внутри процесса VMwareService. Но колонка адресов |
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
указывает, что мы находимся в одном из драйверов |
Ловля драйвера на живца |
|
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Впрочем, если они ее не устранили, это не повод для паники, |
Теперь перейдем к более сложным вопросам, зарывшись в |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ибо, как мы уже говорили, ресурсоемкие операции типа крип- |
недра драйверов. SoftICE всегда отображает имя процесса |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
тографии занимают намного больше времени, чем, например, |
в правом нижнем углу, вне зависимости от того, находится |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
отдача пользователю файла в том виде, в котором он записан |
ли система на прикладном (user-land) или ядерном (kernel- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
info |
на диске. |
space) уровне. А что у нас в ядре? Например, драйвера, |
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
Достаточно часто приходится сталкиваться с горячими |
которые могут вообще не иметь отношения к отображаемому |
|
|
|
|
|
|
|
|
||||||
|
|
|
|
• С SoftICE в руках |
точками, не имеющими ничего общего с вычислениями. Как |
процессу. Просто драйвер получил управление (скажем, по |
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
поиск «бутылочного |
правило, это циклы, ожидающие наступления определенных |
прерыванию, поступившему извне) именно в тот момент, когда |
|
|
|
|
|
|
|||||||||||
|
|
|
|
горлышка» занимает |
событий. Правильно спроектированная программа никогда |
система переключила контекст на данный процесс. А может |
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
буквально считан- |
не прибегает к такому тупизму. Она просто вгоняет поток в сон, |
быть, совсем другой процесс прямо или косвенно иниции- |
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
ные минуты, причем |
указывая, при каких обстоятельствах тот должен проснуться. |
ровал вызов драйвера и тут же заснул, система переключила |
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
результат абсолютно |
Конечно, распознать циклы, не имея опыта дизассемблиро- |
контекст на следующий процесс, а драйвер… как бы выра- |
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
надежен. |
вания, не так-то легко, но их можно запеленговать и по диа- |
зиться деликатнее… если не завис, то конкретно застрял. |
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
пазону принадлежащих им адресов. Если они появляются с |
Соответственно, при вызове отладчика мы будет оказываться |
|
|
|
|
|
|
|
|||
|
|
|
|
• «Затор» возникает, |
огромным отрывом от всех остальных, отправляем программу |
в нем чаще, чем в остальных, но имя процесса, отображаемое |
|
|
|
|
|
|
|
||||||||||
|
|
|
|
когда определенный |
на свалку, благо практически для всего ПО можно подобрать |
в нижнем углу, тут не причем. |
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
узел компьютера |
аналог. |
Определить, что система находится в kernel-space, очень |
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
(процессор, память, |
В качестве наглядного примера рассмотрим простую програм- |
просто. В конфигурации по умолчанию нижняя половина |
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
жесткий диск и т.п.) |
му, мотающую холостой цикл, исходный код которой укладыва- |
адресного пространства принадлежит прикладным програм- |
|
|
|
|
|
|
|
||||||||||
|
|
|
|
ограничивает поток |
ется в одну строку на Си: «main(){while(1);}». |
мам, а верхняя — ядру. Соответственно, если мы наблюдаем |
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
данных. Это можно |
Откомпилируем ее без опций оптимизации (в случае MS VC |
колонку адресов < 80000000h, отладчик находится внутри |
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
сравнить с тем, как |
это: «cl.exe hCPUl.c»), чтобы оптимизатор не выбросил |
прикладных программ, в противном случае — это ядро или |
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
узкое горлышко огра- |
ненужный с его точки зрения цикл while, и запустим ее на |
один из его драйверов. Селектор в прикладном режиме равен |
|
|
|
|
|
|
|
||||||||||
|
|
|
|
ничивает вытекающую |
выполнение. На однопроцессорных машинах мы получим |
1Bh и 08h в режиме ядра. |
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
из бутылки воду. |
100% загрузку по индикатору. На двухпроцессорных (или |
Примечание: при указании ключа 3GB в boot.ini ядро с |
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
однопроцессорных с двумя ядрами) — 50%. Соответственно, |
драйверами «ужимается» до 1 Гб. Получается, что граница |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
• Увеличение объема |
четыре процессора/ядра дадут всего лишь 25%, хотя SoftICE |
ядерных земель отодвигается на 40000000h. Во всяком случае, |
|
|
|
|
|
|
|||||||||||
|
|
|
|
оперативной памяти |
при каждом вызове будет всплывать в одном и том же процес- |
в 32 битном режиме все происходит именно так, а в 64 бит- |
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
может быть действен- |
се — hCPUl, исполняющемся в одном и том же месте — в цикле |
ном — совсем не так (но поскольку SoftICE работает только в |
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
ным решением для |
while. То есть, согласно SoftICE, загрузка процессора близка к |
32 битном режиме, оставим проблемы 64 битных серверов за |
|
|
|
|
|
|
|
||||||||||
|
|
|
|
некоторых видов «за- |
100%. Это одновременно верно и нет. С одной стороны, поток, |
рамками статьи). |
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
торов», но не решает |
в котором исполняется цикл while, нагружает всего лишь один |
Допустим, SoftICE остановится в некотором процессе (к |
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
всех проблем. |
процессор/ядро из всех имеющихся, совсем не препятствуя |
примеру, VMwareService), но столбец адресов выходит за |
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
исполнению потоков других процессов на оставшихся процес- |
пределы 80000000h, и текущая исполняемая команда, вы- |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
• «Заторы» сети явля- |
сорах (ядрах). Но реальное торможение намного больше, чем |
деленная инверсной строкой, расположена по BFF0ACE2h. |
|
|
|
|
|
|
|
||||||||||
|
|
|
|
ются самыми сложны- |
это следует из простых арифметических расчетов. Системный |
Как узнать, какому из драйверов она принадлежит? Даем |
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
ми для обнаружения, |
планировщик распределяет очереди потоков равномерно |
команду «DRIVER»или «MOD»и смотрим на базовые адреса |
|
|
|
|
|
|
|
||||||||||
|
|
|
|
так как сеть обычно |
между всеми процессорами (ядрами), и если один из про- |
загрузки драйверов. К сожалению, SoftICE не сортирует их |
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
состоит из каналов |
цессоров (ядер) захватывается «неправильным» потоком, |
по списку возрастания, но этот недостаток легко исправить. |
|
|
|
|
|
|
|
||||||||||
|
|
|
|
связи, коммутаторов, |
планировщик начинает оптимизировать очередь потоков. |
Достаточно выйти из SoftICE, запустить поставляемый |
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
маршрутизаторов, |
Эффективность такой оптимизации невелика, в чем нетрудно |
вместе с ним Symbol Loader и сохранить историю команд в |
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
серверов, клиентов, |
убедиться, измерив реакционноспособность сервера с запу- |
текстовой файл. Затем посредством MS Word или MS Excel |
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
кучи протоколов и т.д. |
щенной программой hCPUl и без нее. |
преобразовать ее в таблицу. |
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
130 |
|
xàêåð 07 /115/ 08 |
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|