Дневники чайника
Дневники чайникаПятый день.
О словах и двойных словах
(форматы данных)
Не сказать чтоб эта тема была самая сложная, но то, что она самая запутанная — это 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) – текстовая строка. Едва ли не самый распространенный тип данных в реестре.
- %systemroot% — путь к каталогу, где хранятся файлы Вашей операционки, обычно это C:\Windows.
Существует еще несколько типов параметров в реестре, однако я не вижу смысла писать о них, так как их запись ведется машинным методом.
—Битовые поля на 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» (обычно с изображением окошка, находится в нижнем ряду, слева, между кнопками Ctrl и Alt) и, удерживая ее, нажать кнопку «R» («К» в русской раскладке). Появится окно запуска программ. В нем нужно написать regedit и нажать кнопку «ОК».
Навигация в редакторе реестра Windows. Редактор реестра Windows состоит из двух окон. В левом окне отображается структура разделов реестра (проводник), в правом – параметры (ключи) реестра, содержащиеся в просматриваемом разделе. Если в левом окне редактора выделить определенный раздел (щелкнуть по нему мышкой), в правом окне будет отображаться список параметров, которые в нем содержатся.
Чтобы стало понятно, давайте вернемся к нашему примеру: откроем редактор реестра и попробуем найти двоичный параметр с названием link в разделе HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer.

Твики реестра 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] |
Давайте разберемся, что к чему.Структура 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 параметра ничем не отличается от строки удаление двоичного параметра. Дело в том, что в одном разделе реестра не может существовать несколько параметров с одинаковыми названиями, даже если эти параметры будут разных видов. Не трудно догадаться, что строка для удаления параметров остальных видов будет иметь такой же вид. | ||
Строковые параметры | ||
Создание | «Название»=»Значение» | Будет создан строковый параметр с названием «Название» и значением «Значение». Обратите внимание: кавычки обязательны до и после знака «=». Без пробелов. |
Изменение | «Название»=»Значение» | Существующему строковому параметру с названием «Название» будет задано новое значение «Значение». |
Удаление | «Название»=- | Существующий строковый параметр с названием «Название» будет удален из реестра. |
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\SystemRestore] |
Этот 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] «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: | XP/Vista/7 | |
10 | Отключить использованием типичных задач для папок | В разделе HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows \CurrentVersion\Explorer\VisualEffects\WebView должны существовать следующие параметры DWORD: | 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 | |
10 | Отключить сообщение в браузере «Информация, передаваемая через Интернет, может стать доступной другим пользователям» | В разделе HKEY_CURRENT_USER\Software\Microsoft\Windows \CurrentVersion\Internet Settings\Zones\3 должен существовать параметр DWORD с названием «1601» и значением «0» (или 00000000 в шестнадцатеричном формате) | 2000/XP | |
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 | Нужно удалить из реестра следующие разделы: | 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/ Вы также можете использовать переменные среды для установки приоритета (другого). Я полагаю, что это помогает больше на ноутбуках, но неплохо установить программу или драйвер оттуда. Думаю, это будет следующий вопрос, который я напишу здесь …
************************************************* *************************************************
Знаете что, я просто удалю это, потому что некоторые люди даже не читают, просто копируют / вставляют и меняют значения.
************************************************* *************************************************
Дополнительно:
Вы увидите изменение номеров IRQ, когда вы установите драйвер в MSI Utility. Итак, они связаны друг с другом. Используйте осторожно. Этот метод практически устарел в современных системах и версиях Windows, но я все равно решил им поделиться. Это полезно в старых системах (а также в Win7 и Win8), где вы можете повысить приоритет своих драйверов, но не использовать его на графическом процессоре или интернет-адаптере, только если они действительно старые.Современные графические процессоры и сетевые карты используют режим MSI. Многие скажут, что это миф или плацебо, но есть небольшое улучшение, если все сделано правильно, чтобы снизить задержку некоторых драйверов. Это просто не для случайных пользователей.
Вот пример реестра:
************************************************* *************************************************
Пример: