Приключения языка ассемблера: полный курс. Выучите язык своего компьютера [2020]
Assembly Language Adventures: Complete Course. Learn the language of your computer [2020]
Udemy
xor pd
Изучить язык ассемблера.
Серия x86 Adventures обучает вас языку вашего компьютера - ассемблеру x86, с нуля. Никаких предварительных знаний не предполагается.
Это полный сборник x86 Assembly Adventures. Он охватывает все, от реальных основ до независимого (и жесткого) программиста на ассемблере x86.
Для кого этот курс
- Абсолютные новички
- Опытные программисты
- Люди, которые действительно хотят знать, как все работает
- Программисты, которые хотят улучшить свои навыки
- Программисты, которые хотят писать более быстрый код
- Всем, кто хочет заняться реверс-инжинирингом или индустрией безопасности
Курс состоит из видеолекций. Лекция может быть основана на презентации или на примере из реальной жизни, показывающем, как я что-то делаю за компьютером. Практически каждая видеолекция сопровождается каким-либо упражнением. Эти упражнения имеют открытый исходный код, и вы можете получить их на github.
Очень важно, чтобы вы выполняли упражнения. Вы многому научитесь из лекций, но если вы не будете выполнять упражнения, это будет пустой тратой вашего времени и денег. (Или хотя бы убедитесь, что вы умеете их делать, если у вас больше опыта).
Технологический стек курса
В этом курсе не предполагается никаких предварительных знаний, но я предполагаю некоторые вещи, касающиеся вашей системы, поэтому убедитесь, что все здесь описывает вас:
- Вы используете операционную систему Windows. (В видеороликах курса используется Windows 7). Рекомендуется использовать как минимум Windows XP. (Это означает, что он будет отлично работать в Windows 7 и Windows 10).
- У вас процессор x86. Мы изучаем 32-битный x86, но этот курс также будет работать на 64-битных процессорах.
- Вариант сборки: 32-битный защищенный режим x86.
- Ассемблер: плоский ассемблер (FASM)
- Отладчик: WinDbg.
Содержание
Раздел 1 - Вступление
1.1 Об этом курсе
Раздел 2 - Двоичная система счисленияОбщая информация о курсе: список основных предметов, которые будут рассмотрены в ходе этого курса, некоторые технические детали и некоторые требования к курсу.
1.2 Инструменты - ПроводникОбъяснение проводника файлов - программы, которую мы используем для просмотра файлов на нашем компьютере. Мы также обсуждаем Total Commander, который я собираюсь использовать на этом курсе.
1.3 Инструменты Hex EditorОбъяснение Hex Editor - программы, которая позволяет нам просматривать внутреннюю структуру файлов внутри нашего компьютера. В частности, мы обсуждаем HxD Hex Editor.
1.4 Инструменты - Текстовый редакторМы обсуждаем текстовые редакторы - программы, которые используются для просмотра и редактирования текстовых файлов на нашем компьютере. Мы представляем блокнот, блокнот ++ и немного vim.
2.1 Сложение и вычитание
Раздел 3 - Архитектура x86Мы обсуждаем идею числовых оснований, и, в частности, рассмотрим основание 10 и основание 2. Наконец, у нас есть несколько примеров сложения и вычитания в базе 2.
2.2 Базовое преобразование (часть 1)Мы представляем три способа преобразования чисел между различными числовыми представлениями: прямое вычисление, определение наибольшей степени и вычисление остатка.
2.3 Базовое преобразование (часть 2)Мы обсудим, как решить, какой метод преобразования использовать в разных случаях, а также покажем несколько примеров преобразования чисел между разными основаниями.
2.4 Шестнадцатеричное преобразованиеМы обсуждаем шестнадцатеричное основание (основание 16) и показываем его особое отношение к основанию 2.
2.5 Шестнадцатеричное преобразование (бонус)Мы отвечаем на вопрос: почему каждая шестнадцатеричная цифра представлена ровно 4 двоичными цифрами?
2.6 Подписанные номера (часть 1)Мы обсуждаем операцию вычитания, а также отрицательные числа в представлении с основанием 10. Мы изучаем, как вызвать вычитание, используя только операцию сложения.
2.7 Подписанные номера (часть 2)Мы вводим представление дополнения до двух, которое позволяет нам иметь дело со знаковыми числами в базе 2, так же, как мы делали это ранее в базе 10.
2.8 Подписанные номера (часть 3)Мы рассмотрим примеры сложения со знаком, мы имеем дело с некоторыми исключениями, касающимися представления двух дополнений, затем мы рассмотрим графическое представление
положительных и отрицательных чисел в двух дополнениях и, наконец, обсудим некоторую философию представления.
положительных и отрицательных чисел в двух дополнениях и, наконец, обсудим некоторую философию представления.
3.1 Основы истории
Раздел 4 - введение в FASMБазовая история архитектуры x86: первые процессоры в семействе, идея обратной совместимости в архитектуре x86 и различные режимы внутри процессоров x86.
3.2 Базовая структураМы объясняем, как программы хранятся в памяти и как они выполняются процессором. Далее мы изучаем 32-битные регистры x86.
3.3 Первые инструкции (часть 1)Мы узнаем об общей структуре инструкций x86 и обсуждаем инструкцию MOV.
3.4 Первые инструкции (часть 2)Мы представляем инструкции ADD и SUB.
3.5 Основы арифметики (часть 1)Мы представляем инструкции INC, DEC и MUL.
3.6 Основы арифметики (часть 2)Мы представляем инструкцию DIV.
3.7 Основы арифметики (часть 3)Мы показываем примеры исключений, сгенерированных с помощью инструкции DIV.
3.8 Основы арифметики (часть 4)Мы рассмотрим несколько примеров использования инструкции DIV (с числовыми примерами). Наконец, мы подводим итоги серии уроков по базовой арифметике.
4.1 fasm intro
Раздел 5 - РазветвленияПредставляем FASM - Flat Assembler.
Мы обсуждаем несколько различных распространенных ассемблеров и, наконец, описываем FASM и несколько разных причин для использования FASM. Мы закончим кратким описанием того, как установить FASM. Мы подробно остановимся на этом в следующих уроках.
4.2 установка fasmМы обсуждаем несколько различных распространенных ассемблеров и, наконец, описываем FASM и несколько разных причин для использования FASM. Мы закончим кратким описанием того, как установить FASM. Мы подробно остановимся на этом в следующих уроках.
Установка Fasm. Мы заглянем на веб-сайт Fasm и объясним, как загрузить и установить Fasm.
4.3 Первые программы - голыеСобираем нашу первую программу - bare.asm и просматриваем сгенерированный файл в шестнадцатеричном редакторе.
4.4 Первые программы - консоль (часть 1)Мы посмотрим на программу console.asm, которая является нашей первой консольной программой. Обсуждаем исходный код console.asm
4.5 Первые программы - консоль (часть 2)Мы пытаемся собрать программу console.asm, и нам нужно исправить переменную окружения INCLUDE, чтобы это произошло. Наконец-то нам удалось собрать и запустить программу. Затем мы анализируем выходной файл с помощью шестнадцатеричного редактора.
4.6 Первые программы - первая программа (Часть 1)Мы представляем first_program.asm. Это наша первая программа, у которой есть ввод и вывод. Мы смотрим на исходный код и сравниваем его с console.asm, предыдущей программой. Позже попробуем собрать программу. Для этой задачи мы должны обновить переменную среды INCLUDE. Наконец, мы запускаем программу и анализируем вывод программы.
4.7 Первые программы - первая программа (Часть 2)Создаем собственную программу, основанную на first_program.asm. Наша программа считывает два числа от пользователя, складывает эти два числа и затем выводит результат обратно на консоль.
4.8 Основные ошибки сборки (часть 1)Мы представляем различные примеры ошибок времени сборки и способы их устранения.
Начнем с ошибки записи.
4.9 Основные ошибки сборки (часть 2)Начнем с ошибки записи.
Мы представляем больше примеров ошибок времени сборки и способы их устранения: ошибка файла не найдена, ошибка неопределенного символа, ошибка недопустимой инструкции, ошибка размера не соответствует, ошибка другого неопределенного символа и, наконец, ошибка недопустимого операнда.
5.1 Введение в ветвление (часть 1)
Раздел 6 - Подписанные операцииМы представляем идею ветвления: выполнение нашей программы нелинейным
образом. Затем мы обсуждаем регистр EIP.
5.2 Введение в ветвление (часть 2)образом. Затем мы обсуждаем регистр EIP.
Мы представляем инструкцию JMP, обсуждаем метки и рассматриваем простой
пример использования инструкции JMP.
5.3 Примеры JMPпример использования инструкции JMP.
Мы рассмотрим два примера с использованием инструкции JMP: бесконечный цикл и пример пропуска инструкций с использованием инструкции JMP.
5.4 Регистр флагов (часть 1)Мы представляем регистр флагов и обсуждаем нулевой флаг.
5.5 Регистр флагов (часть 2)Мы обсуждаем флаг Sign и флаг Carry. Затем мы рассмотрим несколько примеров флага переноски.
5.6 Регистр флагов (часть 3)Мы обсуждаем флаг переполнения и рассмотрим различные примеры, касающиеся флага переполнения.
5.7 Регистр флагов (часть 4)Мы сравниваем поведение флагов Overflow и Carry. Мы также рассматриваем различные способы использования флага переполнения и флага переноса для чисел со знаком и без знака .
5.8 Базовое условное ветвлениеМы описываем идею условного перехода и видим несколько примеров использования инструкций условного перехода JZ и JNZ. Затем мы кратко упомянем некоторые другие инструкции условного перехода.
5.9 Более условное ветвление (часть 1)Мы представляем инструкцию CMP и идею сравнения чисел. Затем мы обсуждаем сравнение без знака и со знаком и вводим специальные инструкции для сравнения без знака и со знаком.
5.10 Более условное ветвление (часть 2)Мы описываем сравнение со знаком более подробно и добавляем небольшое примечание о написании читаемого кода со специализированными инструкциями перехода.
5.11 Структурированное ветвление (часть 1)Мы знакомим с идеей структурированного ветвления и его преимуществами для написания хорошего кода. Затем мы обсудим схему условного исполнения.
5.12 Структурированное ветвление (часть 2)Обсуждаем выкройку петель и отрыв от петель.
5.13 Структурированное ветвление (часть 3)Мы вводим некоторые практические правила ветвления. Затем мы показываем пример упрощения кода спагетти с использованием идеи структурированного ветвления.
6.1 Подписанные операции (часть 1)
Раздел 7 - Побитовые операцииМы узнаем об инструкции NEG и обсуждаем концепцию расширения знака . Мы вводим инструкции MOVZX и MOVSX.
6.2 Подписанные операции (часть 2)Мы обсуждаем различия между инструкциями MOVZX и MOVSX. Затем изучаем инструкции CBW, CWDE, CWD, CDQ.
6.3 Подписанные операции (часть 3)Мы представляем инструкции IMUL и IDIV, подписанные версии инструкций MUL и DIV. Мы объясняем, как они работают, и, наконец, показываем пример использования этих инструкций.
7.1 Введение в булеву алгебру (часть 1)
Раздел 8 - объем памятиМы представляем идею основных операторов и основных операторов НЕ, И и ИЛИ.
7.2 Введение в булеву алгебру (часть 2)Мы обсуждаем таблицы истинности и диаграммы Венна основных операторов (НЕ, И,
ИЛИ). Затем мы рассмотрим несколько примеров с использованием основных операторов.
7.3 Введение в булеву алгебру (часть 3)ИЛИ). Затем мы рассмотрим несколько примеров с использованием основных операторов.
Основные свойства операторов НЕ, И и ИЛИ: двойное отрицание, законы коммутативности, ассоциативные законы, законы распределения. Наконец, мы показываем пример использования диаграммы Венна для проверки истинности уравнения.
7.4 Введение в булеву алгебру (часть 4)Мы вводим законы Де Моргана, а затем приводим несколько примеров упрощающих утверждений. Затем мы обсудим оператор XOR. Наконец, упоминаются дальнейшие объекты исследования.
7.5 Побитовые инструкции (часть 1)Мы вводим инструкции NOT, AND, OR и XOR. Затем мы обсудим битовый сдвиг с использованием инструкций SHL и SHR.
7.6 Побитовые инструкции (часть 2)Мы обсуждаем арифметический сдвиг (сдвиг, который понимает знак), используя инструкции SAL и SAR. Наконец, мы представляем инструкции ROL и ROR, используемые для вращения битов.
7.7 Практические битовые игрыМы изучаем некоторые базовые методы манипулирования битами: извлечение одного определенного бита из числа, подсчет количества единиц в двоичном числе, вычисление степеней двойки по модулю с использованием битовых операций и, наконец, сжатие нескольких небольших чисел в один и тот же контейнер.
8.1 Введение в память (часть 1)
Раздел 9 - ПотокиСначала мы обсудим причины, по которым нам нужно больше данных в наших программах. Затем мы описываем базовую модель памяти компьютера и обсуждаем устройства памяти, которые находятся вне процессора.
8.2 Введение в память (часть 2)Мы обсуждаем механизмы абстракции памяти, поддерживаемые процессором x86. Мы упоминаем сегментацию и разбиение на страницы и показываем несколько иллюстраций механизма разбиения на страницы.
8.3 Примеры памяти - обратное (Часть 1)Мы представляем программу reverse.asm, которая использует память (RAM) для переворота списка чисел. Запускаем программу и анализируем исходный код.
8.4 Примеры запоминания - обратная сторона (часть 2)Анализируем внутреннюю структуру выходного исполняемого файла reverse.asm с помощью шестнадцатеричного редактора.
Затем мы продолжаем с reverse_constant.asm, который улучшает reverse.asm с помощью константы.
8.5 Примеры памяти - get_addrЗатем мы продолжаем с reverse_constant.asm, который улучшает reverse.asm с помощью константы.
Мы представляем программу get_addr.asm, которая демонстрирует значение меток и возможный синтаксис при использовании меток.
8.6 Примеры памяти - поврежденыПрограмма коррумпированный.asm демонстрирует, что происходит, когда мы пытаемся получить доступ к памяти, которой мы не владеем. fix_corrupt.asm демонстрирует, как исправить коррумпированный.asm, и, наконец, fix_corrupt_small.asm использует раздел bss, чтобы получить гораздо более эффективное решение.
8.7 Определение данныхМы обсуждаем различные способы определения данных и проверяем вывод каждого определения данных. Мы узнаем о байтах, словах, двойных словах, массивах и немного более сложных определениях данных.
8.8 Разделы данныхМы вводим разделы PE и показываем пример программы, которая содержит разные разделы: текст, данные, bss и idata. Наконец, мы проверяем полученный исполняемый файл с помощью шестнадцатеричного редактора.
8.9 Основные инструкции памятиМы покажем, как получить доступ к памяти с помощью инструкций по сборке. В этой лекции мы изучаем, как правильно подсчитывать адреса, как хранить двойное слово в памяти (Endianity), расширенную адресацию с использованием синтаксиса скобок и некоторые ограничения при доступе к памяти в архитектуре x86.
8.10 thПредставляем инструкцию LEA. Мы обсудим синтаксис этой инструкции, а затем покажем несколько примеров использования инструкции LEA.
8.11 Структуры (Часть 1)Мы объясняем необходимость способа организации наших данных и предлагаем синтаксис структуры в качестве решения. Затем мы обсудим различные способы определения и объявления структур.
8.12 Структуры (Часть 2)Мы показываем различные примеры использования структур, а затем обсуждаем возможность вложенных структур.
8.13 Структуры (Часть 3)Мы обсуждаем объединения, и мы рассматриваем пример использования объединений (пример объединения IPV4).
8.14 Идеи памяти (часть 1)Мы рассмотрим несколько примеров конструкций памяти: массив структур и двумерная таблица. Мы уделяем особое внимание методам хранения этих конструкций в линейной памяти нашей программы.
8.15 Идеи памяти (часть 2)Мы показываем пример сохранения таблицы умножения в двумерный массив. Затем мы обсуждаем возможность хранения массивов более высокой размерности в памяти программы.
8.16 Идеи памяти (часть 3)Мы обсуждаем конструкцию памяти двоичного дерева и показываем пример представления двоичного дерева в памяти.
8.17 Правила обращенияМы опишем несколько практических правил относительно адресной арифметики. Эти правила помогают различать адреса и смещения.
9.2 ASCII
Раздел 10 - Подпрограммы и стекМы вводим стандарт ASCII для кодирования текста в виде чисел внутри компьютера. Мы также упоминаем стандарт Unicode.
9.2 Карта персонажейМы представляем программу Windows Character Map, которая представляет собой инструмент для просмотра различных символов и соответствующих им кодов ASCII или Unicode.
9.3 Строковое представлениеВ этом видео мы объясняем, как представлять текстовые строки в наших собственных программах сборки. Мы также представляем две школы строк: префикс длины и строки с завершающим нулем.
9.4 Пример UTF8Мы показываем пример использования символов Unicode в программе сборки Fasm. В этом примере мы хотим сохранить в памяти два китайских символа. В конце концов мы собираем программу и просматриваем выходной файл в шестнадцатеричном редакторе.
9.5 Инструкции на первой струне (часть 1)Мы представляем инструкцию STOS и показываем простой пример использования этой инструкции. Затем мы обсуждаем флаг направления и его значение.
9.6 Инструкции на первой струне (часть 2)Мы представляем инструкции LODS, MOVS и показываем простые примеры использования обеих этих инструкций.
9.7 Префиксы REP (Часть 1)Мы вводим префикс REP и используем его вместе с STOSB для очистки массива. Далее мы представляем инструкцию SCAS. Наконец, мы вводим префикс REPNZ и используем его вместе с инструкцией SCAS для поиска нулевого терминатора строки.
9.8 Префиксы REP (Часть 2)Обсуждаем префиксы REPZ и REPNZ. Затем мы представляем инструкцию CMPS и показываем пример использования CMPS с префиксом REPZ для проверки равенства двух буферов памяти.
10.1 Подпрограммы Введение
Раздел 11 - РуководстваПодпрограммы - это независимые части кода. Мы объясняем необходимость подпрограмм, а затем попытаемся создать наши собственные подпрограммы, используя простую инструкцию JMP. Эта первая попытка не так успешна, но она подготавливает нас к более продвинутой идее реализации подпрограмм, которую мы увидим в следующих уроках.
10.2 СтекИзучаем структуру данных Stack. Затем изучаем реализацию стека x86 и инструкции (PUSH и POP). В конце концов мы видим несколько простых примеров использования стека.
10.3 Звонок и возвращение (часть 1)Мы показываем пример использования команд CALL и RET для реализации подпрограммы. Затем подробно изучаем ЗВОНОК и RET.
10.4 Звонок и возвращение (часть 2)Мы видим несколько примеров использования инструкций CALL и RET. Затем мы объясняем значение стека в отношении вызовов функций.
10.5 Соглашения о вызовах (часть 1)Мы исследуем различные методы взаимодействия с подпрограммами: регистры, глобальные данные и стек.
10.6 Соглашения о вызовах (часть 2)Мы обсуждаем идею соглашений о вызовах. Затем мы представляем соглашения о вызовах CDECL и STDCALL и сравниваем их.
10.7 Местное государство (Часть 1)Мы представляем регистр EBP и объясняем, как использовать его для хранения кадра стека в наших функциях. Затем мы обсудим локальные переменные и то, как использовать стек для хранения локальных переменных для текущей функции.
10.8 Местное государство (Часть 2)Мы представляем идею стека вызовов, а затем изучаем инструкции ENTER и LEAVE, которые являются ярлыками для создания и уничтожения кадра стека функции.
11.1 Скачивание руководств
Раздел 12 - ОтладкаМы покажем, как получить руководства по набору инструкций Intel и AMD.
11.2 Руководство Intel (часть 1)Мы смотрим на руководство Intel Instruction Set и объясняем, как его использовать.
11.3 Руководство Intel (часть 2)Мы узнаем, как читать информацию о конкретных инструкциях в руководстве Intel Instruction Set. В частности, мы изучаем инструкцию ADD и инструкцию ADC.
11.4 AMD РуководствоМы ознакомимся с руководствами AMD Instruction Set и узнаем, как их использовать. Затем мы взглянем на инструкцию ADD, как описано в руководстве AMD Instruction Set.
11.5 Последние комментарииНекоторые комментарии относительно различий в руководствах Intel и AMD. Также несколько комментариев о важности уметь читать руководства, и о важности время от времени проверять руководства.
12.1 Первый пример
Раздел 13 - базовый Windows APIМы показываем простой пример отладки программы сборки. Мы используем WinDbg для отладки программы mem_count.asm. Мы очень кратко увидим, как использовать точки останова, пошагово выполнять код и читать память программы. Все эти шаги будут подробно объяснены в следующих уроках. Это просто демонстрация того, что возможно с помощью отладчика.
12.2 Введение в отладчикМы объясняем в общем, что такое отладчик. В этом уроке мы отвечаем на вопросы: что такое отладчик? Зачем нужен отладчик? Мы также описываем несколько механизмов, используемых современными отладчиками.
12.3 WinDbg IntroМы представляем отладчик WinDbg. Мы кратко обсуждаем возможности отладчика WinDbg, объясняем интерфейс отладчика и упоминаем о существовании меню справки WinDbg.
12.4 Установка WinDbgВ этом уроке мы загружаем и устанавливаем WinDbg. Это делается путем установки пакета SDK для Windows 8.1 и выбора только инструментов отладки.
12.5 Примеры - базовое управлениеМы демонстрируем базовое управление с помощью WinDbg: загрузка исполняемых файлов, использование окна дизассемблирования, перезапуск программы, присоединение к программе, использование команды g, пошаговое выполнение, использование команды bp $ exentry.
12.6 Примеры - Состояние - Основы (Часть 1)Мы просматриваем программу Increaser.asm и проверяем ее исходный код. Мы открываем эту программу с помощью WinDbg и демонстрируем основные команды для обработки состояния целевой программы во время ее приостановки. Мы начинаем с команды r, используемой для проверки или изменения содержимого регистров.
12.7 Примеры - Состояние - Основы (Часть 2)Мы показываем больше команд для обработки состояния целевой программы, пока она приостановлена. Мы представляем команды db, dw, dd для чтения данных программы. Мы также представляем окно памяти и команду lm для отображения карты памяти программы. Затем мы обсудим команду u, которая распаковывает данные из памяти программы.
12.8 Примеры - Состояние - Основы (Часть 3)Мы демонстрируем, как изменить значение регистра с помощью команды r и как записать несколько инструкций в память с помощью команды a (Assemble). Мы представляем команды eb, ew, ed, которые позволяют изменять память программы.
12.9 Примеры - Состояние - Вопросительный знакМы представляем команду Evaluate Expression, также известную как команда вопросительного знака («?»). Мы покажем несколько примеров использования этой команды для вычисления нескольких простых выражений, а затем перейдем к нескольким более сложным выражениям. Мы также упоминаем оператор poi для обращения к памяти с помощью команды Question Mark.
12.10 Примеры - Состояние - ПоискМы представляем команду s, используемую для поиска данных в памяти программы. Мы используем эту команду как альтернативный способ найти точку входа в нашу программу.
12.11 Примеры - Состояние - СтекМы демонстрируем, как проверить содержимое стека программы с помощью команды «dd esp» в случае, когда функции в программах не имеют фреймов стека на основе EBP. В случае фреймов стека на основе EBP мы покажем, как использовать команду k для красивой печати содержимого стека вызовов. Наконец, мы смотрим на связанный список EBP в кадре стека, используя команду «Знак вопроса».
12.12 Примеры - Программные точки останова (Часть 1)Мы представляем программу specials.asm и проверяем ее исходный код. Далее собираем и запускаем. Наконец, мы открываем его с помощью WinDbg. В этом примере мы покажем, как использовать программные точки останова с WinDbg. Сначала мы объясним команду bp и символ $ exentry. Мы представляем команды: bl (Список всех точек останова), be (Включить точку останова), bd (Отключить точку останова), bc (Очистить точку останова).
12.13 Примеры - Программные точки останова (Часть 2)Мы используем наши знания о программных точках останова, чтобы получить внутреннюю информацию о запуске specials.asm: мы находим все «специальные» числа.
12. 14 Примеры - Аппаратные точки останова (Часть 1)Мы вводим аппаратные точки останова. Мы представляем команду ba с различными атрибутами r, w, e. Мы рассмотрим пример, в котором аппаратная точка останова используется для достижения чего-то, чего очень трудно достичь с помощью программных точек останова.
12.15 Примеры - Аппаратные точки останова (Часть 2)Мы рассмотрим простую программу, которая выводит строку на консоль. Затем мы используем аппаратные точки останова, чтобы найти фрагмент кода, который имеет дело с чтением этой строки.
12.16 Примеры - исключенияМы показываем, как различные исключения: деление по нулю, нарушение прав доступа и INT3 отображаются в WinDbg. Мы также представляем команду анализировать -v, которая показывает дополнительную информацию о последнем возникшем исключении.
13.1 API Введение
Раздел 14 - РазноеМы описываем отношения между операционной системой и запущенными в системе программами. Далее мы описываем функции API как канал связи между программой и операционной системой. Наконец, мы упоминаем несколько распространенных DLL API и веб-сайт msdn.
13.2 Примеры - ExitProcessМы представляем функцию ExitProcess API. Мы покажем пример программы, которая содержит эту функцию, а также ознакомимся с документацией по этой функции в MSDN.
13.3 Примеры - console_echo (Часть 1)Посмотрим на программу console_echo.asm. Анализируем исходный код этой программы. Мы также собираем и запускаем эту программу и проверяем ее вывод для различных типов входных данных. Эта программа содержит вызовы функций API GetStdHandle, ReadFile и WriteFile.
13.4 Примеры - console_echo (Часть 2)Изучаем функции API GetStdHandle, ReadFile и WriteFile из программы console_echo.asm. Мы используем MSDN, чтобы лучше понять, как работают эти функции , а также проверяем их работу с помощью отладчика.
13.5 Примеры - CreateFileМы рассмотрим create_file.asm, программу, которая демонстрирует создание файла в файловой системе и запись в этот файл. Примечательные функции API в этом примере: CreateFileA, WriteFile, CloseHandle.
13.6 Примеры - Информация о строкеПосмотрим на программу string_info.asm. Эта программа использует вспомогательные функции strlen и printf из библиотеки msvcrt для вычисления длины строки и для вывода отформатированной строки на консоль.
13.7 Примеры - Next NumНаблюдаем next_num.asm. Эта программа считывает строку с консоли, преобразует ее в число с помощью вспомогательной функции strtoul, увеличивает ее на единицу и выводит обратно на консоль с помощью функции printf. Функции printf и strtoul - это вспомогательные функции из библиотеки msvcrt.
13.8 Примеры - Next Num ShortМы используем макросы invoke и cinvoke fasm для более короткой формулировки вызовов функций в next_num.asm. Программа next_num_short.asm эквивалентна next_num.asm. Просто у него более короткий синтаксис.
13.9 Примеры - ДатаПрограмма date.asm использует функцию API GetSystemTime из kernel32.dll, чтобы получить текущее системное время и распечатать его для пользователя в удобной форме.
13.10 Примеры - бананыbananas.asm - это наш первый пример программы с графическим интерфейсом пользователя. Он демонстрирует использование функции API MessageBox из user32.dll.
13.11 Примеры - Bananas ShortМы используем макросы invoke и cinvoke fasm для более короткой формулировки bananas.asm. В результате мы получаем bananas_short.asm, в котором меньше строк кода. В bananas_short.asm вызовы функций выполняются в одной строке с использованием макросов fasm invoke и cinvoke.
14.1 Разное
Заключение и последние слова о курсе.
14.2 - Следующие шагиЯзык курса: Английский
Перевод текста: translate.google
Стоимость курса: 44,99 EUR
https://www.udemy.com/course/x86-asm-foundations/