Dword c что это: Введение в реверсинг с нуля используя IDA PRO. Часть 3

Содержание

Дневники чайника

Дневники чайника

Пятый день.
О словах и двойных словах
(форматы данных)

Не сказать чтоб эта тема была самая сложная, но то, что она самая запутанная - это 100%.

То, что я здесь напишу, довольно туго для восприятия, однако со временем всё уляжется. Не расстраивайтесь, если вдруг в этой главе покажется, что Ассемблер очень сложный, вспомните о таком фокусе.

Не каждый водитель знает, что для того, чтоб машина ехала вперёд, колесо в точке соприкосновения с дорогой должно двигаться назад. Хотя такая информация была сообщена каждому водителю и каждому человеку. Ну, едет машина и едет, какая разница, куда крутятся колёса. Это нужно знать только при смене колёс, чтоб не перепутать направленность резины, или во время ремонта.

Примерно такая же информация будет изложена в этой главе. На практике всё быстро усвоится, если вам придется сталкиваться с машинным кодом и данными.

Матрос, ты должен знать своего друга (со стороны потенциального противника) лучше, чем себя.

Бинарники организуются в отряды по восемь, эти отряды называются байтами. Запомнил?

Байт - это минимальная расчетная единица бинарной армии. Запомнил?

2 байта организуются в слово (word).

4 байта организуются в двойное слово (dword, а пОлно - double word).

Dword - это самый распространённый набор битов в Win32-программах. Так как:

Dword =4 байта = 32 бита.

В предыдущей программе мы столкнулись вот с такой строкой:

00000003: 66C70701020304      mov  d,[bx],004030201

"d," здесь как раз и заменяет dword.

Я объяснил, что когда операнд находится в квадратных скобках, при команде mov это означает, что нужно производить действие по адресу в памяти, указанному операндом. То есть в BX раньше должен быть положен адрес. В ходе выполнения этой строки BX не изменяется, изменится только память по адресу, указанному BX. Размер изменяемой памяти dword (4 байта, двойное слово).

Мы пишем и читаем текст по-европейски - слева направо. Но для чисел большинство людей использует арабскую запись - справа налево (хотя читаем числа тупо от старшей цифры =).

К великому огорчению, программистами был принят смешанный формат отображения данных. Каждый байт отображается по арабской системе, а целая группа байтов - по европейской. Выходит, что на экране мы видим разную запись. Если программа-дизассемблер или отладчик воспринимают группы байтов как ЦЕЛОЕ число, то оно отображается арабской записью, как в колонке команд Ассемблера: 04 03 02 01, а если речь идёт просто о нескольких байтах, то мы видим европейскую запись, только за букву принят целый байт, что и показано выше: 01 02 03 04. Всё это лишь вопрос отображения на экране или в документах. Например, если использовать запись цифровых значений от нижнего правого угла экрана до верхнего левого (справа налево, снизу вверх), то вообще ничего переворачивать не нужно! То есть если бы была принята запись "справа налево всё" или "слева направо всё", то подобных проблем не было бы вообще.

Допустим, мы набрали вот такую строку:

mov  word ptr [00000800h],0BBAAh

Здесь мы указали, что размер данных word (2 байта) и эти данные будут помещены в память по адресу 800h.

Объясню сейчас коротко.

