Вы находитесь на странице: 1из 5

ОГЛАВЛЕНИЕ

8.7.3 Данные зашифрованы? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845


8.7.4 CryptoPP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 846
8.7.5 Режим обратной связи по шифротексту . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 848
8.7.6 Инициализирующий вектор . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 849
8.7.7 Структура буфера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 850
8.7.8 Шум в конце . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 852
8.7.9 Вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
8.7.10 Post Scriptum: перебор всех IV7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
8.8 Разгон майнера биткоинов Cointerra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853
8.9 SAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 858
8.9.1 Касательно сжимания сетевого траффика в клиенте SAP . . . . . . . . . . . . . . . . . 858
8.9.2 Функции проверки пароля в SAP 6.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 869
8.10 Oracle RDBMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873
8.10.1 Таблица V$VERSION в Oracle RDBMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873
8.10.2 Таблица X$KSMLRU в Oracle RDBMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 881
8.10.3 Таблица V$TIMER в Oracle RDBMS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 882
8.11 Вручную написанный на ассемблере код . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886
8.11.1 Тестовый файл EICAR . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 886
8.12 Демо . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887
8.12.1 10 PRINT CHR$(205.5+RND(1)); : GOTO 10 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 887
8.12.2 Множество Мандельброта . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 890
8.13 ”Прикуп” в игре ”Марьяж” . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 900
8.13.1 Упражнение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909
8.14 Другие примеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 909

9 Примеры разбора закрытых (proprietary) форматов файлов 910


9.1 Примитивное XOR-шифрование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 910
9.1.1 Norton Guide: простейшее однобайтное XOR-шифрование . . . . . . . . . . . . . . . . . 911
9.1.2 Простейшее четырехбайтное XOR-шифрование . . . . . . . . . . . . . . . . . . . . . . . . 914
9.1.3 Простое шифрование используя XOR-маску . . . . . . . . . . . . . . . . . . . . . . . . . . 918
9.1.4 Простое шифрование используя XOR-маску, второй случай . . . . . . . . . . . . . . . . 925
9.2 Информационная энтропия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 930
9.2.1 Анализирование энтропии в Mathematica . . . . . . . . . . . . . . . . . . . . . . . . . . . . 931
9.2.2 Вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940
9.2.3 Инструменты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 940
9.2.4 Кое-что о примитивном шифровании как XOR . . . . . . . . . . . . . . . . . . . . . . . . . 941
9.2.5 Еще об энтропии исполняемого кода . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941
9.2.6 ГПСЧ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941
9.2.7 Еще примеры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 941
9.2.8 Энтропия различных файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 942
9.2.9 Понижение уровня энтропии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943
9.3 Файл сохранения состояния в игре Millenium . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 943
9.4 Файл с индексами в программе fortune . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 950
9.4.1 Хакинг . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955
9.4.2 Файлы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 955
9.5 Oracle RDBMS: .SYM-файлы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 956
9.6 Oracle RDBMS: .MSB-файлы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 965
9.6.1 Вывод . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972
9.7 Упражнения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972
9.8 Дальнейшее чтение . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 972

10 Прочее 973
10.1 Модификация исполняемых файлов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973
10.1.1 Текстовые строки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973
10.1.2 x86-код . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 973
10.2 Статистика количества аргументов функций . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974
10.3 Compiler intrinsic . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974
10.4 Аномалии компиляторов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975
10.4.1 Oracle RDBMS 11.2 and Intel C++ 10.1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975
10.4.2 MSVC 6.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975
10.4.3 Итог . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976
10.5 Itanium . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 976
10.6 Модель памяти в 8086 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 978
7 Initialization Vector

xi
ОГЛАВЛЕНИЕ
10.7 Перестановка basic block-ов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979
10.7.1 Profile-guided optimization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 979
10.8 Мой опыт с Hex-Rays 2.2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 980
10.8.1 Ошибки . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 980
10.8.2 Странности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 982
10.8.3 Безмолвие . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 983
10.8.4 Запятая . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 985
10.8.5 Типы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986
10.8.6 Длинные и запутанные выражения . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986
10.8.7 Мой план . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986
10.8.8 Итог . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986

