reverseenengineering:основы

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
reverseenengineering:основы [2025/07/04 17:34] Lexreverseenengineering:основы [2025/07/04 17:56] (текущий) – [Операнды, коды, форматы] Lex
Строка 2: Строка 2:
  
 =====Некоторые основные команды ассемблера===== =====Некоторые основные команды ассемблера=====
-Команда^Выполняемая операция^Группа^ +^Команда^Выполняемая операция^Группа^ 
-AAA|ASCII-коррекция после сложения|Десятичная арифметика +|AAA|ASCII-коррекция после сложения|Десятичная арифметика| 
-   +|AAD|ASCII-коррекция регистра AX перед делением|Десятичная арифметика| 
-  AAD             ASCII-коррекция регистра AX перед делением Десятичная арифметика +|AAM|ASCII-коррекция регистра AX после умножения|Десятичная арифметика| 
-  AAM             ASCII-коррекция регистра AX после умножения Десятичная арифметика +|AAS|ASCII-коррекция после вычитания|Десятичная арифметика| 
-  AAS             ASCII-коррекция после вычитания Десятичная арифметика +|ADC|Сложение с переносом|Основная арифметика| 
-  ADC             Сложение с переносом Основная арифметика +|ADD|Сложение|Основная арифметика| 
-  ADD             Сложение Основная арифметика +|AND|Логическое "И"|Основная арифметика| 
-  AND             Логическое "И" Основная арифметика +|ARPL|Коррекция поля RPL селектора|Привилегированные| 
-  ARPL     Коррекция поля RPL селектора Привилегированные +|BOUND|Контроль нахождения индекса массива в границах|Специальные команды| 
-  BOUND     Контроль нахождения индекса массива в границах Специальные команды +|BSF|Сканирование бита вперед|Работа с битами| 
-  BSF             Сканирование бита вперед Работа с битами +|BSR|Сканирование бита назад|Работа с битами| 
-  BSR             Сканирование бита назад Работа с битами +|BSWAP|Перестановка байтов (внутри 32-бит. регистра)|Пересылка данных| 
-  BSWAP           Перестановка байтов (внутри 32-бит. регистра) Пересылка данных +|BT|Проверка бита|Работа с битами| 
-  BT             Проверка бита Работа с битами +|BTC|Проверка бита и дополнение|Работа с битами| 
-  BTC             Проверка бита и дополнение Работа с битами +|BTR|Проверка бита и сброс в 0|Работа с битами| 
-  BTR             Проверка бита и сброс в 0 Работа с битами +|BTS|Проверка бита и установка в 1|Работа с битами| 
-  BTS             Проверка бита и установка в 1 Работа с битами +|CALL|Вызов процедуры|Переходы и процедуры| 
-  CALL     Вызов процедуры Переходы и процедуры +|CBW|Преобразование байта в слово|Пересылка данных| 
-  CBW             Преобразование байта в слово Пересылка данных +|CDQ|Преобразование двойного слова в счетверенное слово|Пересылка данных| 
-  CDQ             Преобразование двойного слова в счетверенное слово Пересылка данных +|CLC|Сброс флажка переноса|Установка флажков| 
-  CLC             Сброс флажка переноса Установка флажков +|CLD|Сброс флажка направления|Установка флажков| 
-  CLD             Сброс флажка направления Установка флажков +|CLI|Сброс флажка прерывания|Установка флажков| 
-  CLI             Сброс флажка прерывания Установка флажков +|CLTS|Сброс флажка переключения задачи|Привилегированные| 
-  CLTS     Сброс флажка переключения задачи Привилегированные +|CMC|Инвертирование флажка переноса|Установка флажков| 
-  CMC             Инвертирование флажка переноса Установка флажков +|CMP|Сравнение двух операндов|Основная арифметика| 
-  CMP             Сравнение двух операндов Основная арифметика +|CMPS|Сравнение цепочечных операндов|Цепочечные команды| 
-  CMPS     Сравнение цепочечных операндов Цепочечные команды +|CMPXCHG|Сравнение и обмен|Специальные команды| 
-  CMPXCHG   Сравнение и обмен Специальные команды +|CWD|Преобразование слова в двойное слово|Пересылка данных| 
-  CWD             Преобразование слова в двойное слово Пересылка данных +|CWDE|Преобразование слова в двойное слово|Пересылка данных| 
-  CWDE     Преобразование слова в двойное слово Пересылка данных +|DAA|Десятичная коррекция AL после сложения|Десятичная арифметика| 
-  DAA             Десятичная коррекция AL после сложения Десятичная арифметика +|DAS|Десятичная коррекция AL после вычитания|Десятичная арифметика| 
-  DAS             Десятичная коррекция AL после вычитания Десятичная арифметика +|DEC|Декремент на 1|Инкремент и декремент| 
-  DEC             Декремент на 1 Инкремент и декремент +|DI|Беззнаковое деление|Умножение и деление| 
-  DIV             Беззнаковое деление Умножение и деление +|ENTER|Образование стекового кадра для параметров процедуры|Переходы и процедуры| 
-  ENTER     Образование стекового кадра для параметров процедуры Переходы и процедуры +|ES|Универсальная единая команда для сопроцессора с плавающей точкой|Сопроцессор| 
-  ESC             Универсальная единая команда для сопроцессора с плавающей точкой Сопроцессор +|F..|Команды сопроцессора с плавающей точкой|Сопроцессор| 
-  F...            Команды сопроцессора с плавающей точкой Сопроцессор +|HLT|Останов|Привилегированные| 
-  HLT   Останов Привилегированные +|IDIV|Знаковое деление|Умножение и деление| 
-  IDIVЗнаковое деление Умножение и деление +|IMUL|Знаковое умножение|Умножение и деление| 
-  IMUL   Знаковое умножение Умножение и деление +|IN|Ввод из порта|Системные команды| 
-  IN   Ввод из порта Системные команды +|INC|Инкремент на 1|Инкремент и декремент| 
-  INC   Инкремент на 1 Инкремент и декремент +|INS|Ввод из порта в цепочку|Цепочечные команды| 
-  INS   Ввод из порта в цепочку Цепочечные команды +|INT|Вызов процедуры прерывания |Вызов прерывания| 
-  INT   Вызов процедуры прерывания Вызов прерывания +|INTO|Вызов процедуры прерывания 4, если OF=1 |Вызов прерывания| 
-  INTO   Вызов процедуры прерывания 4, если OF=1 Вызов прерывания +|INVD|Недостоверность кэш-памяти |Системные команды| 
-  INVD   Недостоверность кэш-памяти Системные команды +|INVLPG|Недостоверность элемента буфера TLB |Системные команды| 
-  INVLPG   Недостоверность элемента буфера TLB Системные команды +|IRET|Возврат из прерывания |Вызов прерывания| 
-  IRET   Возврат из прерывания Вызов прерывания +|J(cond)|Условная передача управления |Условные команды| 
-  J(cond)   Условная передача управления Условные команды +|JCXZ-JECXZ|Переход, если значение счетчика равно нулю|Условные команды| 
-  JCXZ +|JMP|Безусловная передача управления |Переходы и процедуры| 
-/JECXZ   Переход, если значение счетчика равно нулю Условные команды +|LAHF|Пересылка из регистра флажков в регистр AH|Установка флажков| 
-  JMP   Безусловная передача управления Переходы и процедуры +|LAR|Загрузка байта прав доступа|Привилегированные| 
-  LAHF   Пересылка из регистра флажков в регистр AH Установка флажков +|LDS|Загрузка полного указателя (для DS)|Сегментные регистры| 
-  LAR   Загрузка байта прав доступа Привилегированные +|LEA|Загрузка эффективного адреса |Специальные команды| 
-  LDS   Загрузка полного указателя (для DS) Сегментные регистры +|LEAVE|Отмена действия команды ENTER перед выходом из процедуры|Переходы и процедуры| 
-  LEA   Загрузка эффективного адреса Специальные команды +|LES|Загрузка полного указателя (для ES) |Сегментные регистры| 
-  LEAVE   Отмена действия команды ENTER перед выходом из процедуры Переходы и процедуры +|LFS|Загрузка полного указателя (для FS) |Сегментные регистры| 
-  LES   Загрузка полного указателя (для ES) Сегментные регистры +|LGDT|Загрузка регистра глобальной дескрипторной таблицы |Привилегированные| 
-  LFS   Загрузка полного указателя (для FS) Сегментные регистры +|LGS|Загрузка полного указателя (для GS) |Сегментные регистры| 
-  LGDT   Загрузка регистра глобальной дескрипторной таблицы Привилегированные +|LIDT|Загрузка регистра дескрипторной таблицы прерываний |Привилегированные| 
-  LGS   Загрузка полного указателя (для GS) Сегментные регистры +|LLDT|Загрузка регистра локальной дескрипторной таблицы |Привилегированные| 
-  LIDT   Загрузка регистра дескрипторной таблицы прерываний Привилегированные +|LMSW|Загрузка слова состояния машины |Привилегированные| 
-  LLDT   Загрузка регистра локальной дескрипторной таблицы Привилегированные +|LOCK|Префикс выдачи сигнала LOCK# |Системные команды| 
-  LMSW   Загрузка слова состояния машины Привилегированные +|LODS|Загрузка цепочечного операнда в аккумулятор |Цепочечные команды| 
-  LOCK   Префикс выдачи сигнала LOCK# Системные команды +|LOOP|Управление циклом со счетчиком в регистре CX |Условные команды| 
-  LODS   Загрузка цепочечного операнда в аккумулятор Цепочечные команды +|LOOPE-LOOPZ|Управление циклом со счетчиком в регистре CX |Условные команды| 
-  LOOP   Управление циклом со счетчиком в регистре CX Условные команды +|LOOPNE-LOOPNZ|Управление циклом со счетчиком в регистре CX |Условные команды| 
-  LOOPE +|LSL|Загрузка предела сегмента |Системные команды| 
-/LOOPZ   Управление циклом со счетчиком в регистре CX Условные команды +|LSS|Загрузка полного указателя (для SS) |Сегментные регистры| 
-  LOOPNE +|LTR|Загрузка регистра задачи |Привилегированные| 
-/LOOPNZ   Управление циклом со счетчиком в регистре CX Условные команды +|MOV|Пересылка данных |Пересылка данных| 
-  LSL   Загрузка предела сегмента Системные команды +|MOV(spec)|Пересылка в специальные регистры и из них |Привилегированные| 
-  LSS   Загрузка полного указателя (для SS) Сегментные регистры +|MOVS|Пересылка данных из цепочки в цепочку |Цепочечные команды| 
-  LTR   Загрузка регистра задачи Привилегированные +|MOVSX|Пересылка со знаковым расширением |Пересылка данных| 
-  MOV   Пересылка данных Пересылка данных +|MOVZX|Пересылка с нулевым расширением |Пересылка данных| 
-  MOV(spec) Пересылка в специальные регистры и из них Привилегированные +|MUL|Беззнаковое умножение|Умножение и деление| 
-  MOVS   Пересылка данных из цепочки в цепочку Цепочечные команды +|NEG|Получение дополнительного кода (изменение знака)|Основная арифметика| 
-  MOVSX   Пересылка со знаковым расширением Пересылка данных +|NOP|Пустая операция |Пересылка данных| 
-  MOVZX   Пересылка с нулевым расширением Пересылка данных +|NOT|Инвертирование |Основная арифметика| 
-  MUL   Беззнаковое умножение Умножение и деление +|OR|Логическое включающее "ИЛИ" |Основная арифметика| 
-  NEG   Получение дополнительного кода (изменение знака) Основная арифметика +|OUT|Вывод в порт |Системные команды| 
-  NOP   Пустая операция Пересылка данных +|OUTS|Вывод цепочки в порт |Цепочечные команды| 
-  NOT   Инвертирование Основная арифметика +|POP|Извлечение слова из стека |Работа со стеком| 
-  OR   Логическое включающее "ИЛИ" Основная арифметика +|POPA|Извлечение из стека всех общих регистров |Работа со стеком| 
-  OUT   Вывод в порт Системные команды +|POPF|Извлечение из стека в регистр флажков |Работа со стеком| 
-  OUTS   Вывод цепочки в порт Цепочечные команды +|PUSH|Засылка операнда в стек |Работа со стеком| 
-  POP   Извлечение слова из стека Работа со стеком +|PUSHA|Засылка в стек всех общих регистров |Работа со стеком| 
-  POPA   Извлечение из стека всех общих регистров Работа со стеком +|PUSHF|Засылка в стек регистра флажков |Работа со стеком| 
-  POPF   Извлечение из стека в регистр флажков Работа со стеком +|RCL|Циклический сдвиг влево с участием флажка CF |Команды сдвига| 
-  PUSH   Засылка операнда в стек Работа со стеком +|RCR|Циклический сдвиг вправо с участием флажка CF |Команды сдвига| 
-  PUSHA   Засылка в стек всех общих регистров Работа со стеком +|REP|Префикс повторения цепочечной операции |Цепочечные команды| 
-  PUSHF   Засылка в стек регистра флажков Работа со стеком +|REPE-REPZ|Префикс повторения цепочечной операции |Цепочечные команды| 
-  RCL   Циклический сдвиг влево с участием флажка CF Команды сдвига +|REPNE-REPNZ|Префикс повторения цепочечной операции |Цепочечные команды| 
-  RCR   Циклический сдвиг вправо с участием флажка CF Команды сдвига +|RET|Возврат из процедуры |Переходы и процедуры| 
-  REP   Префикс повторения цепочечной операции Цепочечные команды +|ROL|Циклический сдвиг влево |Команды сдвига| 
-  REPE +|ROR|Циклический сдвиг вправо |Команды сдвига| 
-/REPZ   Префикс повторения цепочечной операции Цепочечные команды +|SAHF|Пересылка регистра AH в регистр флажков |Установка флажков| 
-  REPNE +|SAL|Сдвиг влево (умножение на 2) |Команды сдвига| 
-/REPNZ   Префикс повторения цепочечной операции Цепочечные команды +|SALC|Установка регистра AL по флажку CF |Установка флажков| 
-  RET   Возврат из процедуры Переходы и процедуры +|SAR|Сдвиг вправо (знаковое деление на 2) |Команды сдвига| 
-  ROL   Циклический сдвиг влево Команды сдвига +|SBB|Вычитание с заемом |Основная арифметика| 
-  ROR   Циклический сдвиг вправо Команды сдвига +|SCAS|Сравнение (сканирование) цепочечных данных |Цепочечные команды| 
-  SAHF   Пересылка регистра AH в регистр флажков Установка флажков +|SET(cond)|Установка байта по условию |Условные команды| 
-  SAL   Сдвиг влево (умножение на 2) Команды сдвига +|SGDT|Сохранение регистра глобальной дескрипторной таблицы |Привилегированные| 
-  SALC   Установка регистра AL по флажку CF Установка флажков +|SHL|Сдвиг влево (умножение на 2) |Команды сдвига| 
-  SAR   Сдвиг вправо (знаковое деление на 2) Команды сдвига +|SHLD|Двойной сдвиг влево |Команды сдвига| 
-  SBB   Вычитание с заемом Основная арифметика +|SHR|Сдвиг вправо (беззнаковое деление на 2) |Команды сдвига| 
-  SCAS   Сравнение (сканирование) цепочечных данных Цепочечные команды +|SHRD|Двойной сдвиг вправо |Команды сдвига| 
-  SET(cond) Установка байта по условию Условные команды +|SIDT|Сохранение регистра дескрипторной таблицы прерываний |Привилегированные| 
-  SGDT   Сохранение регистра глобальной дескрипторной таблицы Привилегированные +|SLDT|Сохранение регистра локальной дескрипторной таблицы |Привилегированные| 
-  SHL   Сдвиг влево (умножение на 2) Команды сдвига +|SMSW|Сохранение слова состояния машины |Привилегированные| 
-  SHLD   Двойной сдвиг влево Команды сдвига +|STC|Установка флажка переноса |Установка флажков| 
-  SHR   Сдвиг вправо (беззнаковое деление на 2) Команды сдвига +|STD|Установка флажка направления |Установка флажков| 
-  SHRD   Двойной сдвиг вправо Команды сдвига +|STI|Установка флажка прерывания |Установка флажков| 
-  SIDT   Сохранение регистра дескрипторной таблицы прерываний Привилегированные +|STOS|Сохранение цепочечных данных |Цепочечные команды| 
-  SLDT   Сохранение регистра локальной дескрипторной таблицы Привилегированные +|STR|Сохранение регистра задачи |Привилегированные| 
-  SMSW   Сохранение слова состояния машины Привилегированные +|SUB|Вычитание |Основная арифметика| 
-  STC   Установка флажка переноса Установка флажков +|TEST|Логическое сравнение |Основная арифметика| 
-  STD   Установка флажка направления Установка флажков +|VERR|Проверка сегмента на считывание |Системные команды| 
-  STI   Установка флажка прерывания Установка флажков +|VERW|Проверка сегмента на запись |Системные команды| 
-  STOS   Сохранение цепочечных данных Цепочечные команды +|WAIT|Ожидание |Системные команды| 
-  STR   Сохранение регистра задачи Привилегированные +|WBINVD|Обратная запись и недостоверность кэш-памяти |Системные команды| 
-  SUB   Вычитание Основная арифметика +|XADD|Обмен и сложение |Специальные команды| 
-  TEST   Логическое сравнение Основная арифметика +|XCHG|Обмен данными - регистр/регистр или регистр/память |Пересылка данных| 
-  VERR   Проверка сегмента на считывание Системные команды +|XLAT|Перекодирование байта по таблице |Специальные команды| 
-  VERW   Проверка сегмента на запись Системные команды +|XOR|Логическое исключающее "ИЛИ" |Основная арифметика
-  WAIT   Ожидание Системные команды + 
-  WBINVD   Обратная запись и недостоверность кэш-памяти Системные команды +===== ОСНОВНЫЕ КОМАНДЫ АРИФМЕТИКИ ===== 
-  XADD   Обмен и сложение Специальные команды + 
-  XCHG   Обмен данными - регистр/регистр или регистр/память Пересылка данных +==== Группа "Основная арифметика" ==== 
-  XLAT   Перекодирование байта по таблице Специальные команды + 
-  XOR   Логическое исключающее "ИЛИ" Основная арифметика+> Команды ADD, OR, ADC, SBB, AND, SUB, XOR, CMP - эти восемь команд можно назвать самыми первыми в системе команд x86 ("первая восьмерка"), достаточно взглянуть на ту таблицу команд, в которой команды расположены в порядке кодов операций. Все эти команды имеют два операнда и совершенно одинаковый формат (три разных формы), как на языке ассемблера, так и в машинных кодах. 
 + 
 +> Команда TEST также имеет два операнда. Три ее формы почти такие же, как у команд первой восьмерки и отличаются только в деталях. 
 + 
 +> Команды NEG и NOT имеют только один операнд, их формат намного проще. 
 + 
 +> Примечание. Команды умножения и деления помещены в свою отдельную группу:  Умножение и деление  
 + 
 +==== Операнды, коды, форматы ==== 
 +
 +=== Порядок операндов === 
 +> На языке ассемблера для команды с двумя операндами принято записывать операнды в следующем порядке: 
 + 
 +  CMD   dst, src 
 + 
 + 
 +> Здесь CMD - мнемоника команды, dst (destination) - приемник, src (source) - источник. Результат выполнения операции заносится в первый операнд dst. 
 + 
 +> В операциях вычитания из значения dst вычитается значение src. 
 + 
 +> Таким образом, операции сложения ADD и вычитания SUB будут выглядить так: 
 + 
 +  dst = dst + src 
 +  dst = dst - src 
 + 
 +=== Команды с участием флага переноса === 
 + 
 +> Команда ADC выполняет сложение трех слагаемых: первого (dst) операнда, второго (src) операнда и флага переноса CF (значение 0 или 1). Результат выполнения операции заносится в первый (dst) операнд. 
 + 
 +> По команде SBB из значения первого (dst) операнда вычитается значение второго (src) операнда. Из полученного результата вычитается значение флага переноса CF (значение 0 или 1). Результат выполнения операции заносится в первый (dst) операнд. 
 + 
 +> Условно это можно показать так: 
 + 
 +   dst = dst + src + CF 
 +   dst = dst - src - CF 
 + 
 +==== Логические операции ==== 
 + 
 +> Команды AND, OR, XOR выполняют поразрядные логические операции для двух своих операндов. Для каждой битовой позиции результат определяется так: 
 + 
 +==== Команды с одним операндом ==== 
 + 
 +> Команда NEG выполняет арифметическую операцию вычитания операнда из нуля. Фактически это равносильно изменению знака операнда. 
 + 
 +> Команда NOT выполняет порязрядную логическую операцию инвертирования, каждый 0 заменяется на 1 и каждая 1 заменяется на 0. 
 + 
 +==== Сравнение двух операндов ==== 
 +
 +==== Установка флажков ==== 
 +
 +====  ==== 
 +>
  • reverseenengineering/основы.1751625271.txt.gz
  • Последнее изменение: 2025/07/04 17:34
  • Lex