Раз мы имеем заданный размер word (или как в Hiew'е "w,"), мы имеем некое ЦЕЛОЕ.

Младший байт (у нас AA) будет находиться по наименьшему адресу, а старший байт (BB) - по более старшему адресу.

Вот как эта строка будет выглядеть в Hiew'e:


Адрес     Байты              имя        операнды
00000000: C7060008AABB       mov      w,[0800],0BBAA

В колонке операндов - так, как мы вводили (число BBAAh). А вот в колонке байтов мы видим зеркальное расположение байтов операндов - 00 08, AA BB.

После выполнения такой команды в память байты запишутся вот так:
0800 AA (младший адрес - младший байт целого)
0801 BB (старший адрес - старший байт целого)

И точно так же устроены dword.

Допустим:

mov  dword ptr [00000800h],0DDCCBBAAh
0800 AA (0-й адрес - 0-й байт целого)
0801 BB (1-й адрес - 1-й байт целого)
0802 CC (2-й адрес - 2-й байт целого)
0803 DD (3-й адрес - 3-й байт целого)

Вопрос, который наверняка возник у всех (и я предполагаю, что у многих в нецензурной форме): "На... в смысле зачем?"

Это нужно для того, чтобы процессор забирал байты из памяти, начиная с младшего (так быстрее вычислять). Ведь получается, что адрес числовой переменной любого размера, хоть word, хоть dword, будет указывать на младший байт в числе, далее пойдёт следующий байт в числе, и самый старший байт в числе всегда окажется в конце. Вычислять процессору так значительно быстрее.

Я думаю, что многие читатели совсем запутались, тут есть только одно утешение: перекладывать байты в голове совсем не нужно. Чтобы получить целое число из байтов или, наоборот, из числа сложить байты, достаточно переключить режим отображения в программе. Мало того, при простом программировании можно забыть об этих премудростях и вспоминать лишь изредка.

Всё, из теории остались только циклы и стек, о них мы будем говорить завтра.

Матрос! Я что-то не заметил, чтоб ты разрабатывал кнопку F10!

Если ты хочешь стать капитаном собственного корабля, пусть даже и без гипердвигателя, ты должен отлаживать и отлаживать.

Послезавтра я увижу своё отражение в F10-key у тебя на клавиатуре или я высажу тебя на ближайшей заброшенной планете.

А чтоб было веселей давить на кнопку F10, загони в отладчик следующую программу (prax03.com).

Набивайте всё сами, только так можно научиться.

В Hiew'e она должна выглядеть так:

00000000: B80300     mov  ax,00003
00000003: CD10       int  010
00000005: B402       mov  ah,002
00000007: 8B167501   mov  dx,[0175]
0000000B: CD10       int  010
0000000D: FEC6       inc  dh
0000000F: 80C203     add  dl,003
00000012: 89167501   mov  [0175],dx
00000016: B409       mov  ah,009
00000018: BA5001     mov  dx,00150
0000001B: CD21       int  021
0000001D: 803E760119 cmp  b,[0176],019
00000022: 75E1       jne  000000005
00000024: B410       mov  ah,010
00000026: CD16       int  016
00000028: CD20       int  020

Но это не всё, теперь переключитесь на Hex-режим (F4) и добейте программу следующими байтами после всего кода. Это будут "данные".

00000020:                             20 20 20-20 20 20 20
00000030:  20 20 20 20-20 20 20 20-20 20 20 20-20 20 20 20
00000040:  91 E2 E0 AE-AA A0 20 E2-A5 AA E1 E2-A0 3A 20 20  Строка текста:
00000050:  2D 3D 80 E1-AC 3D 2D 24-20 20 20 20-20 20 20 20  -=Асм=-$
00000060:  20 20 20 20-20 20 20 20-20 20 20 20-20 20 20 20
00000070:  77 6F 72 64-21 00 00 21-77 6F 72 64-20 20 20 20  word!  !word
00000080:  20 20 20 20-20 20 20 20-20 20 20 20-20 20 20 20

На самом деле все эти пробелы (20h) программе НЕ нужны. Но когда вы будете смотреть программу в отладчике, они вам помогут.

Если у вас будет сдвиг хоть на байт, программа будет ошибочной. Поэтому проверьте, чтобы строка "-=Асм=-$" начиналась с 50h и, что ещё более важно, два нулевых байта (00 00) должны быть в файле по адресам 75 и 76h. Обязательно посмотрите в отладчике, что будет происходить с этими байтами (там они будут 175h и 176h).

Всё остальное здесь мишура и для выполнения программы совершенно не имеет значения.

При отладке могут появляться сообщения насчёт экрана... ну и фиг с ними. Если в CV опция Screen Swap ещё не выключена, то это обязательно нужно сделать.

Результат действия этой программы - вывод строк по диагонали от верхнего левого угла до нижнего правого угла.

Здесь очень много нового, и я надеюсь, вам будет интересно узнать, как работают новые команды CMP и JNE.

Попробуйте сами разобраться, что происходит в программе на практике. Как я уже писал, прерываний (команда int) при написании программ Win32 мы использовать не будем. Поэтому можете не заострять на них внимание. Достаточно знать, что это полезные подпрограммы, часть которых заложена ещё в BIOS (basic input/output system - базовая система ввода/вывода).

Я вынужден их использовать только для того, чтобы программа была полноценная и вы могли наглядно изучать главные команды Ассемблера.

В данном примере будут задействованы int 10h для очистки экрана (AL=3) и для расположения курсора текста (AH=2). Ну и int 21h для вывода текста на экран. Всё, других прерываний в уроках больше не будет. О них за долгие годы написано достаточно.

Вот как программа должна трактоваться (сразу скажу - про метки я всё объясню позже).


mov    ax,03      ; В AX значение 3 (параметр видеорежима 80x25)
int    010        ; Подпрограмма установит текстовый видеорежим 80х25,
                  ; при этом экран ДОС очистится

TuLuLa:           ; Всего лишь условная метка, в коде программы её нет 
                  ; Здесь могли быть любые буквы и ":"

mov    ah,02      ; В AH поместить 02 (для int10 - установка курсора)
mov    dx,[0175h] ; В DX загрузить значение из памяти по адресу 175h
                  ; в первый раз там нули, 
                  ; а в следующий проход значения будут увеличены

int    10         ; Установит текстовый курсор в положение, указанное в DX
                  ; DH - номер линии, DL - номер колонки (верх.
лев.- 0000) inc dh ; Прибавить 1 к значению DH add dl,03 ; Прибавить 3 к значению DL mov [0175h],dx ; Сохранить DH и DL в память по адресу 175h mov ah,09 ; Функция в int21h - вывод на экран с позиции курсора mov dx,00150h ; В DX адрес текстовой строки, заканчивающейся $ int 021 ; Подпрограмма выведет текстовую строку на экран cmp byte ptr [176h],19h ;Сверяется значение байта в памяти с числом 25d jne TuLuLa ;и если значения не равны, ;то прыг на выполнение от метки TuLuLa mov ah,010 ; а если были равны, то выполнится эта строка int 016 ; Подпрограмма дождётся нажатия клавиши ; и вернёт управление на следующую строку int 020 ; код завершения программы

Перед разбором этой программы я хочу рассказать о ключевом понятии в программировании - циклы.

Bitfry


Типы данных реестра

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

Поскольку реестр Microsoft Windows представляет собой сложную реляционную базу данных, вся информация, которая может храниться в конечных информационных контейнерах этой базы (параметрах), должна быть строго классифицирована. Классификация хранящихся в параметрах значений производится по типу данных, представляющих это значение. Всего насчитывается 11 таких типов

Раздел и подраздел могут содержать 0, 1 или несколько параметров, параметр по умолчанию, а также 0 или несколько подразделов. Каждый параметр имеет имя, тип и значение.

Три части параметра реестра всегда располагаются в определенном порядке: Имя, Тип данных, значение (например: [RegistrySizeLimit] [REG_DWORD] [0x8000000]).

В таблице, которая будет приведена ниже, содержится список типов данных, определенных и используемых Windows на сегодняшний день.

Максимальная длина имени параметра:

  • 16 383 символов для Windows Server 2003, Windows XP и Windows Vista
  • 260 символов ANSI или 16 383 символа Юникод для Windows 2000
  • 255 символов для Windows 95, Windows 98 и Windows Millennium Edition

Значения большого размера (больше 2048 байт) хранятся во внешних файлах, а в реестр заносится имя такого файла. Это способствует повышению эффективности использования реестра.

Максимальный размер параметра:

  • Вся доступная память для Windows NT 4.0/Windows 2000/Windows XP/Windows Server 2003/Windows Vista
  • 16 300 байт для Windows 95, Windows 98 и Windows Millennium Edition
Наименование Тип данных Назначение
REG_BINARY Двоичный Двоичные данные
REG_DWORD Числовой Число
REG_QWORD Числовой 64-разрядное числовое значение
REG_EXPAND_SZ Строковый Текст и переменные
REG_FULL_RESOURCE_DESCRIPTOR Строковый Идентификатор ресурса устройства
REG_LINK Строковый Путь к файлу
REG_MULTI_SZ Многостроковый Массив строк
REG_NONE Неизвестный Зашифрованные данные
REG_RESOURCE_LIST Строковый Список ресурсов устройств
REG_RESOURCE_REQUIREMENTS_LIST Строковый Идентификатор ресурса устройства
REG_SZ Строковый Текст

Ниже приводится назначение этих параметров.

REG_BINARY

Необработанные двоичные данные. Большинство сведений об аппаратных компонентах хранится в виде двоичных данных и выводится в редакторе реестра в шестнадцатеричном формате.

REG_DWORD

Данные, представленные целым числом (4 байта, 32 бита). Многие параметры служб и драйверов устройств имеют этот тип и отображаются в двоичном, шестнадцатеричном или десятичном форматах. Эквивалентами типа DWORD являются DWORD_LITTLE_ENDIAN (самый младший байт хранится в памяти в первом числе) и REG_DWORD_BIG_ENDIAN (самый младший байт хранится в памяти в последнем числе).

REG_EXPAND_SZ

Расширяемая строка данных. Эта строка представляет собой текст, содержащий переменную, которая может быть заменена при вызове со стороны приложения.

REG_MULTI_SZ

Многострочное поле. Значения, которые фактически представляют собой списки текстовых строк в формате, удобном для восприятия человеком, обычно имеют именно этот тип данных. Записи разделяются пробелами, запятыми или другими символами.

REG_SZ

Текстовая строка в формате, удобном для восприятия человеком. Значениям, представляющим собой описания компонентов, обычно присваивается именно этот тип данных. Имеет фиксированную длину.

REG_LINK

Символическая ссылка в формате Юникод.

REG_FULL_RESOURCE_DESCRIPTOR

Последовательность вложенных массивов. Служит для хранения списка ресурсов, которые используются физическим устройством. Обнаруженные данные система сохраняет в разделе \HardwareDescription. В окне редактора реестра эти данные отображаются в виде двоичного параметра в шестнадцатеричном формате

REG_RESOURCE_LIST

Последовательность вложенных массивов. Служит для хранения списка ресурсов, которые используются драйвером устройства или управляемым им физическим устройством. Обнаруженные данные система сохраняет в разделе \ResourceMap. В окне редактора реестра эти данные отображаются в виде двоичного параметра в шестнадцатеричном формате

REG_RESOURCE_REQUIREMENTS_LIST

Последовательность вложенных массивов. Служит для хранения списка драйверов аппаратных ресурсов, которые могут быть использованы определенным драйвером устройства или управляемым им физическим устройством. Часть этого списка система записывает в раздел \ResourceMap. Данные определяются системой. В окне редактора реестра они отображаются в виде двоичного параметра в шестнадцатеричном формате

REG_QWORD

Данные, представленные в виде 64-разрядного целого. Начиная с Windows 2000, такие данные отображаются в окне редактора реестра в виде двоичного параметра

REG_NONE

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

Типы параметров реестра

-

18 Мая 2012

По степени важности следом за разделами следуют параметры реестра. У каждого параметра есть свое имя, значение и тип значения. Давайте посмотрим на самые часто используемые типы данных.

 

  • REG_BINARY (Binary Value) – двоичные данные. Этот тип данных предназначен для хранения сведений об аппаратных ресурсах.
  • REG_DWORD (DWORD Value) – целое число, которое задается в двоичном, десятичном и шестнадцатеричном форматах. Это один из самых часто используемых типов параметров. Зачастую он играет роль своеобразного переключателя: 1-включено(TRUE), 0-выключено(FALSE). В реестре Seven присутствует два вида DWORD: 32-х и 64-х битные значения.
  • REG_EXPAND_SZ (Expandable String Value) – расширенная строка. Этот тип используется для ссылок на файлы. Помимо любого произвольного текста в  значение такого параметра можно поместить и специальные переменные. В процессе обработки системой они могут быть заменены на определенные значения, допустим пути к папкам. Вот те переменные, которые чаще всего применяются для этих целей:
    • %systemroot% - путь к каталогу, где хранятся файлы Вашей операционки, обычно это C:\Windows.
    • %windir% - основное отличие этой переменной от предыдущей заключается в том, что %systemroot% переопределить не получится, в то время как путь к каталогу связанному с %windir%  можно изменить. Делается в следующем окне: ПЕРЕМЕННЫЕ СРЕДЫ  (Панель управления > Система и безопасность > Система > Дополнительные параметры системы >вкладка Дополнительно > кнопка Переменные среды).
    • %systemdrive% - эта переменная может выступать альтернативой букве системного диска (обычно диск С).
    • %userprofile% - данная переменная будет подставлять путь к профилю текущего пользователя.
    • %programfiles% - заменяет собой путь к каталогу C:\Program Files(если на Вашем компьютере операционная система установлена на диск С).
    • %username% - при использовании подставит имя пользователя, который работает с системой в настоящий момент.
    • computername% - название говорит само за себя – подставляет имя компьютера. Как вы понимаете, использовать ее имеет смысл в случае обращения к компьютеру в сети.
    • REG_MULTI_SZ (MultiString Value) – многострочный  текст. Часто используется для представления списков.
    • REG_SZ (String  Value) –  текстовая  строка. Едва ли не самый распространенный тип данных в реестре.

Существует еще несколько типов параметров в реестре, однако я не вижу смысла писать о них, так как их запись ведется машинным методом.

-

Битовые поля на C# | pc

В статье описана работа с битовыми полями на языке C# (Working with Bitfields in C#).

[Как работать с битовыми полями на C#]

Битовые поля хороши для обработки набора битовых флагов с помощью простого числа (обычно целого integer). Например, когда используется объект . NET System.Thread, Вам может понадобиться использовать свойство ThreadState. Это свойство имеет тип System.Threading.ThreadState, которое представлено типом enum (перечисление) с FlagsAttribute (атрибуты в виде флагов). Целочисленные значения enum являются степенями 2, потому что нам нужно использовать реальные биты целого числа, чтобы пометить различные состояния, см. [1]. Имейте в виду, что значения в ThreadState не являются взаимно исключающими (mutually exclusive), так что могут одновременно иметь место различные состояния флагов.

[Flags]
public enum ThreadState
{
    Running = 0,
    StopRequested = 1,
    SuspendRequested = 2,
    Background = 4,
    Unstarted = 8,
    Stopped = 16,
    WaitSleepJoin = 32,
    Suspended = 64,
    AbortRequested = 128,
    Aborted = 256
}

С числом Int32 у нас есть 32 бита, которые можно использовать как флаги. Целое число показывает состояния для обоих бит WaitSleepJoin и AbortRequested (если они имеют место) следующим образом:

Любая работа с битовыми полями происходит через битовые, поразрядные (bitwise) операции. Например, чтобы понять, в каком из двух интересующих нас состояний находится поток, мы можем сначала запомнить нужные нам биты:

t.ThreadState == (ThreadState.AbortRequested | ThreadState.WaitSleepJoin)

И затем проверить, установлен ли нужный бит:

t.ThreadState & ThreadState.AbortRequested) == ThreadState.AbortRequested

А вот так делается установка нужного бита (AbortRequested):

t.ThreadState |= ThreadState.AbortRequested

Что происходит, когда не используется FlagsAttribute? Рассмотрим следующее:

enum ColorsEnum
{
   None = 0,
   Red = 1,
   Green = 2,
   Blue = 4,
}
 
[Flags]
public enum ColorsFlaggedEnum
{
   None = 0,
   Red = 1,
   Green = 2,
   Blue = 4,
}

У нас есть два перечисления (enum) с одинаковыми значениями и с одинаковыми именами для строк, однако одно перечисление помечено атрибутом флага, а другое нет. Попробуем выполнить следующий код:

Console.WriteLine("Without Flags:");
for (int i = 0; i <= 8; i++)
{
    Console.WriteLine("{0,3}: {1}", i, ((ColorsEnum)i).ToString());
}
 
Console.WriteLine("With Flags:");
for (int i = 0; i <= 8; i++)
{
    Console.WriteLine("{0,3}: {1}", i, ((ColorsFlaggedEnum)i).ToString());
}

Запуск вышеуказанного кода произведет следующий вывод:

Without Flags:
0: None
1: Red
2: Green
3: 3
4: Blue
5: 5
6: 6
7: 7
8: 8

With Flags:
0: None
1: Red
2: Green
3: Red, Green
4: Blue
5: Red, Blue
6: Green, Blue
7: Red, Green, Blue
8: 8

Видно, что использование FlagsAttribute дает некий эффект. Однако нужно ли это на самом деле?

[Типы перечислений (enum)]

Перечисление enum не обязательно должно быть только типом integer, можно использовать любые встроенные типы (integral types) C# за исключением char. Цитата из документации c#:

"Можно использовать для enum типы byte, sbyte, short, ushort, int, uint, long или ulong."

Абсолютно нет никакой необходимости использовать целые числа со знаком (signed integer), это не доставляет проблем также если Вы работаете с битовыми операциями (bitwise operations). Нужно только использовать разрядность целого числа не более необходимого для хранения Ваших состояний. Например, если нужно обрабатывать 7 или меньшее количество состояний, то используйте тип byte (байт). Используйте Int16, если нужно хранить и обрабатывать 8 .. 15 состояний и так далее. Для состояния, когда все биты сброшены, используйте состояние "None" или что-нибудь похожее.

[Быстродействие (Performance)]

Самое большое преимущество битовых полей - выигрыш в быстродействии по сравнению с другими обычными методами (несколькими значениями типа boolean, словарями и т. д.). Увеличение быстродействия двойное. Во-первых, доступ к памяти. Если Вы используете Boolean для сохранении информации об объекте или любую другую информацию, то скорее всего Вы захотите устанавливать эти биты совместно. Часто пропускаемая оптимизация - кэш процессора. Вот код на ассемблере:

if (flag1 && flag2 && flag3)
0000011d cmp dword ptr [ebp-0Ch],0 
00000121 je 0000013A 
00000123 cmp dword ptr [ebp-10h],0 
00000127 je 0000013A 
00000129 cmp dword ptr [ebp-14h],0 
0000012d je 0000013A
{
Console.WriteLine("true");
0000012f mov ecx,dword ptr ds:[03662088h]
00000135 call 049BD3E4
}
 
Console.ReadLine();
0000013a call 04F84F64

Когда CPU делает операцию cmp (сравнение), он пытается получить значения из кэша CPU, и если кэш не содержит нужные значения, то происходит обращение к памяти системы для загрузки значений в кэш. Когда данные не в кэше, то система испытывает потребность устранить неактуальность кэша (cache-miss). Основное правило вычисления времени доступа к данным - 10 циклов для данных в кэше, и 100 циклов для данных памяти вне кэша. Если Вам повезло (или если Вы очень осторожны), то все Ваши биты будут в той же самой линии памяти кэша. Линия кэша - это блок данных, выбранных из памяти в кэш CPU. В примере выше Вы можете получить в самом худшем случае до 3 неактуальностей кэша (cache-misses). Но если же Вы используете байт для этого примера как битовое поле, то все состояние будет находиться в кэше, и в самом худшем случае будет необходим только одни доступ к памяти. Современные CPU имеют 32..64 байтные линии кэша. Код на ассемблере:

if (myColor == (ColorsEnum.Blue | ColorsEnum.Green))
000000f3 cmp dword ptr [ebp-0Ch],6 
000000f7 jne 00000104
{
Console.WriteLine("true");
000000f9 mov ecx,dword ptr ds:[032F2088h]
000000ff call 0485D3E4
}
 
Console.ReadLine();
00000104 call 04E24F64

Мы не только получили 2 инструкции вместо 6, мы также получили экономию на доступе к памяти. Эти числа будут удержаны для любого количества бит и для любого набора состояний этих бит, описанных в enum. Вывод: использование битовых полей - это очень круто.

[Ссылки]

1. Представление целых чисел в .NET.

Преобразование данных типа dword или qword

Для преобразования значений со знаком размером в байт в регистре AL в значения со знаком размером в слово и значений со знаком в регистре AL размером в слово в значения со знаком размером в двойное слово в процессоре 80386 предусмотрены соответственно инструкции CBW и CWD. В процессор 80386 добавлены еще две инструкции преобразования, CWDE и CDQ, которые облегчают работу с 32-разрядными регистрами процессора 80386.

Инструкция CWDE преобразует значение со знаком размером в слово, записанное в регистре AX, в значение со знаком размером в двойное слово, так же как инструкция CWD. Различие между этими двумя инструкциями состоит в том, что в то время как CWD помещает 32-разрядный результат в DX:AX, инструкция CWDE помещает помещает 32-разрядный результат в регистр EAX, который можно затем использовать в 32-разрядных инструкциях процессора 80386.

Инструкция CWD преобразует значение со знаком размером в двойное слово в регистре EAX в значение со знаком (8-байтовое) в EDX:EAX.

Сдвиг нескольких слов

Инструкции процессора 80386 SHRD и SHLD, обеспечивают сдвиг на несколько битов двух регистров или регистра и ячейки памяти.

Первый операнд инструкции SHLD - это 16- или 32-разрядный общий регистр или ячейка памяти, для которых нужно выполнить сдвиг. Второй операнд представляет собой 16- или 32-разрядный регистр, в который нужно выполнить сдвиг, а третий операнд - это число битов, на которые нужно осуществить сдвиг. Размеры первого и второго операнда должны совпадать. Третий операнд должен представлять собой непосредственное значение или регистр CL. В последнем случае целевой операнд сдвигается на число битов, определяемый регистров CL.

Инструкция SHRD аналогична инструкции SHLD, однако она выполняет сдвиг из наиболее значащего (старшего) бита в направлении младших битов.

Условная установка битов

Общее применение для условных проверок и переходов состоит в установке значения ячейки памяти, чтобы отразить определенное состояние. Например, может оказаться желательным установить значение двух переменных, что две переменные равны, указатель равен нулю, или в предыдущей операции был установлен флаг переноса. В процессоре 80386 для ускорения таких операций проверки и установки предусмотрена мощная группа инструкций SET.

Проверку в любом из знакомых вам условных переходах можно выполнить с помощью инструкции SET. Инструкция SETNC устанавливает целевой операнд в значение 1, если флаг переноса равен 0, и сбрасывает значение целевого операнда в 0, если флаг переноса равен 1. Инструкция SETS устанавливает приемник, если флаг знака равен 1, и сбрасывает его, если флаг

знака равен 0 и т. д. Операнд инструкции SET может быть 8-битовым общим регистром или 8-битовой переменной в памяти. 16- и 32-разрядные операнды не допускаются.

Загрузка регистров ss, fs и gs

Инструкция процессора 8086 LDS позволяет вам загружать как регистр DS, так и один из общих регистров из памяти в одной инструкции, позволяя, таким образом, очень эффективно устанавливать дальние указатели. Инструкция LES обеспечивает аналогичную возможность, но вместо DS загружает регистр ES. В процессоре 80386 для загрузки дальних указателей добавлены инструкции LSS, LFS и LGS, которые загружают дальние указатели на основе сегментных регистров SS, FS и GS соответственно.

Как редактировать реестр Windows

Многим известно, что системный реестр Windows предоставляет широкие возможности по настройке этой операционной системы. В этой статье, ориентированной на неопытных пользователей, речь пойдет о том, как и что именно можно настроить с его помощью.

Что такое реестр Windows. Структура реестра Windows


Читатели, имеющие опыт редактирования реестра Windows, могут сразу перейти к просмотру описания конкретных параметров системы и ключей системного реестра, с помощью которых их можно изменить (внизу страницы). Если такого опыта у Вас нет, читайте все попорядку. Реестр Windows - очень важная часть операционной системы, в которой хранится вся информация о параметрах программного обеспечения и порядке его взаимодействия с составными частями компьютера. Поэтому путем редактирования реестра можно существенно изменить настройки ПК в нужном пользователю направлении. Этот способ предоставляет возможность вносить более существенные коррективы в систему, чем при помощи стандартных средств Windows. -Например-: Windows автоматически присваивает всем создаваемым ярлыкам название «Ярлык для + имя файла-оригинала». А если в реестре найти двоичный параметр с названием «link», (в разделе «HKEY_CURRENT_USER\Software\Microsoft \Windows\CurrentVersion\Explorer»), и изменить его значение с «1b 00 00 00» на «00 00 00 00», приставка «Ярлык для» к названию ярлыков больше додаваться не будет. Неопытным пользователям этот пример, наверное, покажется чем-то сложным и непонятным. Но это только на первый взгляд. На самом деле, РЕДАКТИРОВАТЬ РЕЕСТР WINDOWS ОЧЕНЬ ЛЕГКО. Просто, внимательно прочтите эту статью. Уверен, правильно редактировать реестр может любой пользователь. Структура реестра Windows строго иерархична и имеет четкое построение. Основная его составная часть – это ключи (или параметры), в которых и хранится вся информация (в нашем примере это ключ с названием «link»). Каждый параметр реестра Windows отвечает за определенное свойство системы. Ключи с данными о смежных настройках компьютера объединены в разделы, которые, в свою очередь, являются подразделами более крупных разделов и т.д. Параметры (ключи) реестра бывают нескольких видов (параметры DWORD, QWORD, двоичные, строковые и многострочные параметры и др.) в зависимости от сведений, которые в них содержатся. Информацию с этих ключей Windows считывает главным образом во время запуска, поэтому для того чтобы внесенные в реестр Windows изменения вступили в силу, нужно перезагрузить компьютер. Редактировать реестр можно через редактор реестра или при помощи твиков реестра.

Как работать в редакторе реестра Windows


Чтобы открыть редактор реестра Windows нужно нажать на клавиатуре кнопку «Windows» (обычно с изображением окошка, находится в нижнем ряду, слева, между кнопками Ctrl и Alt) и, удерживая ее, нажать кнопку «R» («К» в русской раскладке). Появится окно запуска программ. В нем нужно написать regedit и нажать кнопку «ОК».

Навигация в редакторе реестра Windows. Редактор реестра Windows состоит из двух окон. В левом окне отображается структура разделов реестра (проводник), в правом – параметры (ключи) реестра, содержащиеся в просматриваемом разделе. Если в левом окне редактора выделить определенный раздел (щелкнуть по нему мышкой), в правом окне будет отображаться список параметров, которые в нем содержатся.

Чтобы стало понятно, давайте вернемся к нашему примеру: откроем редактор реестра и попробуем найти двоичный параметр с названием link в разделе HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer. Для этого в левой части редактора двойным кликом мышки сначала открываем раздел HKEY_CURRENT_USER. Под ним появится список содержащихся в нем подразделов. Среди них находим и открываем раздел Software, в нем – раздел Microsoft и т.д. Когда доберемся до раздела Explorer и выделим его (щелчком мыши), в правом окне редактора появится список параметров, среди которых будет и параметр с названием «link». Чтобы изменить значение параметра реестра Windows, нужно дважды щелкнуть по нему левой кнопкой мыши. Откроется окошко изменения параметра. В нем в поле «значение» нужно внести необходимые коррективы и нажать кнопку «ОК». Создание нового параметра в реестре Windows. Сначала в левом окне редактора (проводнике) проходим к разделу, в котором нужно создать параметр, и выделяем его. Затем в правом окне щелкаем правой кнопкой мыши по пустому месту (не по параметрам, которые там есть) и в появившемся меню «создать» выбираем соответствующий вид создаваемого параметра. В списке появится новый параметр. Щелкаем по нему правой кнопкой мыши, выбираем «Переименовать», даем ему нужное название. Затем указанным в предыдущем пункте способом задаем ему необходимое значение. Чтобы удалить параметр из реестра Windows, нужно щелкнуть по нему правой кнопкой мыши и выбрать «удалить».

Твики реестра Windows


Твики реестра Windows (англ. tweaks - настройки) - это настройки программного обеспечения и операционной системы, хранящиеся в системном реестре. Твики реестра реализуются при помощи REG-файлов - файлов, которые при их запуске автоматически вносят необходимые изменения в системный реестр Windows. Результат такой же, как и при ручном редактировании реестра через редактор. Нужные REG-файлы можно создавать самостоятельно или же использовать уже готовые, созданные другими пользователями. При этом, REG-файл может изменять как один параметр реестра, так и целые их группы (все зависит от того, что в нем прописать). По сути, REG-файл – это самый обычный текстовый файл с расширением .reg. Чтобы все стало ясно, откройте текстовый редактор «Блокнот» (пройдите «Пуск»- «Все программы»- «Стандартные»- «Блокнот») и в любом месте сохраните пустой файл 1111 с расширением reg. Для этого в блокноте нужно зайти в меню «Файл», выбрать «Сохранить как», в окне «Имя файла» указать 1111.reg и нажать кнопку «сохранить» (см. изображение справа, щелкните по нему мышкой для увеличения). Имя файла может быть любым, название 1111 взято только для примера. Главное, чтобы расширение было reg и обязательно через точку от названия (без пробелов). Теперь если сделать двойной щелчек мышки по сохраненному файлу, компьютер «спросит», действительно ли нужно добавить информацию из него в реестр. Если даже нажать на кнопку «да», никакие данные в реестр Windows добавлены не будут, поскольку наш REG-файл пока не содержит никакой информации. Для того, чтобы файл действительно работал, перед сохранением в него нужно внести определенные данные. Обратите внимание, что данные эти должны иметь строго определенную структуру. В противном случае, REG-файл по-прежнему работать не будет.

Если взять наш пример, то REG-файл, отключающий приставку «Ярлык для» в названии ярлыков, будет иметь следующий вид:


Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer]
"link"=hex:00,00,00,00