11 Что стоит почитать 987


11.1 Книги и прочие материалы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987
11.1.1 Reverse Engineering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987
11.1.2 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987
11.1.3 Си/Си++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 987
11.1.4 x86 / x86-64 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988
11.1.5 ARM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988
11.1.6 Язык ассемблера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988
11.1.7 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988
11.1.8 UNIX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 988
11.1.9 Программирование . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989
11.1.10 Криптография . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 989

12 Сообщества 990

Послесловие 992
12.1 Вопросы? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 992

Приложение 994
.1 x86 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994
.1.1 Терминология . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994
.1.2 Регистры общего пользования . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 994
.1.3 FPU регистры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 998
.1.4 SIMD регистры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1000
.1.5 Отладочные регистры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1000
.1.6 Инструкции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1001
.1.7 npad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1013
.2 ARM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1015
.2.1 Терминология . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1015
.2.2 Версии . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1015
.2.3 32-битный ARM (AArch32) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1015
.2.4 64-битный ARM (AArch64) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1016
.2.5 Инструкции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1017
.3 MIPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1017
.3.1 Регистры . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1017
.3.2 Инструкции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1018
.4 Некоторые библиотечные функции GCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1019
.5 Некоторые библиотечные функции MSVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1019
.6 Cheatsheets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1019
.6.1 IDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1019
.6.2 OllyDbg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1020
.6.3 MSVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1020
.6.4 GCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1021
.6.5 GDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .1021

Список принятых сокращений 1023


Глоссарий 1028

Предметный указатель 1030

xii
ОГЛАВЛЕНИЕ
Предисловие

У термина «reverse engineering» несколько популярных значений: 1) исследование скомпилирован-


ных программ; 2) сканирование трехмерной модели для последующего копирования; 3) восстанов-
ление структуры СУБД. Настоящий сборник заметок связан с первым значением.

Желательные знания перед началом чтения

Очень желательно базовое знание ЯП8 Си. Рекомендуемые материалы: 11.1.3 (стр. 987).

Упражнения и задачи

…все перемещены на отдельный сайт: http://challenges.re.

Об авторе

Денис Юричев — опытный reverse engineer и программист. С ним


можно контактировать по емейлу: dennis@yurichev.com.

Отзывы о книгеReverse Engineering для начинающих

• «Now that Dennis Yurichev has made this book free (libre), it is a contribution to the world of free
knowledge and free education.» Richard M. Stallman, Основатель GNU, активист в области сво-
бодного ПО.
• «It’s very well done .. and for free .. amazing.»9 Daniel Bilar, Siege Technologies, LLC.
• «... excellent and free»10 Pete Finnigan,гуру по безопасности Oracle RDBMS.
• «... [the] book is interesting, great job!» Michael Sikorski, автор книги Practical Malware Analysis:
The Hands-On Guide to Dissecting Malicious Software.
• «... my compliments for the very nice tutorial!» Herbert Bos, профессор университета Vrije
Universiteit Amsterdam, соавтор Modern Operating Systems (4th Edition).
• «... It is amazing and unbelievable.» Luis Rocha, CISSP / ISSAP, Technical Manager, Network & Information
Security at Verizon Business.
• «Thanks for the great work and your book.» Joris van de Vis, специалист по SAP Netweaver &
Security .
• «... [a] reasonable intro to some of the techniques.»11 Mike Stay, преподаватель в Federal Law
Enforcement Training Center, Georgia, US.
8 Язык Программирования
9 twitter.com/daniel_bilar/status/436578617221742593
10 twitter.com/petefinnigan/status/400551705797869568
11 reddit

xiii
ОГЛАВЛЕНИЕ
• «I love this book! I have several students reading it at the moment, [and] plan to use it in graduate
course.»12 Сергей Братусь , Research Assistant Professor в отделе Computer Science в Dartmouth
College
• «Dennis @Yurichev has published an impressive (and free!) book on reverse engineering»13 Tanel
Poder, эксперт по настройке производительности Oracle RDBMS .
• «This book is a kind of Wikipedia to beginners...» Archer, Chinese Translator, IT Security Researcher.
• «Прочел Вашу книгу — отличная работа, рекомендую на своих курсах студентам в качестве
учебного пособия». Николай Ильин, преподаватель в ФТИ НТУУ «КПИ» и DefCon-UA
• «[A] first-class reference for people wanting to learn reverse engineering. And it’s free for all.» Mikko
Hyppönen, F-Secure.

