ВНИМАНИЕ! ВЫ ИСПОЛЬЗУЕТЕ ЭТУ ПРОГРАММУ НА СВОЙ СТРАХ И РИСК. АВТОР НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ ЗА ЛЮБУЮ ВОЗМОЖНУЮ ПОРЧУ ИНФОРМАЦИИ, ВОЗНИКШУЮ В РЕЗУЛЬТАТЕ ИСПОЛЬЗОВАНИЯ ЭТОЙ ПРОГРАММЫ. ПОЖАЛУЙСТА ПРОЧИТАЙТЕ ФАЙЛ LICENSE.TXT ДЛЯ ПОДРОБНОЙ ИНФОРМАЦИИ.
ВАЖНО! Данная программа может вносить изменения в исполняемые файлы сторонних разработчиков, фирм и компаний. В результате этого Вы можете нарушить условия лицензионного соглашения программ о "не допустимости модификации программы и ее частей". Пожалуйста, перед тем, как применять данную программу для модификации любых сторонних исполняемых файлов, ознакомьтесь с условиями лицензии этих программ.
СОДЕРЖАНИЕ 1. ОПИСАНИЕ 2. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ 3. ПРАКТИЧЕСКАЯ ЧАСТЬ 4. ПРИНЦИП РАБОТЫ ICP 5. РАБОТА С ПРОГРАММОЙ 5.1 РАБОТА С ПРОГРАММОЙ - ОПЦИИ 5.2 РАБОТА С ПРОГРАММОЙ - СКАНИРОВАНИЕ (ПОИСК) 5.3 РАБОТА С ПРОГРАММОЙ - ПАТЧИНГ 6. БЛАГОДАРНОСТИ 7. АВТОР
1. ОПИСАНИЕ Программа Intel Compiler Patcher (далее ICP) предназначена для поиска исполняемых файлов, скомпилированных с помощью Intel C++ Compiler, с возможностью дальнейшего отключения "диспетчера процессора" в найденных файлах. ICP может повысить производительность таких программ на процессорах, отличных от Intel.
2. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ Компилятор для программного кода может выдавать несколько версий машинного кода, каждая из которых оптимизирована для определённого процессора и набора инструкций, например, SSE2, SSE3, и т.д. Система включает в себя функцию, которая определяет, на каком типе процессора она запущена и выбирает самую подходящую версию. Эта функция называется диспетчером процессора. Диспетчер процессора Intel проверяет не только набор инструкций, поддерживаемый процессором, но также идентификатор производителя процессора. Если идентификатор — строка «GenuineIntel», то выбирается наиболее оптимальный вариант кода. Но если процессор не от Intel, то в большинстве случаев будет выбран самый медленный из возможных вариантов, даже если процессор полностью совместим с лучшей версией.
3. ПРАКТИЧЕСКАЯ ЧАСТЬ Часть функции диспетчера задач от компиляторов Intel представляет из себя код вида:
[..skip..] mov eax, [ebp][-0008] cmp eax, 0756E6547 ;"uneG" ; Проверка на "Genu" jne not_intel ; если не равно, уходим на not_intel mov eax, [ebp][-0010] cmp eax, 049656E69 ;"Ieni" ; Проверка на "ineI" jne not_intel ; не равно - not_intel mov eax, [ebp][-0014] cmp eax, 06C65746E ;"letn" ; Проверка на "ntel" jne not_intel ; не равно - not_intel mov edx, 000000001 ; тот самый секретный байт jmps next not_intel: xor edx, edx ; а здесь 0, для всех не-интел процессоров next: [..skip..]
Здесь видно, что происходят три сравнения с сигнатурами "Genu", "ineI", "ntel" и если все три проверки завершились удачей, регистру EDX присваивается значение "1" (один) - процессор от компании Intel. В противном случае - "0" (ноль) - процессор от любых других производителей. Из этого следует, что если отключить данные проверки, или заменить их на условие, которое всегда будет верно, на выходе в регистре EDX будет содержатся "1" (один) не зависимо от типа процессора.
4. ПРИНЦИП РАБОТЫ ICP ICP базируется на алгоритме оригинального патчера от M. D Mackey (C) 2004 на языке Perl: в исполняемом файле производится поиск на наличие сигнатур команд сравнения, например 81 fa 47 65 6e 75 (cmp edx, 0756E6547), и последующей их заменой на команды вида testl edx, 000000000 (f7 c2 00 00 00 00). Условие testl edx, 00000000 всегда будет верным, а значит в EDX будет всегда значение "1" (один), не зависимо от полученной ранее командой CPUID сроки. Таким образом программа всегда будет считать, что она выполняется на процессоре от фирмы Intel. Регистры у команд сравнения могут быть различными, в зависимости от версий компиляторов. ICP проверяет сигнатуры команд сравнения с регистрами: EAX, EBX, ECX, EDX, EBP, ESI, EDI и [EBP][offset].
5. РАБОТА С ПРОГРАММОЙ Интерфейс программы состоит из главного окна, на котором располагаются кнопки управления программой, список найденных файлов и ниже - информация о каждом найденном файле. Работа с программой сводится к двум основным этапам: 1) непосредственно сканирование (поиск) файлов и 2) отключение диспетчера процессора в найденных файлах (патчинг).
5.1 РАБОТА С ПРОГРАММОЙ - ОПЦИИ Кнопка "Опции" предоставляет возможность настроить параметры поиска и некоторые другие параметры:
"Минимальный размер" - Минимальный размер сканируемых файлов. По умолчанию равен 500 байтам. Изменить в меньшую сторону параметр нельзя, поскольку вряд ли Вам встретится исполняемый файл в Windows меньше пятиста байт.
"Максимальный размер" - Максимальный размер сканируемых файлов. По умолчанию равен 100 Mb. Уменьшение этого параметра приведет к повышению быстродействия сканирования, так как ICP загружает ПОЛНОСТЬЮ каждый файл в оперативную память.
"Искать файлы с не одинаковыми регистрами" - Этот параметр следует объяснить подробнее. Обычно, процедура проверки типа процессора в компиляторах Intel состоит из трех команд сравнения сигнатур "Genu","ineI","ntel" с одинаковым регистром, то есть например только с EAX или только с EDX и тд. Однако, встречаются исполняемые файлы в которых проверка сигнатуры производится с различными регистрами, например: cmp eax, "Genu"; cmp ebx, "ineI"; cmp edx, "ntel". Такой алгоритм сравнения обычно применяется просто для идентификации процессора и не указывает на принадлежность программы к Intel Compiler'у. С другой стороны, в программе может сначала встретится обычная проверка диспетчера процессора Intel (сравнение с одним и тем-же регистром), а где-то в конце программы уже собственный алгоритм проверки типа процессора, написанный программистом. По умолчанию данный параметр выключен. Не рекомендуется его включение, если Вы не понимаете, что Вы делаете.
"Искать файлы с нечетным количеством совпадений" - Процедура проверки в диспетчере процессора Intel состоит из трех команд сравнения. Так например, если в программе встречается только одна команда сравнения cmp eax,"Genu" это говорит о не принадлежности программы к Intel Compiler'у, а о собственной функции определения типа процессора написанной программистом. Однако, как и в предыдущем случае, возможен вариант, когда в начале программы встречается обычная проверка диспетчера процессора Intel (cmp eax, "Genu"; cmp eax, "ineI"; cmp eax, "ntel"), а где-то в конце программы - одинокая команда cmp ebx,"Genu". По умолчанию данный параметр выключен. Не рекомендуется его включение, если Вы не понимаете, что Вы делаете.
"Делать бекап" - Делать резервное копирование файлов перед их изменением (патчем). Файл копируется в ту же директорию, где находится оригинальный файл, с расширением .orig По умолчанию данная функция включена.
"Расширения файлов" - указывает, файлы с какими расширениями следует искать. По умолчанию ICP ищет и проверяет все файлы с расширениями ".EXE", ".DLL", ".ACM", ".AX", ".CPL", ".OCX". Каждое расширение должно начинаться с точки, разделителем служит символ ";" (точка с запятой).
"Язык" - Язык интерфейса программы.
"Автоматическая прокрутка файл-листа" - Позволяет автоматически прокручивать в низ список файлов при сканировании. По умолчанию включена.
"Влючить лог-файл" - Позволяет включить протоколирование действий программы. Лог файл имеет имя "icc_patch.log" и создается в директории, откуда запускалась программа ICP.
5.2 РАБОТА С ПРОГРАММОЙ - СКАНИРОВАНИЕ (ПОИСК) ВНИМАНИЕ! Перед началом сканирования файлов рекомендуется отключить анти-вирусный резидентный сканер. Так как ICP работает с исполняемыми файлами (производит открытие файла и его чтение в память), то как правило, анти-вирусный резидентный сканер перехватывает обращения к файлам и предварительно сканирует их на вирусы, тем самым значительно замедляя поиск файлов. ICP НЕ запускает загруженный исполняемый файл на выполнение, а значит не может активировать вредоносный код, случайно встреченный в программах.
Для поиска файлов, скомпилированных Intel Compiler'ом служит кнопка "Поиск". Вам предлагается выбрать начальный каталог, откуда начнется сканирование. Процесс сканирования отображается в нижней статусной строке. Найденные файлы помещаются в центральное окно программы. Для просмотра информации о файле и найденных в нем сигнатур необходимо нажать на имени файла в списке файлов. Можно остановить процесс сканирования кнопкой "Стоп".
5.3 РАБОТА С ПРОГРАММОЙ - ПАТЧИНГ После сканирования необходимо отметить нужные файлы галочками в списке и нажать кнопку "Патчить".
6. БЛАГОДАРНОСТИ В данном документе частично использован перевод статьи "Will Intel be forced to remove the "cripple AMD" function from their compiler?" Алексея Романова. Based on Perl version (C) Copyright M. D Mackey 2004. e-mail: mark@swallowtail.org Third party library: TaskEx v1.4 (C) Alexander Alexeev AsyncCalls (C) 2006-2009 Andreas Hausladen RXLib port (C) Oleg Fedorov
7. АВТОР Written by Tronix (C) 2010. e-mail: tronix286@rambler.ru