Давайте разберемся, что к чему.Структура REG-файла В первой строке файла указывается информация о том, для редактирования какой версии Windows он предназначается. Если это Windows 98 или Windows NT, то в первой строке вписываем «REGEDIT4». Для более поздних версий Windows (2000, XP, 7 и др.) – «Windows Registry Editor Version 5.00» (без кавычек, точно как указано - со всеми пробелами, большими буквами и т.д.). Ничего больше в этой строке быть не должно. Вторая строка обязательно должна быть пустой. В третьей строке в квадратных скобках […] прописывается ветка (раздел) реестра, в которой находятся изменяемые параметры. В четвертой и последующих строках прописываются изменяемые ключи, которые находятся в указанном разделе, а также проводимые с ними действия (каждый изменяемый параметр в отдельной строке). Формат этих строк зависит от вида изменяемых ключей:

Двоичные параметры

Действие

Общий вид

Пояснения

Создание

"Название"=hex:00,00,00

Будет создан двоичный параметр с названием «Название» и значением 00 00 00. Слово hex указывает на то, что будет создан именно двоичный параметр. В REG-файлах значение для двоичных параметров указывается шестнадцатеричными числами, разделенными запятыми. Слово hex пишется маленькими буквами, двоеточие обязательно, без пробелов.

Изменение