Благодарности

Тем, кто много помогал мне отвечая на массу вопросов: Андрей «herm1t» Баранович, Слава «Avid»
Казаков, SkullC0DEr.
Тем, кто присылал замечания об ошибках и неточностях: Станислав «Beaver» Бобрицкий, Алек-
сандр Лысенко, Александр «Solar Designer» Песляк, Федерико Рамондино, Марк Уилсон, Ксения Га-
линская, Разихова Мейрамгуль Кайратовна, Анатолий Прокофьев, Костя Бегунец, Валентин “netch”
Нечаев, Александр Плахов, Shell Rocket, Zhu Ruijin, Changmin Heo, Vitor Vidal, Stijn Crevits, Jean-
Gregoire Foulon14 , Ben L., Etienne Khan, Norbert Szetei15 , Marc Remy, Michael Hansen, Derk Barten, The
Renaissance16 , Hugo Chan..
Просто помогали разными способами: Андрей Зубинский, Arnaud Patard (rtp на #debian-arm IRC),
noshadow на #gcc IRC, Александр Автаев, Mohsen Mostafa Jokar.
Переводчикам на китайский язык: Antiy Labs (antiy.cn), Archer.
Переводчику на корейский язык: Byungho Min.
Переводчику на голландский язык: Cedric Sambre (AKA Midas).
Переводчикам на испанский язык: Diego Boy, Luis Alberto Espinosa Calvo, Fernando Guida, Diogo Mussi,
Patricio Galdames.
Переводчикам на португальский язык: Thales Stevan de A. Gois, Diogo Mussi.
Переводчикам на итальянский язык: Federico Ramondino17 , Paolo Stivanin18 , twyK.
Переводчикам на французский язык: Florent Besnard19 , Marc Remy20 , Baudouin Landais, Téo Dacquet21 ,
BlueSkeye@GitHub22 .
Переводчикам на немецкий язык: Dennis Siekmeier23 , Julius Angres24 , Dirk Loser25 , Clemens Tamme.
Переводчикам на польский язык: Kateryna Rozanova, Aleksander Mistewicz.
Переводчикам на японский язык: shmz@github26 .
Корректорам: Александр «Lstar» Черненький, Владимир Ботов, Андрей Бражук, Марк “Logxen” Ку-
пер, Yuan Jochen Kang, Mal Malakov, Lewis Porter, Jarle Thorsen, Hong Xie.
Васил Колев27 сделал очень много исправлений и указал на многие ошибки.
За иллюстрации и обложку: Андрей Нечаевский.
12 twitter.com/sergeybratus/status/505590326560833536
13 twitter.com/TanelPoder/status/524668104065159169
14 https://github.com/pixjuan
15 https://github.com/73696e65
16 https://github.com/TheRenaissance
17 https://github.com/pinkrab
18 https://github.com/paolostivanin
19 https://github.com/besnardf
20 https://github.com/mremy
21 https://github.com/T30rix
22 https://github.com/BlueSkeye
23 https://github.com/DSiekmeier
24 https://github.com/JAngres
25 https://github.com/PolymathMonkey
26 https://github.com/shmz
27 https://vasil.ludost.net/

xiv
ОГЛАВЛЕНИЕ
И ещё всем тем на github.com кто присылал замечания и исправления28 .
Было использовано множество пакетов LATEX. Их авторов я также хотел бы поблагодарить.

Жертвователи

Тем, кто поддерживал меня во время написания этой книги:


2 * Oleg Vygovsky (50+100 UAH), Daniel Bilar ($50), James Truscott ($4.5), Luis Rocha ($63), Joris van de
Vis ($127), Richard S Shultz ($20), Jang Minchang ($20), Shade Atlas (5 AUD), Yao Xiao ($10), Pawel Szczur
(40 CHF), Justin Simms ($20), Shawn the R0ck ($27), Ki Chan Ahn ($50), Triop AB (100 SEK), Ange Albertini
(e10+50), Sergey Lukianov (300 RUR), Ludvig Gislason (200 SEK), Gérard Labadie (e40), Sergey Volchkov
(10 AUD), Vankayala Vigneswararao ($50), Philippe Teuwen ($4), Martin Haeberli ($10), Victor Cazacov
(e5), Tobias Sturzenegger (10 CHF), Sonny Thai ($15), Bayna AlZaabi ($75), Redfive B.V. (e25), Joona
Oskari Heikkilä (e5), Marshall Bishop ($50), Nicolas Werner (e12), Jeremy Brown ($100), Alexandre Borges
($25), Vladimir Dikovski (e50), Jiarui Hong (100.00 SEK), Jim Di (500 RUR), Tan Vincent ($30), Sri Harsha
Kandrakota (10 AUD), Pillay Harish (10 SGD), Timur Valiev (230 RUR), Carlos Garcia Prado (e10), Salikov
Alexander (500 RUR), Oliver Whitehouse (30 GBP), Katy Moe ($14), Maxim Dyakonov ($3), Sebastian
Aguilera (e20), Hans-Martin Münch (e15), Jarle Thorsen (100 NOK), Vitaly Osipov ($100), Yuri Romanov
(1000 RUR), Aliaksandr Autayeu (e10), Tudor Azoitei ($40), Z0vsky (e10), Yu Dai ($10), Anonymous ($15),
Vladislav Chelnokov ($25), Nenad Noveljic ($50), Ryan Smith ($25), Andreas Schommer (e5).
Огромное спасибо каждому!

mini-ЧаВО

Q: Что необходимо знать перед чтением книги?


A: Желательно иметь базовое понимание Си/Си++.
Q: Должен ли я изучать сразу x86/x64/ARM и MIPS? Это не многовато?
A: Думаю, для начала, вы можете читать только о x86/x64, пропуская/пролистывая части о ARM/MIPS.
Q: Возможно ли купить русскую/английскую бумажную книгу?
A: К сожалению нет, пока ни один издатель не заинтересовался в издании русской или англий-
ской версии. А пока вы можете распечатать/переплести её в вашем любимом копи-шопе или копи-
центре.
Q: Существует ли версия epub/mobi?
A: Книга очень сильно завязана на специфические для TeX/LaTeX хаки, поэтому преобразование в
HTML (epub/mobi это набор HTML) легким не будет.
Q: Зачем в наше время нужно изучать язык ассемблера?
A: Если вы не разработчик ОС29 , вам наверное не нужно писать на ассемблере: современные ком-
пиляторы (2010-ые) оптимизируют код намного лучше человека 30 .
К тому же, современные CPU31 это крайне сложные устройства и знание ассемблера вряд ли помо-
жет узнать их внутренности.
Но все-таки остается по крайней мере две области, где знание ассемблера может хорошо помочь:
1) исследование malware (зловредов) с целью анализа; 2) лучшее понимание вашего скомпили-
рованного кода в процессе отладки. Таким образом, эта книга предназначена для тех, кто хочет
скорее понимать ассемблер, нежели писать на нем, и вот почему здесь масса примеров, связанных
с результатами работы компиляторов.
Q: Я кликнул на ссылку внутри PDF-документа, как теперь вернуться назад?
A: В Adobe Acrobat Reader нажмите сочетание Alt+LeftArrow. В Evince кликните на “<”.
Q: Могу ли я распечатать эту книгу? Использовать её для обучения?
A: Конечно, поэтому книга и лицензирована под лицензией Creative Commons (CC BY-SA 4.0).
28 https://github.com/DennisYurichev/RE-for-beginners/graphs/contributors
29 Операционная Система
30 Очень хороший текст на эту тему: [Agner Fog, The microarchitecture of Intel, AMD and VIA CPUs, (2016)]
31 Central Processing Unit

xv

Вам также может понравиться