forked from wangyif2/RE-for-beginners
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpreface.tex
executable file
·130 lines (108 loc) · 8.27 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
% proofread by Logxen - 12 lines changed 2013/12/12
\chapter{\IFRU{Предисловие}{Preface}}
\IFRU
{Здесь (будет) немного моих заметок о \gls{reverse engineering} на русском языке для начинающих,
для тех кто хочет научиться понимать создаваемый \CCpp компиляторами код для x86 (коего,
практически, больше всего остального) и ARM.}
{Here are some of my notes about \gls{reverse engineering} in English language for
those beginners 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.}
\IFRU{У термина ``\gls{reverse engineering}'' несколько популярных значений:
1) исследование скомпилированных
программ; 2) сканирование трехмерной модели для последующего копирования;
3) восстановление структуры СУБД. Настоящий сборник заметок
связан с первым значением}
{There are several popular meanings of the term ``\gls{reverse engineering}'':
1) reverse engineering of software: researching of 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.}
\section{\IFRU{Рассмотренные темы}{Topics discussed}}
x86, ARM.
\section{\IFRU{Затронутые темы}{Topics touched}}
Oracle RDBMS (\ref{oracle}),
Itanium (\ref{itanium}),
\IFRU{донглы для защиты от копирования}{copy-protection dongles} (\ref{dongles}),
LD\_PRELOAD (\ref{ld_preload}),
\IFRU{переполнение стека}{stack overflow},
\ac{ELF},
\IFRU{формат файла PE в win32}{win32 PE file format} (\ref{win32_pe}),
x86-64 (\ref{x86-64}),
\IFRU{критические секции}{critical sections} (\ref{critical_sections}),
\IFRU{сисколлы}{syscalls} (\ref{syscalls}),
\ac{TLS},
\IFRU{адресно-независимый код}{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}).
\section{\IFRU{Мини-}{Mini-}\ac{FAQ}}
\newcommand{\FNURLREDDIT}{\footnote{\url{http://www.reddit.com/r/ReverseEngineering/}}}
\begin{itemize}
\item
Q: \IFRU{Нужно ли учится понимать язык ассемблера в наше время?}
{Should one learn to understand assembly language these days?} \\
A: \IFRU{Да: ради того чтобы понимать лучше внутреннее устройство, отлаживать код лучше и быстрее.}
{Yes: in order to have deeper understanding of the internals and to debug your software better and faster.}
\item
Q: \IFRU{Нужно ли учиться писать на языке ассемблера в наше время?}
{Should one learn to write in assembly language these days?} \\
A: \IFRU{Пожалуй, нет, если только не писать низкоуровневый код для \ac{OS}.}
{Unless one writes low-level \ac{OS} code, probably no.}
\item
Q: \IFRU{Но для написания очень оптимизированных процедур?}
{But what about writing highly optimized routines?} \\
A: \IFRU{Нет, современные компиляторы \CCpp делают это лучше.}
{No, modern \CCpp compilers do this job better.}
\item
Q: \IFRU{Нужно ли знать внутреннее устройство микропроцессоров}
{Should I learn microprocessor internals}? \\
A: \IFRU{Современные}{Modern} \ac{CPU}\IFRU{ очень сложные}{-s are very complex}.
\IFRU{Если вы не собираетесь писать очень оптимизированный код
или не работаете над кодегенератором компилятора,
тогда устройство CPU можно изучать только в общих чертах}
{If you do not plan to write highly optimized code or if you do not work on compiler's code generator
then you may still learn internals in bare outlines.}
\footnote{\IFRU{Очень хороший текст на эту тему}{Very good text about it}: \cite{AgnerFog}}.
\IFRU{В то же время для понимания и анализа кода
достаточно только знать \ac{ISA}, назначения регистров, т.е., ``внешнюю'' часть \ac{CPU}, доступную
для прикладного программиста}
{At the same time, in order to understand and analyze compiled code it is enough to know
only \ac{ISA}, register's descriptions, i.e., the ``outside'' part of a \ac{CPU} that is available to
an application programmer}.
\item
Q: \IFRU{И всё-таки, зачем мне учить ассемблер}{So why should I learn assembly language anyway}? \\
A: \IFRU{В основном для лучшего понимания происходящего во время отладки и для исследования
программ без наличия исходных кодов, включая зловреды (или вредоносы)
\footnote{современные (2013) русскоязычные термины для malware}}
{Mostly to better understand what is going on while debugging and for \gls{reverse engineering} without source code, including, but not limited to, malware}.
\item
Q: \IFRU{Как можно найти работу reverse engineer-а}{How would I search for a reverse engineering job}? \\
A: \IFRU{На reddit, посвященному RE\FNURLREDDIT, время от времени бывают hiring thread}
{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}).
\IFRU{Посмотрите там}{Try to take a look there}.
\end{itemize}
\section{\IFRU{Об авторе}{About the author}}
\IFRU{Денис Юричев ~--- опытный reverse engineer и программист.
Также доступен как преподаватель языка ассемблера, обратной разработки (\gls{reverse engineering}), Си/Си++.
Может обучать удаленно через электронную почту, Skype или иной мессенджер, либо лично, в Киеве.
С его резюме можно ознакомиться \href{http://yurichev.com/Dennis_Yurichev.pdf}{здесь}.}
{Dennis Yurichev is an experienced reverse engineer and programmer.
% to be proofreaded (begin)
Also available as a freelance teacher of assembly language, \gls{reverse engineering}, C/C++.
Can teach remotely via E-Mail, Skype, any other messengers, or personally in Kiev, Ukraine.
% to be proofreaded (end)
His CV is available \href{http://yurichev.com/Dennis_Yurichev.pdf}{here}.}
\section{\IFRU{Благодарности}{Thanks}}
\IFRU{Андрей ''herm1t'' Баранович, Слава ''Avid'' Казаков, Станислав ''Beaver'' Бобрицкий, Александр Лысенко,
Александр ''Lstar'' Черненький, Андрей Зубинский, Владимир Ботов}
{Andrey ''herm1t'' Baranovich, Slava ''Avid'' Kazakov, Stanislav ''Beaver'' Bobrytskyy, Alexander Lysenko,
Alexander ''Lstar'' Chernenkiy, Andrew Zubinski, Vladimir Botov}, \IFRU{Марк}{Mark} ``Logxen'' \IFRU{Купер}{Cooper},
Shell Rocket, Arnaud Patard (rtp \IFRU{на}{on} \#debian-arm IRC),
\IFRU{и всем тем на github.com кто присылал замечания и коррективы}{and all the folks on github.com
who have contributed notes and corrections}.
\IFRU{Было использовано множество пакетов \LaTeX{}: их авторов я также хотел бы поблагодарить}
{A lot of \LaTeX{} packages were used: I would thank their authors as well}.
\input{donate}
% \section{\IFRU{Целевая аудитория}{Target audience}}