"Название"=hex:00,00,00

Существующему двоичному параметру с названием «Название» будет задано значение 00 00 00 (см. комментарий в предыдущем пункте)

Удаление

"Название"=-

Существующий двоичный параметр с названием «Название» будет удален из реестра.

Параметры DWORD

Создание

"Название"=dword:00000000

Будет создан параметр DWORD с названием «Название» и значением 00000000. Большинство параметров DWORD имеют значение либо 1, либо 0. В REG-файлах значение для DWORD указываются в шестнадцатеричном формате. Поэтому 0 будет иметь вид 00000000, а 1 – 00000001. Слово dword пишется маленькими буквами, двоеточие обязательно, без пробелов.

Изменение

"Название"=dword:00000000

Существующему параметру DWORD с названием «Название» будет задано значение 00000000 (см. комментарий к предыдущему пункту)

Удаление

"Название"=-

Существующий DWORD параметр с названием «Название» будет удален из реестра.

Если заметили, строка для удаления DWORD параметра ничем не отличается от строки удаление двоичного параметра. Дело в том, что в одном разделе реестра не может существовать несколько параметров с одинаковыми названиями, даже если эти параметры будут разных видов. Не трудно догадаться, что строка для удаления параметров остальных видов будет иметь такой же вид.

Строковые параметры

