reverseenengineering:основы

Различия

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

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

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
reverseenengineering:основы [2025/07/04 17:43] – [Некоторые основные команды ассемблера] Lexreverseenengineering:основы [2025/07/04 17:56] (текущий) – [Операнды, коды, форматы] Lex
Строка 36: Строка 36:
 |DEC|Декремент на 1|Инкремент и декремент| |DEC|Декремент на 1|Инкремент и декремент|
 |DI|Беззнаковое деление|Умножение и деление| |DI|Беззнаковое деление|Умножение и деление|
-|ENTER|Образование стекового кадра для параметров процедуры| Переходы и процедуры| +|ENTER|Образование стекового кадра для параметров процедуры|Переходы и процедуры| 
-|ES|Универсальная единая команда для сопроцессора с плавающей точкой| Сопроцессор| +|ES|Универсальная единая команда для сопроцессора с плавающей точкой|Сопроцессор| 
-|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-JECXZ|Переход, если значение счетчика равно нулю|Условные команды| 
-|JMP| Безусловная передача управления |Переходы и процедуры| +|JMP|Безусловная передача управления |Переходы и процедуры| 
-|LAHF| Пересылка из регистра флажков в регистр AH| Установка флажков| +|LAHF|Пересылка из регистра флажков в регистр AH|Установка флажков| 
-|LAR| Загрузка байта прав доступа| Привилегированные| +|LAR|Загрузка байта прав доступа|Привилегированные| 
-|LDS| Загрузка полного указателя (для DS)| Сегментные регистры| +|LDS|Загрузка полного указателя (для DS)|Сегментные регистры| 
-|LEA| Загрузка эффективного адреса |Специальные команды| +|LEA|Загрузка эффективного адреса |Специальные команды| 
-|LEAVE| Отмена действия команды ENTER перед выходом из процедуры| Переходы и процедуры| +|LEAVE|Отмена действия команды ENTER перед выходом из процедуры|Переходы и процедуры| 
-|LES| Загрузка полного указателя (для ES) |Сегментные регистры| +|LES|Загрузка полного указателя (для ES) |Сегментные регистры| 
-|LFS| Загрузка полного указателя (для FS) |Сегментные регистры| +|LFS|Загрузка полного указателя (для FS) |Сегментные регистры| 
-|LGDT| Загрузка регистра глобальной дескрипторной таблицы |Привилегированные| +|LGDT|Загрузка регистра глобальной дескрипторной таблицы |Привилегированные| 
-|LGS| Загрузка полного указателя (для GS) |Сегментные регистры| +|LGS|Загрузка полного указателя (для GS) |Сегментные регистры| 
-|LIDT| Загрузка регистра дескрипторной таблицы прерываний |Привилегированные| +|LIDT|Загрузка регистра дескрипторной таблицы прерываний |Привилегированные| 
-|LLDT| Загрузка регистра локальной дескрипторной таблицы |Привилегированные| +|LLDT|Загрузка регистра локальной дескрипторной таблицы |Привилегированные| 
-|LMSW| Загрузка слова состояния машины |Привилегированные| +|LMSW|Загрузка слова состояния машины |Привилегированные| 
-|LOCK| Префикс выдачи сигнала LOCK# |Системные команды| +|LOCK|Префикс выдачи сигнала LOCK# |Системные команды| 
-|LODS| Загрузка цепочечного операнда в аккумулятор |Цепочечные команды| +|LODS|Загрузка цепочечного операнда в аккумулятор |Цепочечные команды| 
-|LOOP| Управление циклом со счетчиком в регистре CX |Условные команды| +|LOOP|Управление циклом со счетчиком в регистре CX |Условные команды| 
-|LOOPE-LOOPZ| Управление циклом со счетчиком в регистре CX |Условные команды| +|LOOPE-LOOPZ|Управление циклом со счетчиком в регистре CX |Условные команды| 
-|LOOPNE-LOOPNZ| Управление циклом со счетчиком в регистре CX |Условные команды| +|LOOPNE-LOOPNZ|Управление циклом со счетчиком в регистре CX |Условные команды| 
-|LSL| Загрузка предела сегмента |Системные команды| +|LSL|Загрузка предела сегмента |Системные команды| 
-|LSS| Загрузка полного указателя (для SS) |Сегментные регистры| +|LSS|Загрузка полного указателя (для SS) |Сегментные регистры| 
-|LTR| Загрузка регистра задачи |Привилегированные| +|LTR|Загрузка регистра задачи |Привилегированные| 
-|MOV| Пересылка данных |Пересылка данных| +|MOV|Пересылка данных |Пересылка данных| 
-|MOV(spec) Пересылка в специальные регистры и из них |Привилегированные| +|MOV(spec)|Пересылка в специальные регистры и из них |Привилегированные| 
-|MOVS| Пересылка данных из цепочки в цепочку |Цепочечные команды| +|MOVS|Пересылка данных из цепочки в цепочку |Цепочечные команды| 
-|MOVSX| Пересылка со знаковым расширением |Пересылка данных| +|MOVSX|Пересылка со знаковым расширением |Пересылка данных| 
-|MOVZX| Пересылка с нулевым расширением |Пересылка данных| +|MOVZX|Пересылка с нулевым расширением |Пересылка данных| 
-|MUL| Беззнаковое умножение| Умножение и деление| +|MUL|Беззнаковое умножение|Умножение и деление| 
-|NEG| Получение дополнительного кода (изменение знака)| Основная арифметика| +|NEG|Получение дополнительного кода (изменение знака)|Основная арифметика| 
-|NOP| Пустая операция |Пересылка данных| +|NOP|Пустая операция |Пересылка данных| 
-|NOT| Инвертирование |Основная арифметика| +|NOT|Инвертирование |Основная арифметика| 
-|OR| Логическое включающее "ИЛИ" |Основная арифметика| +|OR|Логическое включающее "ИЛИ" |Основная арифметика| 
-|OUT| Вывод в порт |Системные команды| +|OUT|Вывод в порт |Системные команды| 
-|OUTS| Вывод цепочки в порт |Цепочечные команды| +|OUTS|Вывод цепочки в порт |Цепочечные команды| 
-|POP| Извлечение слова из стека |Работа со стеком| +|POP|Извлечение слова из стека |Работа со стеком| 
-|POPA| Извлечение из стека всех общих регистров |Работа со стеком| +|POPA|Извлечение из стека всех общих регистров |Работа со стеком| 
-|POPF| Извлечение из стека в регистр флажков |Работа со стеком| +|POPF|Извлечение из стека в регистр флажков |Работа со стеком| 
-|PUSH| Засылка операнда в стек |Работа со стеком| +|PUSH|Засылка операнда в стек |Работа со стеком| 
-|PUSHA| Засылка в стек всех общих регистров |Работа со стеком| +|PUSHA|Засылка в стек всех общих регистров |Работа со стеком| 
-|PUSHF| Засылка в стек регистра флажков |Работа со стеком| +|PUSHF|Засылка в стек регистра флажков |Работа со стеком| 
-|RCL| Циклический сдвиг влево с участием флажка CF |Команды сдвига| +|RCL|Циклический сдвиг влево с участием флажка CF |Команды сдвига| 
-|RCR| Циклический сдвиг вправо с участием флажка CF |Команды сдвига| +|RCR|Циклический сдвиг вправо с участием флажка CF |Команды сдвига| 
-|REP| Префикс повторения цепочечной операции |Цепочечные команды| +|REP|Префикс повторения цепочечной операции |Цепочечные команды| 
-|REPE-REPZ| Префикс повторения цепочечной операции |Цепочечные команды| +|REPE-REPZ|Префикс повторения цепочечной операции |Цепочечные команды| 
-|REPNE-REPNZ| Префикс повторения цепочечной операции |Цепочечные команды| +|REPNE-REPNZ|Префикс повторения цепочечной операции |Цепочечные команды| 
-|RET| Возврат из процедуры |Переходы и процедуры| +|RET|Возврат из процедуры |Переходы и процедуры| 
-|ROL| Циклический сдвиг влево |Команды сдвига| +|ROL|Циклический сдвиг влево |Команды сдвига| 
-|ROR| Циклический сдвиг вправо |Команды сдвига| +|ROR|Циклический сдвиг вправо |Команды сдвига| 
-|SAHF| Пересылка регистра AH в регистр флажков |Установка флажков| +|SAHF|Пересылка регистра AH в регистр флажков |Установка флажков| 
-|SAL| Сдвиг влево (умножение на 2) |Команды сдвига| +|SAL|Сдвиг влево (умножение на 2) |Команды сдвига| 
-|SALC| Установка регистра AL по флажку CF |Установка флажков| +|SALC|Установка регистра AL по флажку CF |Установка флажков| 
-|SAR| Сдвиг вправо (знаковое деление на 2) |Команды сдвига| +|SAR|Сдвиг вправо (знаковое деление на 2) |Команды сдвига| 
-|SBB| Вычитание с заемом |Основная арифметика| +|SBB|Вычитание с заемом |Основная арифметика| 
-|SCAS| Сравнение (сканирование) цепочечных данных |Цепочечные команды| +|SCAS|Сравнение (сканирование) цепочечных данных |Цепочечные команды| 
-|SET(cond) Установка байта по условию |Условные команды| +|SET(cond)|Установка байта по условию |Условные команды| 
-|SGDT| Сохранение регистра глобальной дескрипторной таблицы |Привилегированные| +|SGDT|Сохранение регистра глобальной дескрипторной таблицы |Привилегированные| 
-|SHL| Сдвиг влево (умножение на 2) |Команды сдвига| +|SHL|Сдвиг влево (умножение на 2) |Команды сдвига| 
-|SHLD| Двойной сдвиг влево |Команды сдвига| +|SHLD|Двойной сдвиг влево |Команды сдвига| 
-|SHR| Сдвиг вправо (беззнаковое деление на 2) |Команды сдвига| +|SHR|Сдвиг вправо (беззнаковое деление на 2) |Команды сдвига| 
-|SHRD| Двойной сдвиг вправо |Команды сдвига| +|SHRD|Двойной сдвиг вправо |Команды сдвига| 
-|SIDT| Сохранение регистра дескрипторной таблицы прерываний |Привилегированные| +|SIDT|Сохранение регистра дескрипторной таблицы прерываний |Привилегированные| 
-|SLDT| Сохранение регистра локальной дескрипторной таблицы |Привилегированные| +|SLDT|Сохранение регистра локальной дескрипторной таблицы |Привилегированные| 
-|SMSW| Сохранение слова состояния машины |Привилегированные| +|SMSW|Сохранение слова состояния машины |Привилегированные| 
-|STC| Установка флажка переноса |Установка флажков| +|STC|Установка флажка переноса |Установка флажков| 
-|STD| Установка флажка направления |Установка флажков| +|STD|Установка флажка направления |Установка флажков| 
-|STI| Установка флажка прерывания |Установка флажков| +|STI|Установка флажка прерывания |Установка флажков| 
-|STOS| Сохранение цепочечных данных |Цепочечные команды| +|STOS|Сохранение цепочечных данных |Цепочечные команды| 
-|STR| Сохранение регистра задачи |Привилегированные| +|STR|Сохранение регистра задачи |Привилегированные| 
-|SUB| Вычитание |Основная арифметика| +|SUB|Вычитание |Основная арифметика| 
-|TEST| Логическое сравнение |Основная арифметика| +|TEST|Логическое сравнение |Основная арифметика| 
-|VERR| Проверка сегмента на считывание |Системные команды| +|VERR|Проверка сегмента на считывание |Системные команды| 
-|VERW| Проверка сегмента на запись |Системные команды| +|VERW|Проверка сегмента на запись |Системные команды| 
-|WAIT| Ожидание |Системные команды| +|WAIT|Ожидание |Системные команды| 
-|WBINVD| Обратная запись и недостоверность кэш-памяти |Системные команды| +|WBINVD|Обратная запись и недостоверность кэш-памяти |Системные команды| 
-|XADD| Обмен и сложение |Специальные команды| +|XADD|Обмен и сложение |Специальные команды| 
-|XCHG| Обмен данными - регистр/регистр или регистр/память |Пересылка данных| +|XCHG|Обмен данными - регистр/регистр или регистр/память |Пересылка данных| 
-|XLAT| Перекодирование байта по таблице |Специальные команды| +|XLAT|Перекодирование байта по таблице |Специальные команды| 
-|XOR| Логическое исключающее "ИЛИ" |Основная арифметика|+|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/основы.1751625804.txt.gz
  • Последнее изменение: 2025/07/04 17:43
  • Lex