reverseenengineering:основы

Различия

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

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

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