Создание

"Название"="Значение"

Будет создан строковый параметр с названием «Название» и значением «Значение». Обратите внимание: кавычки обязательны до и после знака «=». Без пробелов.

Изменение

"Название"="Значение"

Существующему строковому параметру с названием «Название» будет задано новое значение «Значение».

Удаление

"Название"=-

Существующий строковый параметр с названием «Название» будет удален из реестра.

Об остальных видах параметров реестра говорить не будем, поскольку пользователями они редактируются редко. Последняя строка REG-файла обязательно должна быть пустой.Рассмотрим еще один пример:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore]
"1"=dword:00000000
"11"="2"
"111"=hex:00,00,00
"1111"=-


Этот REG-файл в разделе реестра «HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore» создаст: • Параметр DWORD с названием «1» и значением «0» (если в разделе уже существует параметр DWORD с названием «1», то его значение станет «0») • Строковый параметр с названием «11» и значением «2» (если в разделе уже существует строковый параметр с названием «11», то его значение станет «2») • Двоичный параметр с названием «111» и значением 00 00 00 (если в разделе уже существует двоичный параметр с названием «111», то его значение станет «00 00 00») • Удалит из раздела параметр (какого бы вида он ни был) с названием «1111».А что же делать, если кроме этого нужно еще изменить параметры, находящиеся в другом разделе реестра? Все очень просто. Оставляем одну пустую строку после последнего параметра, после чего в квадратных скобках […] указываем новый раздел, а в последующих строках - параметры, которые в нем нужно изменить. Добавим к нашему примеру еще несколько строк:
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore]
"1"=dword:00000000
"11"="2"
"111"=hex:00,00,00
"1111"=-

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion]
"2"="ххх"
"22"=-

Такой REG-файл, кроме изложенных выше действий, в разделе «HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion» создаст строковый параметр с названием «2» и значением «ХХХ» и удалит параметр с названием «22». Последняя строка в таком REG-файле тоже обязательно должна быть пустой. Аналогичным образом можно создать REG-файл, изменяющий неограниченное количество параметров реестра. Это очень удобно: с помощью такого файла можно быстро одинаково настроить огромное количество компьютеров; можно создать REG-файл с нужными пользователю настройками и использовать его каждый раз после переустановки системы для быстрой ее оптимизации и т.д.

Что можно изменить в реестре Windows


В списке, расположенном ниже, лишь часть возможностей, содержащихся в системном реестре Windows. При желании, описание других ключей реестра можно найти в Интернете или других источниках. Будьте внимательны! Необдуманные манипуляции с реестром Windows или ошибки при его редактирования могут снизить стабильность системы вплоть до полной ее неработоспособности и необходимости переустановки. Перед тем, как осуществлять любые действия с системным реестром Windows, обязательно создайте его копию! Ее можно будет использовать для восстановления состояния реестра в случае возникновения каких-либо проблем после его изменения. Для создания копии системного реестра запускаем "Редактор реестра" (см. выше), заходим в меню "Файл" и выбираем "Экспорт". В открывшемся окне "Экспорт файла реестра" указываем место сохранения, имя файла копии реестра, в разделе "Диапазон реестра" (внизу окна) отмечаем галочкой "Весь реестр", жмем кнопку "Сохранить".

Описание

Необходимые изменения

REG-файл

Windows

Изменение внешнего вида Windows

1

Придать панели управления классический вид (как в Windows 2000)

В разделе HKEY_CURRENT_USER\Software\Microsoft\Windows\Current Version\Policies\Explorer должен находиться параметр dword с названием «ForceClassicControlPanel» и значением «1» (в десятеричном формате, в шестнадцатеричном – 00000001)

XP/Vista/7

2

Изменение скорости открытия меню «Пуск». По умолчанию, она составляет 400 миллисекунд, после изменений будет 100 (можно указать другую)

В разделе HKEY_CURRENT_USER\Control Panel\Desktop должен находиться строковый параметр с названием "MenuShowDelay" и значением "100" (или другим при желании)

2000/XP/ Vista/7

3

Установить 32-битный цвет отображения иконок. Особенно актуально в Windows 2000

В разделе HKEY_CURRENT_USER\Control Panel\Desktop \WindowMetrics должен находиться строковый параметр с названием "Shell Icon BPP" и значением "32"

2000/XP

5

Отображать крупные значки в меню "Пуск"

В разделе HKEY_CURRENT_USER\Software\Microsoft\Windows\Current Version\Explorer\StuckRects2 должен находиться двоичный раздел с названием "Settings" и значением «28,00,00,00,ff,ff,ff,ff,02,00,00,00,03,00,00,00,3c,00,00,00,1e,\ 00,00,00,fe,ff,ff,ff,e4,03,00,00,02,05,00,00,02,04,00,00»

XP/Vista/7

6

Отображать мелкие значки в меню "Пуск"

В разделе HKEY_CURRENT_USER\Software\Microsoft\Windows\Current Version\Explorer\StuckRects2 должен находиться двоичный раздел с названием "Settings" и значением «28,00,00,00,ff,ff,ff,ff,06,00,00,00,03,00,00,00,3c,00,00,00,1e,\ 00,00,00,fe,ff,ff,ff,e4,03,00,00,02,05,00,00,02,04,00,00»

XP/Vista/7

7

Не скрывать пароль к сетевым ресурсам (отключить отображение звездочек вместо символов пароля)

В разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows \CurrentVersion\Policies\Network должен существовать параметр DWORD с названием " HideSharePwds " и значением «0» (или 00000000 в шестнадцатеричном формате)

XP/Vista/7

9

Отключить использование стилей для окон и папок

В разделе HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows \CurrentVersion\Explorer\VisualEffects\Themes должны существовать следующие параметры DWORD:
1. с названием "DefaultApplied" и значением 00000001 в шестнадцатеричном формате;
2. С названием "DefaultValue" и значением 00000000 в шестнадцатеричном формате;
3. С названием "DefaultByAlphaTest" и значением 00000000 в шестнадцатеричном формате

XP/Vista/7

10

Отключить использованием типичных задач для папок

В разделе HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows \CurrentVersion\Explorer\VisualEffects\WebView должны существовать следующие параметры DWORD:
1. с названием "DefaultApplied" и значением 00000001 в шестнадцатеричном формате;
2. С названием "DefaultValue" и значением 00000000 в шестнадцатеричном формате;
3. С названием "DefaultByAlphaTest" и значением 00000000 в шестнадцатеричном формате

