Reverse Engineering для начинающих (Понимание языка ассемблера) [Денис Юричев] (pdf) читать постранично, страница - 3

Книга в формате pdf! Изображения и текст могут не отображаться!


 [Настройки текста]  [Cбросить фильтры]

. . . . . . . . . . . .
1.22.1 Простой пример . . . . . . . . . . . . . . . . . . . . . . . . . .
1.22.2 Функция копирования блоков памяти . . . . . . . . . . .
1.22.3 Проверка условия . . . . . . . . . . . . . . . . . . . . . . . .
1.22.4 Вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.22.5 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.23 Еще кое-что о строках . . . . . . . . . . . . . . . . . . . . . . . . . .
1.23.1 strlen() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.24 Замена одних арифметических инструкций на другие . . .
1.24.1 Умножение . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.24.2 Деление . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.24.3 Упражнение . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.25 Работа с FPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.25.1 IEEE 754 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.25.2 x86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.25.3 ARM, MIPS, x86/x64 SIMD . . . . . . . . . . . . . . . . . . . .
1.25.4 Си/Си++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.25.5 Простой пример . . . . . . . . . . . . . . . . . . . . . . . . . .
1.25.6 Передача чисел с плавающей запятой в аргументах
1.25.7 Пример со сравнением . . . . . . . . . . . . . . . . . . . . .
1.25.8 Некоторые константы . . . . . . . . . . . . . . . . . . . . .
1.25.9 Копирование . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.25.10 Стек, калькуляторы и обратная польская запись . .
1.25.11 80 бит? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.25.12 x64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.25.13 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.26 Массивы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.26.1 Простой пример . . . . . . . . . . . . . . . . . . . . . . . . . .
1.26.2 Переполнение буфера . . . . . . . . . . . . . . . . . . . . .
1.26.3 Защита от переполнения буфера . . . . . . . . . . . . . .
1.26.4 Еще немного о массивах . . . . . . . . . . . . . . . . . . . .
1.26.5 Массив указателей на строки . . . . . . . . . . . . . . . .
1.26.6 Многомерные массивы . . . . . . . . . . . . . . . . . . . . .
1.26.7 Набор строк как двухмерный массив . . . . . . . . . . .
1.26.8 Вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.26.9 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.27 Пример: ошибка в Angband . . . . . . . . . . . . . . . . . . . . . .
1.28 Работа с отдельными битами . . . . . . . . . . . . . . . . . . . . .
1.28.1 Проверка какого-либо бита . . . . . . . . . . . . . . . . . .
1.28.2 Установка и сброс отдельного бита . . . . . . . . . . . .
1.28.3 Сдвиги . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.28.4 Установка и сброс отдельного бита: пример с FPU1 .
1.28.5 Подсчет выставленных бит . . . . . . . . . . . . . . . . . .
1.28.6 Вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.28.7 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 Floating-Point

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

Unit

Если вы заметили опечатку, ошибку или имеете какие-то либо соображения,
пожелания, пожалуйста, напишите мне: . Спасибо!

v
237
240
240
240
254
257
258
261
261
261
275
275
281
282
283
283
283
283
283
284
295
298
337
337
337
337
338
338
338
338
347
355
361
361
371
381
386
386
386
389
390
395
405
405
411
429
432

1.29 Линейный конгруэнтный генератор . . . . . . . . . . . . . . . .
1.29.1 x86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.29.2 x64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.29.3 32-bit ARM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.29.4 MIPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.29.5 Версия этого примера для многопоточной среды . . .
1.30 Структуры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.30.1 MSVC: Пример SYSTEMTIME . . . . . . . . . . . . . . . . . .
1.30.2 Выделяем место для структуры через malloc() . . . . .
1.30.3 UNIX: struct tm . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.30.4 Упаковка полей в структуре . . . . . . . . . . . . . . . . .
1.30.5 Вложенные структуры . . . . . . . . . . . . . . . . . . . . .
1.30.6 Работа с битовыми полями в структуре . . . . . . . . .
1.30.7 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.31 Классическая ошибка с struct . . . . . . . . . . . . . . . . . . . . .
1.32 Объединения (union) . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.32.1 Пример генератора случайных чисел . . . . . . . . . . .
1.32.2 Вычисление машинного эпсилона . . . . . . . . . . . . .
1.32.3 Замена инструкции FSCALE . . . . . . . . . . . . . . . . . .
1.32.4 Быстрое вычисление квадратного корня . . . . . . . . .
1.33 Указатели на функции . . . . . . . . . . . . . . . . . . . . . . . . .
1.33.1 MSVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.33.2 GCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.33.3 Опасность указателей на ф-ции . . . . . . . . . . . . . . .
1.34 64-битные значения в 32-битной среде . . . . . . . . . . . . . .
1.34.1 Возврат 64-битного значения . . . . . . . . . . . . . . . .
1.34.2 Передача аргументов, сложение, вычитание . . . . . .
1.34.3 Умножение, деление . . . . . . . . . . . . . . . . . . . . . .
1.34.4 Сдвиг вправо . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.34.5 Конвертирование 32-битного значения в 64-битное .
1.35 Случай со структурой LARGE_INTEGER . . . . . . . . . . . . . . .
1.36 SIMD . . . . . .