Аблязов Р.З. — Программирование на ассемблере на платформе х86-64 под FASM — 2011
Недавно в сети наткнулся на
Автор Руслан Аблязов, формат 170×240 мм, 304 страницы, год выпуска 2012 ISBN: 978-5-94074-802-1
В данной книге речь идет о работе процессора в двух его основных режимах: защищенном режиме и 64-битном, который также называют long mode («длинный режим»). Также помимо изложения принципов и механизмов работы процессора в защищенном и 64-битном режимах, речь пойдет о программировании на ассемблере в операционных системах семейства Windows, как в 32-битных, так и 64-битных версиях. Рассматривается не только разработка обычных приложении для операционных систем Windows, по и разработка драйверов на ассемблере. При написании книги уделялось большое внимание именно практической составляющей, то есть изложение материала идет только по делу и только то, что необходимо знать любому системному и низкоуровневому программисту. Последний раздел книги посвящен принципам работы многопроцессорных систем, а также работе с расширенным программируемым контроллером прерываний (APIC).
На диске, прилагаемом к книге, находятся полные исходные коды примеров к книге, а также дополнительные программы и материалы.
Издание предназначено для системных и низкоуровневых программистов, а также для студентов и преподавателей технических специальностей высших и средне-специальных учебных заведений.
Кто-нибудь читал? Чем-то отличается от «Программирование на ассемблере на платформе x86-64«?
Автор: Аблязов Р.З. год выпуска 2011, формат: 165х235 мм, 304 страницы, ISBN: 978-5-97060-364-2
В данной книге речь идёт о работе процессора в двух его основных режимах: защищённом режиме и 64-битном, который также называют long mode («длинный режим»). Также помимо изложения принципов и механизмов работы процессора в защищённом и 64-битном режимах, речь пойдёт о программировании на ассемблере в операционных системах семейства Windows, как в 32-битных, так и 64-битных версиях. Рассматривается не только разработка обычных приложений для операционных систем Windows, но и разработка драйверов на ассемблере.
(Диск прилагается только к печатному изданию.)
Программирование на ассемблере
PDF (RU) pdf (ru)
key Vi49nY44pdNk7Snq453-FRM8AYYAN1jd7uHgtDyZt5Y
Содержание
Используемый компилятор 9
Глава 1. Основы 11
1.1. Основные понятия 11
1.1.1. Что такое процессор 11
1.1.2. Небольшая предыстория 14
1.1.3. Процессоры х86-64 16
1.1. 4. Регистры процессоров х86-64 18
1.1.5. Память 19
1.1.6. Работа с внешними устройствами 21
1.1.7. Резюме 21
1.2. Основы ассемблера 22
1.2.1. Немного о языке ассемблера 22
1.2.2. Регистр флагов 23
1.2.3. Команда MOV 24
1.2.4. Формат хранения данных в памяти 26
1.2.5. Команды SUB и ADD 27
1.2.6. Логические операции 27
1.2.7. Сдвиги 28
1.2.8. Работа с флагами процессора 30
1.2.9. Работа со стеком 30
1.2.10. Резюме 30
1.3. Метки, данные, переходы 31
1.3.1. Данные 31
1.3.2. Метки 32
1.3.3. Переходы 35
1.3.4. Безымянные метки 38
1.3.5. Работа с битами 39
1.3.6. Резюме 39
1.4. Изучаем ассемблер подробнее 39
1.4.1. Работа с памятью и стеком 40
1.4.2. Работа с числами на ассемблере 41
1.4.3. Умножение и деление 44
1.4.4. Порты ввода-вывода 46
1.4.5. Циклы 46
1.4.6. Обработка блоков данных 47
1.4.7. Макросы 50
1.4.8. Структуры 52
1.4.9. Работа с MSR-регистрами 53
1.4.10. Команда CPUID 54
1.4.11. Команда UD 2 55
1.4.12. Включение файлов 55
1.4.13. Резюме 55
Глава 2 . Защищённый режим 56
2.1. Введение в защищённый режим 56
2.1.1. Уровни привилегий 56
2.1.2. Сегменты в защищённом режиме 58
2.1.3. Глобальная дескрипторная таблица 61
2.1.4. Практика 63
2.1.5. Резюме 70
2.2. Прерывания в защищённом режиме 71
2.2.2. Дескрипторы шлюзов 72
2.2.3. Исключения 74
2.2.4. Коды ошибок 76
2.2.5. Программные прерывания 77
2.2.6. Аппаратные прерывания 77
2.2.7. Обработчик прерывания 79
2.2.8. Практика 80
2.2.9. Резюме 85
2.3. Механизм трансляции адресов 85
2.3.1. Что это такое 85
2.3.2. Обычный режим трансляции адресов 87
2.3.3. Режим расширенной физической трансляции адресов 91
2.3.4. Обработчик страничного нарушения 94
2.3.5. Флаг WP в регистре CR0 95
2.3.6. Практика 96
2.3.7. Резюме 102
2.4. Многозадачность 102
2.4.1. Общие сведения 102
2. 4.2. Сегмент задачи (TSS 103
2.4.3. Дескриптор TSS 105
2.4.4. Локальная дескрипторная таблица 105
2.4.5. Регистр задачи (TR 106
2.4.6. Управление задачами 106
2.4.7. Шлюз задачи 109
2.4.8. Уровень привилегий ввода-вывода 109
2.4.9. Карта разрешения ввода-вывода 110
2.4.10. Включение многозадачности 110
2.4.11. Практическая реализация 111
2.4.12. Резюме 118
2.5. Механизмы защиты 119
2.5.1. Поля и флаги, используемые для защиты на уровне сегментов и страниц 119
2.5.2. Проверка лимитов сегментов 120
2.5.3. Проверки типов 120
2.5.4. Уровни привилегий 122
2.5.5. Проверка уровня привилегий при доступе к сегментам данных 123
2.5.6. Проверка уровней привилегий при межсегментной передаче управления 124
2.5.7. Шлюзы вызова 125
2.5.8. Переключение стека 128
2.5.9. Использование инструкций SYSENTER и SYSEXIT 129
2.5.10. Практика 130
2.5.11. Резюме 133
Глава 3 . ПРОГРАММИРОВАНИЕ В WIN 32 134
3. 1. Введение в Win32 134
3.1.1. Основные сведения 135
3.1.2. Память в Win32 135
3.1.3. Исполняемые компоненты Windows 136
3.1.4. Системные библиотеки и подсистемы 137
3.1.5. Модель вызова функций в Win32 138
3.1.6. Выполнение программ в Win32: общая картина 138
3.1.7. Практика 139
3.1.8. Резюме 147
3.2. Программирование в третьем кольце 148
3.2.1. Общий обзор 148
3.2.2. Работа с объектами 149
3.2.3. Работа с файлами 149
3.2.4. Обработка ошибок API-функций 152
3.2.5. Консольные программы 152
3.2.6. GUI-программы 153
3.2.7. Динамически подключаемые библиотеки 156
3.2.8. Обработка исключений в программе 159
3.2.9. Практика 162
3.2.10. Резюме 171
3.3. Программирование в нулевом кольце 171
3.3.1. Службы 172
3.3.2. Общий обзор 173
3.3.3. Driver Development Kit (DDK 174
3.3.4. Контекст потока и уровни запросов прерываний 175
3.3.5. Пример простого драйвера 176
3.3.6. Строки в ядре Windows 179
3. 3.7. Подсистема ввода-вывода 180
3.3.8. Практика 186
3.3.9. Резюме 201
Глава 4. LONG MODE 202
4.1. Введение в long mode 202
4.1.1. Общий обзор 202
4.1.2. Сегментация в long mode 204
4.1.3. Механизм трансляции страниц 205
4.1.4. Переход в long mode 205
4.1.5. Практика 206
4.1.6. Резюме 208
4.2. Работа с памятью в long m od e 208
4.2.1. Общий обзор 209
4.2.2. Страницы размером 4 Кб 209
4.2.3. Страницы размером 2 Мб 211
4.2.4. Страницы размером 1 Гб 212
4.2.5. Регистр CR3 213
4.2.6. Проверки защиты 214
4.2.7. Практика 214
4.2.8. Резюме 221
4.3. Прерывания в long m ode 221
4.3.1. Дескрипторы шлюзов 221
4.3.2. Таблица ЮТ 64-битный TSS и механизм 1ST 222
4.3.3. Вызов обработчика прерывания 223
4.3.4. Практика 224
4.3.5. Резюме 230
4.4. Защита и многозадачность 230
4.4.1. Сегменты 231
4.4.2. Шлюзы вызова 231
4.4.3. Инструкции SYSCALL и SYS RET 232
4.4.4. Многозадачность 233
4. 4.5. Практика 235
4.4.6. Резюме 238
Глава 5 . ПРОГРАММИРОВАНИЕ В WIN 64 239
5.1. Введение в Win64 239
5.1.1. Преимущества и недостатки 239
5.1.2. Память в Win64 240
5.1.3. Модель вызова 240
5.1.4. Режим совместимости 242
5.1.5. Win64 API и системные библиотеки 242
5.1.6. Практика 243
5.1.7. Резюме 244
5.2. Программирование в Win64 244
5.2.1. Изменения в типах данных 245
5.2.2. Выравнивание стека 245
5.2.3. GUI-приложения 246
5.2.4. Программирование драйверов 250
5.2.5. Отладка приложений в Win64 254
5.2.6. Резюме 254
Глава 6 . МНОГОПРОЦЕССОРНЫЕ СИСТЕМЫ 255
6.1. Работа с APIC 255
6.1.1. Общий обзор 255
6.1.2. Включение APIC 256
6.1.3. Local APIC ID 257
6.1.4. Локальная векторная таблица 257
6.1.5. Local APIC Timer 259
6.1.6. Обработка прерываний 261
6.1.7. Работа с I/O APIC 263
6.1.8. Практика 266
6.1.9. Резюме 270
6.2. Межпроцессорное взаимодействие 270
6. 2.1. Общий обзор 270
6.2.2. Межпроцессорные прерывания 271
6.2.3. Синхронизация доступа к данным 273
6.2.4. Инициализация многопроцессорной системы 275
6.2.5. Практика 276
6.2.6. Резюме 280
Приложение А. MSR-регистры 281
А. 1. Регистр IA32_EFER 281
А.2. Регистры, используемые командами SYSENTER/SYSEXIT 281
А.З. Регистры, используемые командами SYSCALL/SYSRET 282
А.4. Регистры APIC 282
А.5. Регистры для управления сегментами в long mode 283
А.6. Вспомогательные регистры 283
Приложение Б. Системные регистры 283
Б.1. Регистр CR0 283
Б.2. Регистры CR2 и CR3 285
Б.З. Регистр CR4 286
Б.4. Регистры GDTR и IDTR 287
Б.5. Регистры LDTR и TR 288
Б.6. Регистр флагов 288
Б.7. Регистр CR8 290
Приложение В. Системные команды 290
В.1. Работа с системными регистрами 290
В.2. Системные команды 293
В.З. Работа с кэшем процессора 295
В.4. Дополнительные команды 295
Алфавитный указатель 297
- Вид товара:Книги
- Рубрика:Средства программирования
-практич.изд.,практич.рук-во
- ISBN:978-5-97060-364-2
- Серия:Несерийное издание
- Издательство: ДМК ПРЕСС
- Год издания:2016
- Количество страниц:300
- Тираж:100
- Формат:70х100/16
- УДК:004.
438 - Штрихкод:9785970603642
- Переплет:обл.
- Сведения об ответственности:Руслан Аблязов
- Код товара:862587
Программирование на ассемблере на платформе x86-64 — Руслан Аблязов | ProgBook
Загрузка…Навазние: Программирование на ассемблере на платформе x86-64
Автор: Руслан Аблязов
Издательство: ДМК Пресс
Год: 2011
ISBN: 978-5-94074-676-8
PDF: 14 Мб (с исходным кодом)
Данное пособие должен прочитать каждый пользователь и программист, ведь оно содержит в себе важную информацию о создании программ и приложений на ассемблере. Мы узнаем, как нужно работать на известном, защищенном режиме. Здесь будут показаны все его функции и будут приведены практические примеры. Также мы сможем увидеть, как нужно создавать программы на 64-битном режиме. Также этот режим будет иметь название long mode, что означает «длинный режим». Помимо этих названий, вы также встретите тут еще множество терминов, которые пригодятся в работе и в создании приложений. Большую часть книги автор посвящает практике и практическим примерам, которые наглядно показывают весь процесс работы программиста. Книга подойдет по уровню и новичку, и профессионалу, ведь здесь разбирается такая тема, которая нужна абсолютно каждому, кто думает развиваться в сфере программирования
Книга «Программирование на ассемблере на платформе x86-64» имеет в комплекте диск, на котором также можно найти много полезной информации для работы и для обучения. Когда вы дойдете до последних разделов, вы сможете узнать интересную тему про APIC, которая очень пригодится в создании новых проектов для профессионалов.
19,358 просмотров всего, 3 просмотров сегодня
|
|
Assembler
|
|
ресурсов по оптимизации программного обеспечения. C ++ и сборка. Windows, Linux, BSD, Mac OS X
Смотрите также мой блог
Содержание
Руководства по оптимизации
Эта серия из пяти руководств описывает все, что вам нужно знать об оптимизации код для микропроцессоров семейств x86 и x86-64, включая советы по оптимизации для C ++ и ассемблер, подробности о микроархитектуре и инструкции тайминги большинства процессоров Intel, AMD и VIA, а также сведения о различных компиляторах и соглашения о вызовах.
Охватываемые операционные системы: DOS, Windows, Linux, BSD, Mac OS X на базе Intel, 32 и 64 бит.
Обратите внимание, что это руководство не для начинающих.
- 1. Оптимизация программного обеспечения на C ++: Руководство по оптимизации для платформ Windows, Linux и Mac
- Это руководство по оптимизации для продвинутых программистов на C ++.
Темы включают: Выбор платформы и операционной системы. Выбор
компилятор и фреймворк. Поиск узких мест в производительности.Эффективность различных конструкций C ++. Многоядерные системы.
Распараллеливание с векторными операциями. Диспетчеризация CPU. Эффективный
шаблоны классов контейнера. И Т. Д.
Имя файла : optimizing_cpp.pdf, размер: 1792106, последнее изменение: 31 января 2021 г.
Загрузить.
- 2. Оптимизация подпрограмм на ассемблере: Руководство по оптимизации для платформ x86
- Это руководство по оптимизации для продвинутых программистов на ассемблере.
и производители компиляторов.Темы включают: встроенные функции C ++, встроенную сборку и автономную сборку.
Связывание оптимизированных подпрограмм сборки с программами на языке высокого уровня. Обеспечение совместимости библиотек подпрограмм с несколькими компиляторами и операционными системами. Оптимизация по скорости или размеру. Доступ к памяти. Петли. Векторное программирование (XMM, YMM, SIMD). Оптимизация под CPU и диспетчеризация CPU.
Имя файла : optimizing_assembly.pdf, размер: 1507033, последнее изменение: 31 января 2021 г.
Загрузить.
- 3. Микроархитектура процессоров Intel, AMD и VIA: Руководство по оптимизации для программистов на ассемблере и разработчиков компиляторов
- Это руководство содержит подробную информацию о внутренней работе различных микропроцессоров.
от Intel, AMD и VIA. Темы включают: исполнение вне очереди, переименование реестра,
структура конвейера, организация исполнительного блока и алгоритмы прогнозирования ветвлений
для каждого типа микропроцессора. Описывает многие детали, которые невозможно найти
в руководствах от производителей микропроцессоров или где-либо еще.
Информация основанный на моих собственных исследованиях и измерениях, а не на официальных источниках. Эта информация будет полезна программистам, которые хотят делать специфичные для CPU оптимизации, а также разработчикам компиляторов и студентам, изучающим микроархитектуру.
Имя файла : microarchitecture.pdf, размер: 2304218, последнее изменение: 31 января 2021 г.
Загрузить.
- 4. Таблицы с инструкциями: Списки задержек инструкций, пропускной способности и микроопераций поломки процессоров Intel, AMD и VIA
- Содержит подробные списки задержек выполнения инструкций, пропускной способности исполнительного модуля,
разбивка на микрооперации и другие детали для всех общих инструкций по применению
большинства микропроцессоров от Intel, AMD и VIA.Предназначен как приложение к
предыдущие руководства. Доступен как файл pdf и как электронная таблица (формат ods).
Имя файла :struction_tables.pdf, размер: 16, последнее изменение: 31 января 2021 г.
Загрузить.
Имя файла :struction_tables.ods, размер: 476066, последнее изменение: 31 января 2021 г.
Загрузить.
- 5. Соглашения о вызовах для различных компиляторов C ++ и операционных систем
- Этот документ содержит подробную информацию о представлении данных,
соглашения о вызове функций, соглашения об использовании регистров, схемы изменения имен,
и Т. Д.для множества различных компиляторов C ++ и операционных систем. Обсуждает совместимость
и несовместимость между разными компиляторами C ++. Включает информацию, которая
не покрывается официальными стандартами двоичного интерфейса приложений (ABI).
Информация, представленная здесь, основана на моем собственном исследовании и поэтому
описательный, а не нормативный.
Предназначен в качестве справочного материала для программистов, которые хотят сделать функционал
библиотеки, совместимые с несколькими компиляторами или операционными системами, а также для
создателей компиляторов и других инструментов разработки, которые хотят, чтобы их инструменты были
совместим с существующими инструментами.
Имя файла : call_conventions.pdf, размер: 1070500, последнее изменение: 31 января 2021 г.
Загрузить.
- Все пять руководств
- Загрузите все вышеперечисленные руководства в один zip-файл.
Имя файла : Optimization_manuals.zip, размер: 6934750, последнее изменение: 31 января 2021 г.
Загрузить.
Это набор классов, функций и операторов C ++, который упрощает
используйте векторные инструкции (инструкции с одной инструкцией и несколькими данными) из
современные процессоры без использования языка ассемблера.Поддерживает SSE2, SSE3, SSSE3, SSE4.1,
Наборы инструкций SSE4.2, AVX, AVX2, FMA, XOP и AVX512F / BW / DQ / VL. Включает стандартные математические функции.
Может компилироваться для разных наборов инструкций из одного и того же исходного кода.
Описание и инструкция.
Доска объявлений.
Источник на Github.
Хорошее небольшое видео с инструкциями от WhatsaCreel.
Последний релиз.
Эту утилиту можно использовать для преобразования объектных файлов между COFF / PE, OMF, ELF и Форматы Mach-O для всех 32-битных и 64-битных платформ x86.Может изменять имена символов в объектных файлах. Может создавать, изменять и конвертировать библиотеки функций на разных платформах. Может сбрасывать объектные файлы и исполняемые файлы. Также включает очень хороший дизассемблер, поддерживающий SSE4, AVX, AVX2, AVX512, FMA3, FMA4, XOP. и наборы инструкций Knights Corner. Исходный код включен (GPL). Руководство.
Имя файла : objconv.zip, размер: 1055692, последнее изменение: 08 июня 2020 г.
Загрузить.
Это библиотека оптимизированных подпрограмм, написанных на языке ассемблера.Функции в
эту библиотеку можно вызывать из C, C ++ и других скомпилированных языков высокого уровня.
Поддерживает множество различных компиляторов в операционных системах Windows, Linux, BSD и Mac OS X, 32 и 64 бит.
Эта библиотека содержит более быстрые версии обычных функций памяти C / C ++ и строковых функций,
быстрые функции для поиска и синтаксического анализа строк,
быстрое целочисленное деление и целочисленное векторное деление,
а также несколько полезных функций, которых больше нигде нет.
Пакет содержит файлы библиотеки во многих различных форматах файлов, Заголовочный файл C ++ и исходный код на языке ассемблера.Применяется общая общественная лицензия GNU. Руководство.
Имя файла : asmlib.zip, размер: 883583, последнее изменение: 25 апреля 2018 г.
Загрузить.
Это предложение и обсуждение того, как можно построить идеальную архитектуру набора команд. Предлагаемый набор инструкций объединяет лучшее из принципов RISC и CISC для создания гибкий, последовательный, модульный, ортогональный, масштабируемый и расширяемый набор команд для высокопроизводительных микропроцессоров и большие векторные процессоры.
Набор команд ForwardCom имеет векторные регистры переменной длины и специальный режим адресации, который позволяет
программное обеспечение для автоматической адаптации к различным микропроцессорам с разной максимальной длиной вектора и
создавать эффективные циклы по массивам независимо от того, делится ли размер массива на длину вектора.
Стандартизация соответствующей экосистемы стандартов ABI, библиотек функций, компиляторов и т. Д.
позволяет комбинировать разные языки программирования в одной программе.
Введение: www.forwardcom.info.
Руководство: Имя файла : forwardcom.pdf, размер: 769352, последнее изменение: 03 ноября 2017 г.
Загрузить.
Тестовые программы, которые я использовал для своих исследований. Может измерять тактовые циклы и счетчики монитора производительности, такие как промахи в кэше, неверные прогнозы ветвлений, остановки ресурсов и т. д. в небольшом фрагменте код на C, C ++ или сборке. Также можно настроить счетчики монитора производительности для чтение внутри другой программы.Поддерживает Windows и Linux, 32- и 64-битный режим, несколько потоков.
Только для экспертов. Полезно для анализа небольших фрагментов кода, но не для профилирования целая программа.
Имя файла : testp.zip, размер: 1044752, последнее изменение: 31 января 2021 г.
Загрузить.
В этой статье обсуждаются проблемы с исключениями с плавающей запятой в системах, использующих
беспорядочный параллелизм и параллелизм SIMD. Рекомендуется решение, основанное на распространении NAN.
Имя файла : nan_propagation.pdf, размер: 212063, последнее изменение: 27 апреля 2020 г.
Загрузить.
Это программа, которая может изменять строку поставщика CPUID, семейство и номер модели процессоров VIA Nano. Видеть мой блог для обсуждения цели этой программы.
Имя файла : cpuidfake.zip, размер: 67593, последнее изменение: 08 августа 2010 г.
Загрузить.
Полезные ссылки по оптимизации программного обеспечения
Блог ЦП Агнера www.agner.org/forum
Инструменты и информация CPU-id www.cpuid.com
Обозреватель компилятора Godbolt. Это очень полезный онлайн-инструмент для проверки того, как разные компиляторы обрабатывают фрагмент кода.
Поддерживает библиотеку векторных классов.
www.godbolt.org
Masm Forum www.masmforum.com
Доска сообщений сообщества ASM www.asmcommunity.net/forums
Masm-страницы Hutch www.masm32.com
Likwid инструменты измерения производительности для Linux github.com / RRZE-HPC / likwid
Bit Twiddling Взломов graphics.stanford.edu/~seander/bithacks.html
Зона ассемблераProgrammer’s Heaven Небо программистов
Virtual Sandpile Информация о процессоре x86 www.sandpile.org
Интернет-книги о компьютерах www.computer-books.us/assembler.php
Списки задержки инструкций instlatx64.atw.hu/ и uops.info
Ассемблер NASM www.nasm.us/
Ассемблер FASM и доска сообщений плоский сборщик.сеть
Ассемблер JWASM www.japheth.de
Yeppp — библиотека функций ассемблера с открытым исходным кодом bitbucket.org/MDukhan/yeppp
MAQAO (Modular Assembly Quality Analyzer and Optimizer), инструмент для анализа и оптимизации двоичных кодов.
www.maqao.org
Группа новостей: comp.lang.asm.x86
Ресурсы Intel
Справочные руководства и другие документы можно найти на сайте Intel. сайт. Веб-сайт Intel обновляется так часто, что любая ссылка, которую я могу здесь предоставить к конкретным документам будет нарушено через несколько месяцев.Поэтому я буду Рекомендуем вам воспользоваться средствами поиска на сайте www.intel.com и выполните поиск «Руководства разработчика программного обеспечения» и «Справочного руководства по оптимизации».
ресурсов AMD
developer.amd.com/resources/developer-guides-manuals/
Ресурсы Microsoft
MASM инструкции Справочник по Microsoft Macro Assembler
2922853
cpplinks / assembly.x86.md на главном сервере · MattPD / cpplinks · GitHub
См. Также: Архитектура компьютера — рекомендуемый фон (который делает следующее значительно более доступным) включает курс уровня бакалавра.
Примечание. Основное внимание уделяется 64-битному варианту (x86-64), поэтому в первую очередь предпочтительны новейшие материалы (например, 64-битный, AVX).
Ассемблер релаксации http://eli.thegreenplace.net/2013/01/03/assembler-relaxation
Отображение всех argv в сборке x64
http://eli.thegreenplace.net/2013/07/24/displaying-all-argv-in-x64-assembly
Нежное введение в сборку x86-64 http://www.x86-64.org/documentation/assembly.html
Введение в сборку x64 https: // программное обеспечение.intel.com/en-us/articles/introduction-to-x64-assembly
Архитектура процессора
https://msdn.microsoft.com/en-us/library/windows/hardware/ff553442%28v=vs.85%29.aspx
x86-32 и x86-64: архитектура, инструкции, аннотированная разборка
Избыточность машинного кода x86 http://www.strchr.com/machine_code_redundancy
Макет кадра стека на x86-64 http://eli.thegreenplace.net/2011/09/06/stack-frame-layout-on-x86-64
Архитектура x86 — чудак
http: // блоги. msdn.com/b/oldnewthing/archive/2004/09/14/229387.aspx
Общие вопросы для X86 Nerds
http://www.msreverseengineering.com/blog/2015/6/9/x86-trivia-for-nerds
Обсуждения:
https://www.reddit.com/r/ReverseEngineering/ комментарии / 39gbxc / trivia_questions_for_x86_nerds /
https://twitter.com/rolfrolles/status/60878
45691904
Понимание моделей кода x64 http://eli.thegreenplace.net/2012/01/03/understanding-the-x64-code-models
Где вершина стека находится на x86
http: // eli.thegreenplace.net/2011/02/04/where-the-top-of-the-stack-is-on-x86
Windows x64 ABI
Часть 1: Введение в соглашение о вызовах Windows x64
http://www.gamasutra.com/view/news/171088/x64_ABI_Intro_to_the_Windows_x64_calling_convention.php
Часть 2: Стек фреймов
http: //www.gamasutra. ru / view / news / 178446 / Indepth_Windows_x64_ABI_Stack_frames.php
- Язык ассемблера Succinctly
- Низкоуровневое программирование
- Введение в программирование на 64-битном языке ассемблера для Linux и OS X
- Введение в организацию компьютера с языком ассемблера x86-64 и GNU / Linux
- Программирование на современном языке ассемблера X86
- Понимание языка ассемблера
- x86-64 Язык программирования ассемблера с Ubuntu
- Викиучебники
32-бит
- Программирование с нуля
- Учебное пособие по языку ассемблера для ПК
альт. lang.asm
https://groups.google.com/d/forum/alt.lang.asm
comp.lang.asm.x86 https://groups.google.com/d/forum/comp.lang.asm.x86
плоский ассемблер: Доска объявлений для пользователей плоского ассемблера. http://board.flatassembler.net/
Часто задаваемые вопросы о языке ассемблера x86 Поддержка групп новостей alt.lang.asm и comp.lang.asm.x86 http://www.fysnet.net/faq/
/ r / asm — где каждый байт на счету https://www.reddit.com/r/asm
## asm
, сеть IRC Freenode
http: // goo.gl / vZ4xwd
CS270 x86 http://cs270assembly.tumblr.com/
- Углубленное: Учебная программа низкого уровня C / C ++
Учебники по языку ассемблера NASM — asmtutor.com
http://asmtutor.com/
Начальный Intel x86: архитектура, сборка, приложения и аллитерация
http://opensecuritytraining.info/IntroX86.html
YouTube: https://www.youtube.com/playlist?list=PL038BE01D3BAEFDB0
Intel x86 среднего уровня: архитектура, сборка, приложения и аллитерация
http: // opensecuritytraining. info / IntermediateX86.html
YouTube: https://www.youtube.com/playlist?list=PL8F8D45D6C1FFD177
Введение в программное обеспечение обратного проектирования
http://opensecuritytraining.info/IntroductionToReverseEngineering.html
YouTube: https://www.youtube.com/playlist?list=PL416CEDF4A931DB0D
Обучающая сборка для linux-x64 https://github.com/0xAX/asm https://0xax.github.io/categories/assembly/
Ресурсы на языке ассемблера (x86) http://grail.cba.csuohio.edu/~somos/asmx86.html
Полезные сборочные ссылки http://www.agner.org/optimize/#links
Agner Fog: ресурсы по оптимизации программного обеспечения
http://www.agner.org/optimize/
- Оптимизация программного обеспечения на C ++: руководство по оптимизации для платформ Windows, Linux и Mac
http://www.agner.org/optimize/optimizing_cpp.pdf - Оптимизация подпрограмм на языке ассемблера: руководство по оптимизации для платформ x86
http://www.agner.org/optimize/optimizing_assembly.pdf
- Микроархитектура процессоров Intel, AMD и VIA: руководство по оптимизации для программистов на ассемблере и разработчиков компиляторов
http: // www.agner.org/optimize/microarchitecture.pdf - Таблицы инструкций: Списки задержек инструкций, пропускной способности и сбоев микроопераций для процессоров Intel, AMD и VIA
http://www.agner.org/optimize/instruction_tables.pdf - Соглашения о вызовах для различных компиляторов C ++ и операционных систем
http://www.agner.org/optimize/calling_conventions.pdf
Двоичный интерфейс приложений AMD64 (ABI)
http://www.x86-64.org/documentation.html
http: // www.x86-64.org/documentation_folder/abi.pdf
Советы по оптимизации сборки http://mark.masmcode.com/
Ассемблер x86 (FPU, MMX, SSE, SSE2, SSE3, SSSE3, SSE4, AVX, AVX2, AVX512)
http://wm.ite.pl/articles/#assembler-x86-fpu-mmx-sse-sse2- sse3-ssse3-sse4-avx-avx2-avx512-новый
Руководство Бреннана по встроенной сборке
http://www. delorie.com/djgpp/doc/brennan/brennan_att_inline_djgpp.html
Синтаксис AT & T / UNIX <-> Синтаксис Intel
Chess Programming Wiki — Оборудование: x86-64
https: // chessprogramming.wikispaces.com/x86-64
CPU: Руководства разработчика программного обеспечения для архитектур Intel® 64 и IA-32
https://www-ssl.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html
: руководства, руководства и документы ISA для разработчиков
http://developer.amd.com/resources/documentation-articles/developer-guides-manuals/
GCC-Inline-Assembly-HOWTO
http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html
Задержки команд и пропускная способность для процессоров AMD и Intel x86
https: // gmplib.org / ~ теге / x86-Timing.pdf
Встроенная сборка для x86 в Linux
http://www.ibm.com/developerworks/linux/library/l-ia/
Встроенная сборка (linux-insides)
https://0xax.gitbooks. io/linux-insides/content/Theory/asm.html
Intel Intrinsics Guide
https://software.intel.com/sites/landingpage/IntrinsicsGuide/
Сборка Linux HOWTO
http://asm.sourceforge.net/howto.html
Wiki разработки ОС
http://wiki.osdev.org/
куча.org — «Ведущий мировой источник технической информации о процессорах x86»
http://www.sandpile.org/
Переполнение стека: тег x86 вики
https://stackoverflow.com/tags/x86/info
Stack Overflow: Документация — язык ассемблера Intel x86 и микроархитектура
http://stackoverflow.com/documentation/x86/topics
Минимальный набор команд 80×86
http://www.plantation-productions.com/Webster/www.writegreatcode.com/Vol2/wgc2_OA.pdf
Приложение A к Write Great Code, том 2: https: // www.nostarch.com/greatcode2.htm
Сетевой ассемблер: NASM
Глава 11: Написание 64-битного кода (Unix, Win64)
http://www.nasm.us/xdoc/2.11.09rc1/html/nasmdo11.html
Ссылки на последние версии: http : //www. nasm.us/docs.php
Википедия: темы сборки x86
https://en.wikipedia.org/wiki/Template:X86_assembly_topics
Шпаргалка по кодированию x86
https://www.akkadia.org/drepper/x86-opcode-structure.pdf
Справочник по набору команд x86
http: // felixcloutier.com / x86 /
https://github.com/zneak/x86doc
Шпаргалка по встроенным функциям x86
Шпаргалка, содержащая большинство встроенных функций x86, таких как встроенные функции SSE и AVX, сгруппированных интуитивно.
http://www3.in.tum.de/~finis/
http://www3.in. tum.de/~finis/x86-intrin-cheatsheet-v2.2.pdf
x86, x64 Instruction Latency, Memory Latency и CPUID дампы
http://users.atw.hu/instlatx64/
x86_64 Краткое руководство по сборке NASM («Шпаргалка»)
https: // www.cs.uaf.edu/2010/fall/cs301/support/x86_64/index.html
Кодировка инструкций X86-64
http://wiki.osdev.org/X86-64_Instruction_Encoding
Код операции X86 и справочник инструкций
http://ref. x86asm.net/
Структура кода операции x86 и обзор инструкций
http://net.cs.uni-bonn.de/fileadmin/user_upload/plohmann/x86_opcode_structure_and_instruction_overview.pdf
x86 странности
http://x86.corkami.com
Слайды
Программное обеспечение
Сборщики
Сборщики — https: // en.wikipedia.org/wiki/Comparison_of_assemblers#x86_assemblers
Дизассемблеры
- Рамка разборки / разборки Capstone
- Ядро (Arm, Arm64, Mips, PPC, Sparc, SystemZ, X86, X86_64, XCore) + привязки (Python, Java, Ocaml)
- http://www.capstone-engine.org/
- https://github.com/aquynh/capstone
- disasm: интерактивный графический интерфейс дизассемблера
- проект библиотеки дизассемблера двоичного потока diStorm3
- ЭмильПРО
- Medusa: интерактивный дизассемблер с открытым исходным кодом
- Panopticon — свободный кроссплатформенный дизассемблер
- Plasma — это интерактивный дизассемблер для x86 / ARM / MIPS.
Он может генерировать псевдокод с отступом и цветным синтаксисом.
- Udis86: Библиотека дизассемблера для x86 и x86-64
- Zyan дизассемблер двигателя (Zydis)
Сеть
- asmttpd: веб-сервер для Linux, написанный на сборке amd64.
- HeavyThing x86_64 библиотека языка ассемблера и демонстрационные программы
- SERVASM: ваш другой веб-сервер
Учебники
- Обманите свой путь на ассемблере x64
- Deeper Dive: сборка x86 32/64
- Достаточно сборки x86, чтобы быть опасным
- Введение в язык ассемблера x86 — Дэви Вибирал
- Введение в сборку x86
- Введение в обратный инжиниринг и отладку с помощью Radare2
- Сборка, достаточная для обозревателя компиляторов — Андерс Шау Кнаттен
- Linux x64 сборка
- Современная сборка x64
- Практические руководства по сборке x64 и C ++
- x64 Assembly Многопоточность
- x86_64 Сборка Linux
- x86-64 Lite для авторов компиляторов
2019
- x86 инструкции перемещения регистр-регистр и краткая история самой популярной архитектуры ЦП
2018
- Аппаратные бэкдоры в процессорах x86
- Внутри ПЗУ микрокода AMD
2017
- Язык ассемблера слишком высокий
- Нарушение набора команд x86
- Кристофер Домас
- просеиватель
- Черная шляпа 2017
- DEF CON 25
- Компиляция C для печати x86 для создания исполняемой исследовательской работы
- Все, что вы хотели знать о микрокоде x86, но, возможно, боялись спросить
- POP POP RETN; Введение в написание шелл-кода Win32
- reductio [ad absurdum]
- Обратный инжиниринг микрокода процессора x86
2016
- Углубленный анализ разборки полномасштабных двоичных файлов x86 / x64
- Причины нестабильности производительности из-за размещения кода в X86
- Оптимизированный для отладки код x64
- Улучшение размера кода, генерируемого LLVM для процессоров X86
- Movfuscator Be Gone
- Программирование компилятора x64 с нуля
2015
- Repsych: Психологическая война в обратном инжиниринге
- Воронка памяти — выявление недостатка в конструкции X86, позволяющего повысить универсальные привилегии
- The M / o / Vfuscator — Превращение «mov» в душераздирающий кошмар RE
- Когда оборудование должно «просто работать» — взгляд изнутри на архитектуру процессора x86
2014
- кодирование инструкций x86 и неприятные хаки, которые мы делаем в ядре
- x86 Внутреннее устройство для развлечения и прибыли
2013
- Beyond MOV ADD XOR — необычное и неожиданное в x86
- Page Fault Liberation Army or Gained in Translation: история творческого использования виртуальной памяти x86
- Странная машина с ошибкой страницы: уроки вычислений без инструкций
2012
- Page Fault Liberation Army or Gained in Translation История творческого использования виртуальной памяти x86
2011
- Такой странный процессор — возня с кодами операций x86 (и немного с PE.
..)
index-of.es/
Название Размер Android / - Галерея искусств/ - Атаки / - Переполнение буфера / - C ++ / - CSS / - Компьютер / - Конференции / - Растрескивание / - Криптография / - Базы данных / - Глубокая сеть / - Отказ в обслуживании/ - Электронные книги / - Перечисление / - Эксплойт / - Техники неудачной атаки / - Судебная экспертиза / - Галерея / - HTML / - Взломать / - Взлом веб-сервера / - Взлом беспроводных сетей / - Взлом / - Генератор хешей / - JS / - Ява/ - Linux / - Отмыкание/ - Журналы / - Вредоносное ПО / - Метасплоит / - Разное / - Разное / - Протоколы сетевой безопасности / - Сеть / - ОПЕРАЦИОННЫЕ СИСТЕМЫ/ - Другое / - PHP / - Perl / - Программирование / - Python / - RSS / - Rdbms / - Разобрать механизм с целью понять, как это работает/ - Рубин/ - Сканирование сетей / - Безопасность/ - Захват сеанса / - Снифферы / - Социальная инженерия/ - Поддерживает / - Системный взлом / - Инструменты/ - Учебники / - UTF8 / - Unix / - Вариос-2 / - Варианты / - Ролики/ - Вирусы / - Окна / - Беспроводная связь / - Xml / - z0ro-Репозиторий-2 / - z0ro-Репозиторий-3 / -
Современное программирование на языке ассемблера X86, Даниэль Куссвурм
Изучите основы программирования на 64-битном языке ассемблера x86 и сосредоточьтесь на
обновленных аспектах набора команд x86, которые наиболее актуальны для разработки программного обеспечения приложений
. В этой книге рассматриваются такие темы, как программирование для 64-разрядных систем x86 и программирование расширенных векторных расширений
(AVX).
В этом втором издании основное внимание уделяется исключительно 64-битной базовой архитектуре программирования
и программированию AVX. Структура современного программирования на языке ассемблера X86 и пример кода
призваны помочь вам быстро понять программирование на языке ассемблера x86
и вычислительные возможности платформы x86. Прочитав
и изучив эту книгу, вы сможете кодировать повышающие производительность функции и алгоритмы, используя 64-разрядный язык ассемблера x86 и расширения набора инструкций AVX, AVX2 и AVX-512
.
Что вы узнаете
- Узнайте подробности о 64-разрядной платформе x86, включая ее основную архитектуру, типы данных, регистры
- , режимы адресации памяти и базовый набор инструкций
- Используйте x86 64 -битовый набор инструкций для создания улучшающих производительность функций, которые
- могут быть вызваны с языка высокого уровня (C ++)
- Использовать 64-битный язык ассемблера x86 для эффективного управления общими типами данных
- и конструкциями программирования, включая целые числа, текстовые строки, массивы и структуры
- Используйте набор инструкций AVX для выполнения скалярной арифметики с плавающей запятой
- Используйте наборы инструкций AVX, AVX2 и AVX-512 для значительного увеличения производительности
- алгоритмов с интенсивными вычислениями в проблемных областях, таких как
- обработка изображений, компьютерная графика, математика и статистика
- Применение различных стратегий и методов кодирования для оптимального использования наборов инструкций x86 64-бит,
- AVX, AVX2 и AVX-512 для достижения максимально возможной производительности
Для кого предназначена эта книга
Разработчики программного обеспечения кто хочет научиться писать код на 64-битном языке ассемблера x86. Он также идеально подходит для разработчиков программного обеспечения, которые уже имеют базовые представления о программировании на 32-разрядном или 64-разрядном языке ассемблера x86 и заинтересованы в том, чтобы узнать, как использовать возможности SIMD в AVX, AVX2 и AVX-512.
Современное программирование на языке ассемблера X86: охватывает 64-разрядные версии x86, AVX, AVX2 и AVX-512 от Kusswurm, Daniel
Изучите основы программирования на 64-разрядном языке ассемблера x86 и сосредоточьтесь на
обновленных аспектах x86 набор инструкций, наиболее актуальных для разработки программного обеспечения приложения
.В этой книге рассматриваются такие темы, как программирование для 64-разрядных систем x86 и программирование расширенных векторных расширений
(AVX).
В этом втором издании основное внимание уделяется исключительно 64-битной базовой архитектуре программирования
и программированию AVX. Структура современного программирования на языке ассемблера X86 и пример кода
разработаны, чтобы помочь вам быстро понять программирование на языке ассемблера x86
и вычислительные возможности платформы x86. После прочтения
, используя 64-разрядный язык ассемблера x86 и расширения набора инструкций AVX, AVX2 и AVX-512
.
Что вы узнаете
- Узнайте подробности о 64-разрядной платформе x86, включая ее основную архитектуру, типы данных, регистры
- , режимы адресации памяти и базовый набор инструкций
- Используйте x86 64 -битовый набор инструкций для создания улучшающих производительность функций, которые
- могут быть вызваны с языка высокого уровня (C ++)
- Использовать 64-битный язык ассемблера x86 для эффективного управления общими типами данных
- и конструкциями программирования, включая целые числа, текстовые строки, массивы и структуры
- Используйте набор инструкций AVX для выполнения скалярной арифметики с плавающей запятой
- Используйте наборы инструкций AVX, AVX2 и AVX-512 для значительного увеличения производительности
- алгоритмов с интенсивными вычислениями в проблемных областях, таких как
- обработка изображений, компьютерная графика, математика и статистика 9 0019
- Применение различных стратегий и методов кодирования для оптимального использования наборов инструкций x86 64-бит,
- AVX, AVX2 и AVX-512 для достижения максимально возможной производительности
Для кого предназначена эта книга
Разработчики программного обеспечения кто хочет научиться писать код на 64-битном языке ассемблера x86. Он также идеально подходит для разработчиков программного обеспечения, которые уже имеют базовые знания о программировании на 32-битном или 64-битном языке ассемблера x86 и заинтересованы в том, чтобы узнать, как использовать возможности SIMD в AVX, AVX2 и AVX-512.
Встроенная сборка — cppreference.com
Встроенная сборка (обычно вводимая ключевым словом asm) дает возможность встраивать исходный код языка ассемблера в программу C.
Unlinke в C ++, встроенная сборка рассматривается как расширение в C.Он условно поддерживается и определяется реализацией, что означает, что он может не присутствовать, и даже если он предоставляется реализацией, он не имеет фиксированного значения.
[править] Синтаксис
[править] Объяснение
Этот вид встроенного синтаксиса ассемблера принят стандартом C ++ и называется asm-декларацией в C ++. String_literal обычно представляет собой короткую программу, написанную на языке ассемблера, которая выполняется всякий раз, когда выполняется это объявление. Различные компиляторы C имеют сильно различающиеся правила для объявлений asm и разные соглашения для взаимодействия с окружающим кодом C.
Объявление asm может появляться внутри блока (тела функции или другого составного оператора), и, как и все другие объявления, это объявление также может появляться вне блока.
[править] Примечания
MSVC не поддерживает встроенную сборку на процессорах ARM и x64, а поддерживает только форму, введенную __asm на процессорах x86.
При компиляции в режиме ISO C с помощью GCC или Clang (например, с параметром -std = c11), __asm__ должен использоваться вместо asm.
[править] Примеры
Демонстрирует два вида синтаксиса встроенного ассемблера, предлагаемого компилятором GCC. Эта программа будет корректно работать только на платформе x86-64 под Linux. Обратите внимание, что «стандартная встроенная сборка» также рассматривается как расширение стандарта C.
#includeextern int func (пусто); // определение func написано на ассемблере __как м__(". globl func \ n \ t " ".type func, @function \ n \ t" "func: \ n \ t" ".cfi_startproc \ n \ t" "movl $ 7,% eax \ n \ t" "ret \ n \ t" ".cfi_endproc"); int main (пусто) { int n = func (); // расширенная встроенная сборка gcc __asm__ ("leal (% 0,% 0,4),% 0" : "= r" (n) : «0» (n)); printf ("7 * 5 =% d \ n", n); fflush (стандартный вывод); // промывка преднамеренная // стандартная встроенная сборка в C ++ __asm__ ("movq $ 60,% rax \ n \ t" // номер системного вызова выхода в Linux "movq $ 2,% rdi \ n \ t" // эта программа возвращает 2 "системный вызов"); }
Выход:
[править] Внешние ссылки
[править] Ссылки
- Стандарт
- C11 (ISO / IEC 9899: 2011):
-
- Дж.5.10 Ключевое слово asm (стр: 580)
- Стандарт
- C99 (ISO / IEC 9899: 1999):
-
- J.
5.10 Ключевое слово asm (p: 512)
- J.
- Стандарт C89 / C90 (ISO / IEC 9899: 1990):
[править] См. Также
Программирование на современном языке ассемблера X86: охватывает 64-разрядные версии X86, Avx, Avx2 и Avx-512 (в мягкой обложке)
$ 39,99
В настоящее время недоступно в магазине — обычно доступно для доставки или самовывоза через 1-5 дней
Описание
Изучите основы программирования на 64-битном языке ассемблера x86 и сконцентрируйтесь на
обновленных аспектах набора команд x86, которые наиболее актуальны для разработки программного обеспечения
.В этой книге рассматриваются такие темы, как программирование для 64-разрядных систем x86 и программирование расширенных векторных расширений
(AVX).
В этом втором издании основное внимание уделяется исключительно 64-битной базовой архитектуре программирования
и программированию AVX. Структура современного программирования на языке ассемблера X86 и пример кода
призваны помочь вам быстро понять программирование на языке ассемблера x86
и вычислительные возможности платформы x86. Прочитав
и изучив эту книгу, вы сможете кодировать повышающие производительность функции и алгоритмы, используя 64-разрядный язык ассемблера x86 и расширения набора инструкций AVX, AVX2 и AVX-512
.
Что вы узнаете
- Узнайте подробности о 64-разрядной платформе x86, включая ее основную архитектуру, типы данных, регистры
- , режимы адресации памяти и базовый набор инструкций
- Используйте x86 64 -битовый набор инструкций для создания улучшающих производительность функций, которые
- могут быть вызваны с языка высокого уровня (C ++)
- Использовать 64-битный язык ассемблера x86 для эффективного управления общими типами данных
- и конструкциями программирования, включая целые числа, текстовые строки, массивы и структуры
- Используйте набор инструкций AVX для выполнения скалярной арифметики с плавающей запятой
- Используйте наборы инструкций AVX, AVX2 и AVX-512 для значительного увеличения производительности
- алгоритмов с интенсивными вычислениями в проблемных областях, таких как
- обработка изображений, компьютерная графика, математика и статистика
- Применение различных стратегий и методов кодирования для оптимального использования наборов инструкций x86 64-бит,
- AVX, AVX2 и AVX-512 для достижения максимально возможной производительности
Для кого предназначена эта книга
Разработчики программного обеспечения кто хочет научиться писать код на 64-битном языке ассемблера x86.