XP/Vista/7

Изменение некоторых функций Windows

1

Автоматическое завершение всех приложений при выключении компьютера

В разделе HKEY_CURRENT_USER\Control Panel\Desktop должен находиться строковый параметр с названием "AutoEndTasks" и значением "1".

2000/XP

2

Отключить запрос пароля при выходе из ждущего режима

В разделе HKEY_CURRENT_USER\Control Panel\PowerCfg\GlobalPowerPolicy должен находиться двоичный параметр с названием "Policies" и значением «01,00,00,00,00,00,00,00,03,00,00,00,10,00,00,00,00,00,00,00,03,\ 00,00,00,10,00,00,00,02,00,00,00,03,00,00,00,00,00,00,00,02,00,00, 00,03,00,\ 00,00,00,00,00,00,02,00,00,00,01,00,00,00,00,00,00,00,02,00,00,00, 01,00,00,\ 00,00,00,00,00,01,00,00,00,03,00,00,00,02,00,00,00,04,00,00,c0,01, 00,00,00,\ 04,00,00,00,01,00,00,00,0a,00,00,00,00,00,00,00,03,00,00,00,01,00, 01,00,01,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,02, 00,00,00,\ 00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,00,03,00, 00,00,00,\ 00,12,00,00,00»
Лучше, скачайте готовый регфайл.

2000/XP/ Vista/7

3

Отключить сообщение об ошибках на странице и их отладку в Internet Explorer

В разделе HKEY_CURRENT_USER\Software\Microsoft \Internet Explorer\Main должен находиться строковый параметр с названием "Disable Script Debugger" и значением "yes"

2000/XP/ Vista/7

4

Включить доступ к настройкам DVD в Windows Media Player

В разделе HKEY_CURRENT_USER\Software\Microsoft\MediaPlayer\Player \Settings должен находиться строковый параметр с названием "EnableDVDUI" и значением "YES"

XP

5

Отключить добавление приставки "Ярлык для" к названию ярлыков при их создании

В разделе HKEY_CURRENT_USER\Software\Microsoft\Windows \CurrentVersion\Explorer должен находиться двоичный параметр с названием "link" и значением «00 00 00 00»

2000/XP

6

Отключить появление любых сообщений в нижнем правом углу (об подключении к интернету, локальной сети и др.)

В разделе HKEY_CURRENT_USER\Software\Microsoft\Windows \CurrentVersion\Explorer\Advanced должен находиться параметр DWORD с названием "EnableBalloonTips" и значением в «0» (или 00000000 в шестнадцатеричном формате)

XP/Vista/7

7

Включить автоматическое открытие папок после загрузки системы, если они не были закрыты пользователем перед перезагрузкой

В разделе HKEY_CURRENT_USER\Software\Microsoft\Windows \CurrentVersion\Explorer\Advanced должен находиться параметр DWORD с названием «PersistBrowsers» и значением «1» (или 00000001 в шестнадцатеричном формате)

XP

8

Разрешить перетаскивание объектов из меню «Пуск» при помощи мыши

В разделе HKEY_CURRENT_USER\Software\Microsoft\Windows \CurrentVersion\Explorer\Advanced должен находиться параметр DWORD с названием "StartMenuChange" и значением «1» (или 00000001 в шестнадцатеричном формате)

2000/XP/ Vista/7

9

Отключить сообщение о просмотре вэб-страницы через безопасное соединение

В разделе HKEY_CURRENT_USER\Software\Microsoft\Windows \CurrentVersion\Internet Settings должен существовать параметр DWORD с названием "WarnOnZoneCrossing" и значением «0» (или 00000000 в шестнадцатеричном формате)

2000/XP
Vista

10

Отключить сообщение в браузере "Информация, передаваемая через Интернет, может стать доступной другим пользователям"

В разделе HKEY_CURRENT_USER\Software\Microsoft\Windows \CurrentVersion\Internet Settings\Zones\3 должен существовать параметр DWORD с названием "1601" и значением «0» (или 00000000 в шестнадцатеричном формате)

2000/XP
Vista

11

Не отображать раздел «Недавние Документы» в меню Пуск

В разделе HKEY_CURRENT_USER\Software\Microsoft\Windows \CurrentVersion\Policies\Explorer должен находиться двоичный параметр с названием "NoRecentDocsMenu" и значением «01 00 00 00».

XP/Vista/7

12

Отключить ведение учета последних открываемых документов

В разделе HKEY_CURRENT_USER\Software\Microsoft\Windows \CurrentVersion\Policies\Explorer должен существовать параметр DWORD с названием "NoRecentDocsHistory" и значением «1» (или 00000001 в шестнадцатеричном формате)

XP/Vista/7

13

Отключить сообщения о нехватке свободного места на дисках

В разделе HKEY_CURRENT_USER\Software\Microsoft\Windows \CurrentVersion\Policies\Explorer должен существовать параметр DWORD с названием "NoLowDiskSpaceChecks" и значением «1» (или 00000001 в шестнадцатеричном формате)

2000/XP/ Vista/7

14

Ускорить открытие видео в формате AVI

Нужно удалить из реестра следующие разделы:
«HKEY_CLASSES_ROOT\CLSID\{87D62D94-71B3-4b9a-9489-5FE6850DC73E}»;
«HKEY_CLASSES_ROOT\SystemFileAssociations\.avi\shellex\PropertyHandler»;
«HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID\{87D62D94-71B3-4b9a-9489-5FE6850DC73E}\InProcServer32»

2000/XP/ Vista/7

15

Очистить историю введенных адресов в Internet Explorer

Нужно удалить из реестра раздел HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\TypedURLs

2000/XP/ Vista/7

16

Ускорить загрузку операционной системы путем оптимизации расположения загрузочных файлов

В разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Dfrg\ BootOptimizeFunction должен находиться строчный параметр с именем "Enable" и значением "Y".

XP/Vista/7

17

Отключить отладчик Dr.Watson, что ускорит выход системы из «полузависшего» состояния при возникновении ошибок в работе приложений.

В разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AeDebug должен существовать строковый параметр с названием "Auto" и значением "0"

XP

18

Отключить восстановление системы

В разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore должен существовать параметры DWORD с названием "DisableSR" и значением «1» (в десятеричном формате 00000001)

XP

19

Включить ускоренную перезагрузку

В разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon должен находиться строковый параметр с названием "EnableQuickReboot" и значением "1"

XP

20

Не разрывать существующее соединение через dial-up-модем при переключении пользователей

В разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon должен существовать строковый параметр с названием "KeepRasConnections" и значением "1"

XP

21

Отключить автоматическое обновление системы

В разделе HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows \WindowsUpdate\AU должен существовать параметры DWORD с названием "NoAutoUpdate" и значением «1» (в десятеричном формате 00000001)

2000/XP/ Vista/7

22

Заставить систему не создавать в разделе NTFS таблицу совместимости со старыми приложениями (для увеличения производительности)

В разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet \Control\FileSystem должен существовать параметры DWORD с названием "NtfsDisable8dot3NameCreation" и значением «1» (в десятеричном формате 00000001)

2000/XP/ Vista/7

23

Исправление проблемы с неправильным отображением кириллицы

В разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Control\Nls\CodePage для строковых параметров с именами "1250", "1251", "1252" и "1253" нужно установить значение "c_1251.nls" (для каждого из этих параметров)

2000/XP/ Vista/7

24

Отключение автозагрузки со всех типов носителей

В разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows \CurrentVersion\policies\Explorer должен существовать параметры DWORD с названием "NoDriveTypeAutoRun" и значением «000000ff» в шестнадцатеричном формате. Кроме того, в разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet \Services\Cdrom должен находиться параметры DWORD с названием "AutoRun" и значением «0» (00000000 в шестнадцатеричном формате)

2000/XP

25

Отключить POSIX

В разделе HKEY_LOCAL_MACHINE\SYSTEM\ CurrentControlSet\ Control SessionManager\SubSystems нужно удалить строки «Optional» и «Posix»

2000/XP

26

Отключить метку последнего доступа к файлам для разделов NTFS (ускорит открытие папок с большим количеством файлов)

В разделе HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet \Control\FileSystem нужно создать параметр DWORD с названием "NtfsDisableLastAccessUpdate" и значением «1» (00000001 в шестнадцатеричном формате)

2000/XP/ Vista/7

27

Отключить кэширование DLL

