пятница, 11 ноября 2016 г.

TeamViewer 100% - 50% CPU

TeamViewer service high CPU usage 100% 50%

TeamViewer высокая загрузка использование процессора 100% 50% нагружает процессор

Заголовки для поисковых ботов

В общем достал меня TeamViewer своей загрузкой процессора даже в то время, когда нет подключений. Имея небольшие познания в инструментарии для отладки, профилирования и ассемблера x86 попытался понять в чем причина.

Пришел к такому выводу - код обработки сетевых соединений в TeamViewer не учитывает какие-то варианты поведения вызываемых WinAPI функций в следствии чего "цикл" обработки соединений вида
while (true) {
    if (some_condition) {
        sleep(n)
    }
    connect(,,,,)
    WSARecv(,,,,)
}
выполняется с высокой частотой т.к. функция connect моментально возвращает управление или что-то типа того и к тому-же условие some_condition перестаёт выполняться и функция sleep также не получает управление.

Подключился к TeamViewer'у профайлером, нашел место откуда активно вызывается connect, подключился ollydebugger'ом и интуитивным путём заNOPил команды условного перехода some_condition. Там была какая-то проверка кодов возврата или что-то подобное, понадеявшись на авось - деактивировал эти команды и запустил в RUN процесс.

Всё, больше не зависает.

Надеюсь кто-то из опытных исследователей изучит этот вопрос и подробнее распишет, а если  и нет то и ладно :). Кому помогло, просьба отписаться в комментариях.

Опыты проводились 11 ноября 2016г., на TeamViewer версии 11.0.1159.0 

Скриншот исправленного места:
 

Комментариев нет:

Отправить комментарий