forked from wangyif2/RE-for-beginners
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpreface.tex
executable file
·157 lines (130 loc) · 9.86 KB
/
preface.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
\section{\RU{Предисловие}\EN{Preface}}
\RU{Здесь (будет) немного моих заметок о \gls{reverse engineering} на русском языке для начинающих,
для тех кто хочет научиться понимать создаваемый \CCpp компиляторами код для x86 (коего,
практически, больше всего остального) и ARM.}
\EN{Here are some of my notes in English for beginners about \gls{reverse engineering}
who would like to learn to understand x86 (which accounts for almost
all executable software in the world) and ARM code created by \CCpp compilers.}
\RU{У термина ``\gls{reverse engineering}'' несколько популярных значений:
1) исследование скомпилированных
программ; 2) сканирование трехмерной модели для последующего копирования;
3) восстановление структуры СУБД. Настоящий сборник заметок
связан с первым значением}
\EN{There are several popular meanings of the term ``\gls{reverse engineering}'':
1) reverse engineering of software: researching compiled programs;
2) 3D model scanning and reworking in order to make a copy of it;
3) recreating \ac{DBMS} structure.
These notes are related to the first meaning.}
\subsection*{\RU{Рассмотренные темы}\EN{Topics discussed}}
x86, ARM.
\subsection*{\RU{Затронутые темы}\EN{Topics touched}}
\oracle (\ref{oracle}),
Itanium (\ref{itanium}),
\RU{донглы для защиты от копирования}\EN{copy-protection dongles} (\ref{dongles}),
LD\_PRELOAD (\ref{ld_preload}),
\RU{переполнение стека}\EN{stack overflow},
\ac{ELF},
\RU{формат файла PE в win32}\EN{win32 PE file format} (\ref{win32_pe}),
x86-64 (\ref{x86-64}),
\RU{критические секции}\EN{critical sections} (\ref{critical_sections}),
\RU{сисколлы}\EN{syscalls} (\ref{syscalls}),
\ac{TLS},
\RU{адресно-независимый код}\EN{position-independent code} (\ac{PIC}) (\ref{sec:PIC}),
profile-guided optimization (\ref{PGO}),
C++ STL (\ref{cpp_STL}),
OpenMP (\ref{openmp}),
SEH (\label{sec:SEH}).
\subsection*{\RU{Еще кое-что}\EN{Notes}}
\newcommand{\FNURLREDDIT}{\footnote{\url{http://www.reddit.com/r/ReverseEngineering/}}}
\EN{Why one should learn assembly language these days?}
\RU{Зачем в наше время нужно изучать язык ассемблера?}
\EN{Unless you are OS developer, you probably don't need write in assembly:
modern compilers perform optimizations much better than humans do.}
\RU{Если вы не разработчик OS, вам наверное не нужно писать на ассемблере:
современные компиляторы оптимизируют код намного лучше человека}
\footnote{\RU{Очень хороший текст на эту тему}\EN{A very good text about this topic}: \cite{AgnerFog}}.
\EN{Also, modern \ac{CPU}s are very complex devices and assembly knowledge would
not help you understand its internals.}
\RU{Современные \ac{CPU} это также крайне сложные устройства, и знание ассемблера врядли
поможет узнать его внутренности.}
\EN{That said, there are at least two areas where a good understanding of assembly may help:
First, security/malware research. Second, gaining a better understanding of your compiled code
while debugging.}
\RU{Но все-таки остается по крайней мере две области, где знание ассемблера может хорошо
помочь:
1) исследование malware (\IT{зловредов}) в целях security research; 2) лучшее понимание
вашего скомпилированного кода в процессе отладки.}
\EN{Therefore this book is intended for those who want to understand assembly language rather
than to write in it, which is why there are many examples of compiler output.}
\RU{Таким образом, эта книга предназначена для тех, кто хочет скорее понимать ассемблер,
нежели писать на нем, и вот почему здесь масса примеров связанных с результатами
работы компиляторов.}\\
\\
\RU{Как можно найти работу reverse engineer-а}\EN{How would one find a reverse engineering job}? \\
\RU{На reddit, посвященному RE\FNURLREDDIT, время от времени бывают hiring thread}
\EN{There are hiring threads that appear from time to time on reddit devoted to RE\FNURLREDDIT}
(\href{http://www.reddit.com/r/ReverseEngineering/comments/1hywvr/rreverseengineerings_q3_2013_hiring_thread/}{2013 Q3},
\href{http://www.reddit.com/r/ReverseEngineering/comments/1vui22/rreverseengineerings_2014_hiring_thread/}{2014}).
\RU{Посмотрите там}\EN{Try looking there}.
\EN{A somewhat related hiring thread can be found in the ``netsec'' subreddit}\RU{В смежном субреддите ``netsec'' имеется похожий тред}:
\href{http://www.reddit.com/r/netsec/comments/221xxu/rnetsecs_q2_2014_information_security_hiring}{2014 Q2}.\\
\\
\RU{Куда пойти учиться в Украине?
\begin{itemize}
\item НТУУ <<КПИ>>: ``Аналіз програмного коду та бінарних вразливостей'' \url{http://pti.kpi.ua/news/36-adm/563-l-r-l-r-i}.
\item \url{http://defcon.org.ua/} (факультативы).
\end{itemize}}
\subsection*{\RU{Об авторе}\EN{About the author}}
\begin{tabularx}{\textwidth}{ l X }
\raisebox{-\totalheight}{
\includegraphics[scale=0.60]{Dennis_Yurichev.jpg}
}
&
\RU{Денис Юричев ~--- опытный reverse engineer и программист.
С его резюме можно ознакомиться на его сайте}
\EN{Dennis Yurichev is an experienced reverse engineer and programmer.
His CV is available on his website}\footnote{\url{http://yurichev.com/Dennis_Yurichev.pdf}}. \\
% FIXME: no link. \tablefootnote doesn't work
\end{tabularx}
\subsection*{\RU{Благодарности}\EN{Thanks}}
\RU{Тем, кто много помогал мне отвечая на массу вопросов}\EN{For patiently answering all my questions}:
\HERMIT, \RU{Слава ''Avid'' Казаков}\EN{Slava ''Avid'' Kazakov}.
\RU{Тем, кто присылал замечания об ошибках и неточностях}\EN{For sending me notes
about mistakes and inaccuracies}:
\RU{Станислав ''Beaver'' Бобрицкий, Александр Лысенко}
\EN{Stanislav ''Beaver'' Bobrytskyy, Alexander Lysenko}, Shell Rocket, Zhu Ruijin.
\RU{Просто помогали разными способами}\EN{For helping me in other ways}:
\RU{Андрей Зубинский}\EN{Andrew Zubinski},
Arnaud Patard (rtp \RU{на}\EN{on} \#debian-arm IRC).
\RU{Переводчику на китайский язык}\EN{For translating to Chinese simplified}: Xian Chi.
\RU{Корректорам}\EN{For proofreading}:
\RU{Александр ''Lstar'' Черненький}\EN{Alexander ''Lstar'' Chernenkiy},
\RU{Владимир Ботов}\EN{Vladimir Botov},
\RU{Андрей Бражук}\EN{Andrei Brazhuk},
\RU{Марк}\EN{Mark} ``Logxen'' \RU{Купер}\EN{Cooper},
Yuan Jochen Kang.
\RU{И еще всем тем на github.com кто присылал замечания и коррективы}
\EN{Thanks also to all the folks on github.com who have contributed notes and corrections}.
\RU{Было использовано множество пакетов \LaTeX\: их авторов я также хотел бы поблагодарить}
\EN{A lot of \LaTeX\ packages were used: I would like to thank the authors as well}.
\input{donate}
\subsection*{\RU{Об иллюстрациях}\EN{About illustrations}}
\RU{Читатели, привыкшие читать интернет-страницы, вероятно привыкли к тому что иллюстрации
находятся там же, где и должны}\EN{Readers who are used to reading a lot on the Internet expect
to see illustrations exactly where they should be}.
\RU{Это потому что там нет разбивок на страницы, там она только одна}\EN{This is because there
are no pages at all, it's just one single page}.
\RU{В книгах же, иллюстрации далеко не всегда удается вставить в том контексте где нужно}
\EN{It's not possible to place illustrations in the book at the suitable context}.
\RU{Так что, здесь бывает так, что они все находятся в конце секции,
и по тексту на них ставятся ссылки вроде}\EN{So in this book illustrations are at the end of each
section, and there are references in the text, such as}
``\figname{}1.1''.
\ifdefined\ebook
\RU{Это версия формата A5 для электронных читалок}\EN{This is the A5-format version for e-book readers}.
\RU{Хотя, тут всё то же самое, но иллюстрации уменьшены и не очень хорошо читаемы}
\EN{Although, the content is mostly the same, the illustrations are resized and probably not readable}.
\RU{Извините}\EN{Sorry about that}! \RU{Вы всегда можете посмотреть их в версии формата A4 здесь}
\EN{You can always view them in A4-format version here}: \url{http://beginners.re}.
\fi
% {\RU{Целевая аудитория}\EN{Target audience}}