В разделе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\Current Version\Explorer нужно создать новый DWORD-параметр с названием AlwaysUnloadDLL и значением «1» (00000001 в шестнадцатеричном формате)

2000/XP

Настройки некоторых программ

1

Отключить отправку отчетов об ошибках в Office 2003

В разделе HKEY_CURRENT_USER\Software\Policies\Microsoft\Office\11.0\Common должны существовать параметры DWORD с названиями "DWNeverUpload", "DWNoExternalURL", "DWNoFileCollection" и "DWNoSecondLevelCollection" с значением «1» каждый (или 00000001 в шестнадцатеричном формате)

2000/XP/ Vista/7

Что такое кодирование и как оно работает?

Не знаете, как кодировать? Не понимаете скриптов? Вот что вам нужно знать о строительных блоках программирования.

Компьютерный код очень важен. Почти каждое электронное устройство, которое вы используете, использует код. То, как все работает, может показаться довольно запутанным, но если разобрать его, на самом деле все просто.

Людей, создающих код, называют программистами, кодировщиками или разработчиками.Все они работают с компьютерами для создания веб-сайтов, приложений и даже игр! Сегодня вы узнаете, что это за код, для чего он нужен и как начать изучать код самостоятельно.

Что такое код?

Что означает DWord? Бесплатный словарь

3) Чтобы просканировать все значения dword в текущем стеке, обозначенном как {instack_ [addr.sub.k] | k [член] [0, [n.sub.instack]]}, если (instack_ [addr.sub.k] [член] [alloc_ [ptr.sub.i], alloc_ [ptr.sub.i] + alloc_ [size.sub.i] - 1] | k [член] [0, [n.sub.instack]] я [член] [0, [n.sub.alloc]]) [конъюнкция] ( [существует] j [член] [0, [n.sub.release]], release_ [ptr.sub.j] = alloc_ [ptr.sub.i]) Версия программы Уязвимость Адрес сбоя Adobe Reader 9.3.4 CVE -2010-2883 0x0803DDAB Microsoft Office Excel 2003 CVE-2011-0104 0x300DE834 Firefox 3.6.16 CVE-2011-0073 0x1046659B Microsoft Office Word 2003 CVE-2012-0158 0x275C8A0A Смещение инструкции по сбою программы Taint Adobe Reader call strcat 0x12C Microsoft Office Excel rep movs 0x300 Firefox вызывает dword ptr [ECX + 70h] 0x4A Microsoft Office Word rep movs 0xA0F Таблица 4: Накладные расходы OFFDTAN и PANDA при запуске FeiQ и Word.

«push 6E6Fh, push 6D6C7275h, push esp, call dword ptr [esi]» - это шаблон, который код эксплойта использует для вызова API с тремя параметрами.

Шаблоны кода эксплойта с сайта MilwOrm, обнаруженные JsSandbox # 1, код эксплойта # 2, код эксплойта 66 53 push bx FF 37 push dword ptr [edi] 66 68 33 32 push 3233h 56 push esi 68 77 73 32 5F E8 33 00 00 00 push 5F327377h call 001fe7ec 54 push esp FF D0 call eax # 3 exploit code 53 push ebx FF 57 F8 call dword ptr [edi-8]

Хороший анализатор протокола, такой как Data Transit Bus Doctor, используемый в этой статье, обеспечит несколько дисплеев для каждого из различных уровней шины, включая слой команд (файл задачи), слой пакета, слой двойного слова (DWord для краткости) и битовый слой.

Поскольку данные SAS / SATA организованы в 4-байтовые слова DWords, анализатор показывает DWord в каждой строке, за исключением случаев, когда возникает ошибка, а затем он использует четыре строки - по одной для каждого символа в DWord.

ФРАГМЕНТ КОДА №1 алгоритма 1 (C): list_for_each_entry (kvm, & vm_list, vm_list) ФРАГМЕНТ КОДА №2 (3.10.0-229.4.2.el7.x86_64): 4645D26A2 8B90f80

mov edx, dword ptr [e8A] + 00450009 48 dec eax 4645D26AB 81FA800354A0 cmp edx, A0540380 4645D26AC 48 dec eax 4.3. Мы обнаружили, что Ica dWords не может выразить нашу радость в этот момент.В последнее время использование Google Shopping и Adwords, а также BingA dwords, Bing ds еще больше увеличило присутствие компании в Интернете. Недавно анонсированные возможности BusMod SAS / SATA Error Injector, такие как создание ошибок ссылок, таких как 8b10b и несоответствие CRC, добавление и удаление DWORDS во фрейм и изменение содержимого фрейма теперь также доступны разработчикам SAS и SATA, работающим в среде Linux. Это хронологическое представление DWORD, перемещающихся вверх и вниз по каждой полосе, обеспечивает точный временной контекст для анализа трафика PCI Express.Производительность в играх

/ Оптимизация системы / Полезные настройки: REGISTRY TWEAKS

РЕГИСТРАЦИЯ ПРОСМОТРА

На основе статьи Gaming Tweaks, сделанной Филипом с сайта speedguide.net

Это очень хорошая и хорошо написанная статья, вам стоит ее прочитать, если нет. Я хотел бы немного остановиться на этом и, возможно, заполнить несколько пробелов.

Многие люди задаются вопросом, работает ли весь этот раздел, потому что не видят никакой разницы. «Приоритет GPU» и «Приоритет» в «Играх».Я могу подтвердить, что все работает нормально.


Для того, чтобы эти настройки работали, необходимо включить и запустить службу «Планировщик классов мультимедиа» (MMCSS). Она автоматически отключается, когда звук не обнаруживается.

Вот что Microsoft говорит по этой теме, но это немного:

Здесь мы можем сделать больше настроек и потенциально нуждаемся в улучшении.

Здесь SystemResponsiveness означает, сколько% не используется (сохраняется) для задач с низким приоритетом. По умолчанию 20%.Значения, которые нельзя разделить на 10, округляются до ближайшего кратного 10. Значение 0 также обрабатывается как 10. NetworkThrottlingIndex определяет, какая часть соединения остается «в резерве».


Я видел это в старых версиях Win7 или 8. Конечно, я использую NoLazyMode вместе с NetworkThrottling и SystemResponsiveness. Я думаю, что это функция энергосбережения и я надеюсь отменить драйвер, но это всего лишь предположение. Вы определенно захотите использовать их в Windows 7 и 8.

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Multimedia \ SystemProfile]
«AlwaysOn» = dword: 00000001
«NetworkThrottlingIndex» = dword: ffffffff
«SystemResponsiveness» = dword: 00000000
«NoLazyMode25» 000025Model:

Еще одна функция, которую я не использую, - IdleDetectionCycles, еще одна функция энергосбережения. AlwaysOn переопределит автоматическое определение и будет включен постоянно.


[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Multimedia \ SystemProfile \ Tasks]

В аудио все по умолчанию, кроме "Affinity" = dword: 00000007, для которого установлено использование 2 ядер вместо 4.Теоретически это должно освободить некоторые ресурсы процессора. Я играю на 4-ядерном процессоре i5 (низкое разрешение), и это небольшое узкое место в BF4 (не говоря уже о BFV) даже при высоком разгоне. Обычный игрок не почувствует эффекта от этого, но эти небольшие настройки складываются. Это для соревнующихся геймеров, где вам нужно до последней капли ваших системных ресурсов. В большинстве случаев визуальные эффекты важнее звука.



[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Multimedia \ SystemProfile \ Tasks \ Audio]
"Affinity" = dword: 00000007
"Background Only" = "True"
"Clock Rate" = dword: 00002710
"Priority GPU «= dword: 00000008
« Priority »= dword: 00000006
« Категория планирования »=« Medium »
« SFIO Priority »=« Normal »

Здесь есть одна недокументированная настройка.В ранних версиях Windows 10 (и в Win 8 тоже, если я не ошибаюсь) этот ключ назывался «Низкая задержка», а не «DisplayPostProcessing», и в нем была строка с названием «Чувствительность к задержке». Этот ключ связан с обработкой изображения и скоростью его перемещения на монитор. Поэтому его приоритет должен быть выше или равен Играм. Это потенциально немного помогает с Hit-Reg. (вы можете проверить, работают ли эти настройки, поменяв приоритеты - иногда на вашем мониторе отключен Instant Mode (или Overdrive), и вы ничего не можете ударить (это преувеличение, но вы поняли).У вас тоже могло быть заикание). Чтобы уточнить, у меня нет возможности измерить, работает эта строка или нет, тем не менее я использую ее.

Опять же, это более актуально для соревнующихся игроков, чем кто-либо другой, поскольку вы не можете его измерить, и люди могут сказать, что это эффект плацебо (особенно новички, вам нужно быть на определенном уровне, чтобы иметь значение), но если вы подумаете об этом, это логично и имеет смысл, потому что так работает Windows. Вы также должны установить высокий приоритет ввода-вывода. Я также использую это в играх (это полностью моя работа, не в какой-либо версии Windows), на случай, если Windows все еще распознает эту строку, поскольку для обоих ключей требуется уменьшенная задержка.В этом примере я немного повысил приоритет, вы можете протестировать его с более высокими значениями (максимальное - 30), просто сохраните то же расстояние между приоритетами. Может помочь с отзывчивостью.


Для справки, я тестировал большинство своих настроек на одном сервере, играя в BF4 с теми же (конкурентоспособными) игроками, с одними и теми же подключениями в течение более года. Последовательность здесь является ключевым моментом. В этот момент я мог сказать, обновлен ли кто-то до уровня подключения, видеокарты или процессора.

[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Multimedia \ SystemProfile \ Tasks \ DisplayPostProcessing]
«Affinity» = dword: 00000000
«Background Only» = «True»
«BackgroundPriority» = dword: 00000018
«Clock Rate» = dword: 00002710
«Приоритет GPU» = dword: 00000012
«Priority» = dword: 00000008
«Категория планирования» = «High»
«SFIO Priority» = «High»
«Latency Sensitive» = «True»

Я не могу ничего добавить сюда.Вы можете снизить тактовую частоту до 5000 (в шестнадцатеричном формате: 1388) как для DisplayPostProcessing, так и для игр. Не опускайтесь ниже 5000, потому что, скорее всего, у вас будет плохой опыт. Кстати, они оба должны иметь наивысший приоритет, но DisplayPostProcessing должен быть немного выше или одинаковым. Когда категория планирования высокая, приоритет ЦП обрабатывается как 2 независимо от того, какое значение вы установили. По крайней мере, так было в Windows Server 2016 (или это был 2013 год). Информации по Windows 10 по этой теме почти нет, и у нее больше не может быть этого ограничения, но это всего лишь предположение.Хотя я могу утверждать, что это изменилось в Win10, потому что настройки Windows по умолчанию в DisplayPostProcessing, категория планирования - высокая, а приоритет ЦП - 8, что противоречит документу Microsoft, последний раз обновленному в 2018 году. Если есть дополнительная информация, дайте мне знать в комментарии или по электронной почте.


[HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Multimedia \ SystemProfile \ Tasks \ Games]
"Affinity" = dword: 00000000
"Background Only" = "False"
"Clock Rate" = dword: 00002710
"Priority GPU "= dword: 00000012
" Priority "= dword: 00000006
" Категория планирования "=" High "
" SFIO Priority "=" High "
" Latency Sensitive "=" True "

************************************************* *************************************************

Настройка алгоритма Нагла

Прежде всего, я не думаю, что это больше работает.Я вижу, что люди рекомендуют эту настройку, но даже не упоминают MSMQ \ Parameters или наоборот. Эта настройка была очень популярна, когда вышла Windows 8. Но помогает только в некоторых играх. Большинство шутеров от первого лица используют протокол UDP, а не TCP, так что это не имеет значения. Это помогает, например, в World Of Warcraft, где он использует TCP в качестве основного протокола для передачи данных. Это то, что делает Leatrix Latency Fix, кстати. Я вижу, как многие игроки используют это, и клянусь, что это помогает им в BF4 или CS: GO. Это эффект плацебо.

Если вы все еще хотите использовать его, используйте TCP Optimizer или эти команды, вам не нужно искать свою сетевую карту в реестре.| findstr "{" ') do REG ADD "HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters \ Interfaces \ %% i" / v TCPNoDelay / t REG_DWORD / d 0000001 / f

В реестре это будет выглядеть так:

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters \ Interfaces \ {GUID вашего сетевого адаптера}]
«TcpAckFrequency» = dword: 00000001
«TcpDelAckTicks» = dword: 00000000
«TCPNoDelay 000025» =
«TCPNoDelay» 000025 =
«TCPNoDelay» 000025 [HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ MSMQ \ Parameters]
«TCPNoDelay» = двойное слово: 00000001


************************************************* *************************************************

Редактор реестра Windows версии 5.00

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters]
«EnableICMPRedirect» = двойное слово: 00000001
«EnablePMTUDiscovery» = двойное слово: 00000001
«Tcp1323Opts» = двойное слово: 00000000 Tcp1323Opts »= двойное слово: 00000000 Tcpipize«
«GlobalMax16d0dWindow» =
«GlobalMax16d0dWindow» =
«GlobalMax16dcp25Window» =
«GlobalMax16d0dWindow» =
«GlobalMax16d0dword» Двойное слово: 000016d0
«MaxConnectionsPerServer» = двойное слово: 00000000
«MaxUserPort» = двойное слово: 0000fffe
«TcpTimedWaitDelay» = двойное слово: 00000020
«EnablePMTUBHDetect» = двойное слово: 00000000
dword «DisableTaskOffload» =
«DisableTaskOffload» = двойное слово 00000040
«SackOpts» = двойное слово: 00000000
«TcpMaxDupAcks» = двойное слово: 00000002

TcpWindowSize не работает в Windows 8+, потому что это автоматически обрабатывается драйвером.


Дополнительно:

[HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters \ Winsock]
«UseDelayedAcceptance» = двойное слово: 00000000
«MaxSockAddrLength» = двойное слово: 00000010
«MinSockAddrLength» = двойное слово: 00000010
************************************************* *************************************************

Приоритет IRQL

Это больше для информации, чем что-либо еще. Это может быть полезно в старых Win7 и Win8

Сначала я хочу уточнить, что это мое понимание того, как работает это дерьмо, и я могу в чем-то ошибаться.Если у кого-то больше знаний, чем у меня, я рад, что меня поправят.

Так что же это за IRQL Priority и как его установить вручную. IRQ = Запросы = Прерывания. IRQL - Уровень запроса прерывания. Это способ Windows приоритизировать запросы ЦП. Чем быстрее эти прерывания, тем меньше задержка.

Контроллер прерываний (который, как я понимаю, в данном случае является средним между драйверами и ЦП, хотя его гораздо больше. Он также обрабатывает все аппаратные прерывания) отправляет IRQ ЦП с определенным приоритетом.Этот приоритет можно вручную увеличить или уменьшить, в зависимости от того, что вы хотите.

Введите msinfo32.exe в RUN или Search (или sys в поиске), и запустится инструмент System Information Tool. Вы можете найти IRQ в разделе «Аппаратные ресурсы»> «IRQ». IRQ8 всегда одно и то же - Системная CMOS / часы реального времени, не меняется. Другие IRQ меняются, поэтому вам нужно найти номер IRQ драйвера, который вы хотите увеличить (или уменьшить). Драйвер основан на IRQ, а не на MSI, который является более новым и быстрым способом связи между драйверами и процессором.Это не хорошо, если вы установите драйвер на основе MSI с приоритетом IRQL, так что имейте это в виду.



Вы увидите изменение номеров IRQ, когда вы установите драйвер в MSI Utility. Итак, они связаны друг с другом. Используйте осторожно. Этот метод практически устарел в современных системах и версиях Windows, но я все равно решил им поделиться. Это полезно в старых системах (а также в Win7 и Win8), где вы можете повысить приоритет своих драйверов, но не использовать его на графическом процессоре или интернет-адаптере, только если они действительно старые.Современные графические процессоры и сетевые карты используют режим MSI. Многие скажут, что это миф или плацебо, но есть небольшое улучшение, если все сделано правильно, чтобы снизить задержку некоторых драйверов. Это просто не для случайных пользователей.

Вот пример реестра:

************************************************* *************************************************
Пример:

Редактор реестра Windows версии 5.00

[HKEY_LOCAL_MACHINE \ SYSTEM \ ControlSet001 \ Control \ PriorityControl]
«Win32PrioritySeparation» = двойное слово: 00000026
«IRQ8Priority» = двойное слово: 00000001
«IRQ4294967286Priority» = двойное слово: 00000002
«IRQ42949» https: // форумы.guru3d.com/threads/windows-line-based-vs-message-signaled-based-interrupts.378044/

Вы также можете использовать переменные среды для установки приоритета (другого). Я полагаю, что это помогает больше на ноутбуках, но неплохо установить программу или драйвер оттуда. Думаю, это будет следующий вопрос, который я напишу здесь ...

************************************************* *************************************************
Знаете что, я просто удалю это, потому что некоторые люди даже не читают, просто копируют / вставляют и меняют значения.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *