Permalink
Browse files

French version numeral

  • Loading branch information...
1 parent 861ba19 commit 3a4fb5fa90ce809cd4c13706d9353534d378501b @bLandais bLandais committed Dec 25, 2016
Showing with 168 additions and 13 deletions.
  1. +9 −9 FAQ_FR.tex
  2. +1 −0 patterns/main.tex
  3. +154 −0 patterns/numeral_FR.tex
  4. +4 −4 patterns/patterns_opt_dbg_FR.tex
View
@@ -1,17 +1,17 @@
\subsection*{mini-FAQ}
\par Q: Quels sont les prérequis nécessaires avant de lire ce livre ?
-\par A: Une compréhension de base du C/C++ serait l'idéal.
+\par R: Une compréhension de base du C/C++ serait l'idéal.
\par Q: Puis-je acheter une version papier du livre en russe / anglais ?
-\par A: Malheureusement non, aucune maison d'édition n'a été intéressée pour publier une version en russe ou en anglais du livre jusqu'à présent.
+\par R: Malheureusement non, aucune maison d'édition n'a été intéressée pour publier une version en russe ou en anglais du livre jusqu'à présent.
Cependant, vous pouvez demander à votre imprimerie préférée de l'imprimer et de le relier.
\par Q: Y a-il une version ePub/Mobi ?
-\par A: Le livre dépend majoritairement de TeX/LaTeX, il n'est donc pas évident de le convertir en version ePub/Mobi.
+\par R: Le livre dépend majoritairement de TeX/LaTeX, il n'est donc pas évident de le convertir en version ePub/Mobi.
\par Q: Pourquoi devrait-on apprendre l'assembleur de nos jours ?
-\par A: A moins d'être un développeur d'\ac{OS}, vous n'aurez probablement pas besoin d'écrire en assembleur\textemdash{}les derniers compilateurs (ceux de notre décennie) sont meilleurs que les êtres humains en terme d'optimisation. \footnote{Un très bon article à ce sujet : \InSqBrackets{\AgnerFog}}.
+\par R: A moins d'être un développeur d'\ac{OS}, vous n'aurez probablement pas besoin d'écrire en assembleur\textemdash{}les derniers compilateurs (ceux de notre décennie) sont meilleurs que les êtres humains en terme d'optimisation. \footnote{Un très bon article à ce sujet : \InSqBrackets{\AgnerFog}}.
De plus, les derniers \ac{CPU}s sont des appareils complexes et la connaissance de l'assembleur n'aide pas vraiment à comprendre leurs mécanismes internes.
@@ -20,21 +20,21 @@ \subsection*{mini-FAQ}
Ce livre est donc destiné à ceux qui veulent comprendre l'assembleur plutôt que d'écrire en assembleur, ce qui explique pourquoi il y a de nombreux exemples de résultats issus de compilateurs dans ce livre.
\par Q: J'ai cliqué sur un lien dans le document PDF, comment puis-je retourner en arrière ?
-\par A: Dans Adobe Acrobat Reader, appuyez sur Alt + Flèche gauche. Dans Evince, appuyez sur le bouton ``<''.
+\par R: Dans Adobe Acrobat Reader, appuyez sur Alt + Flèche gauche. Dans Evince, appuyez sur le bouton ``<''.
\par Q: Puis-je imprimer ce livre / l'utiliser pour de l'enseignement ?
-\par A: Bien sûr ! C'est la raison pour laquelle le livre est sous licence Creative Commons (CC BY-SA 4.0).
+\par R: Bien sûr ! C'est la raison pour laquelle le livre est sous licence Creative Commons (CC BY-SA 4.0).
\par Q: Pourquoi ce livre est-il gratuit ? Vous avez fait du bon boulot. C'est suspect, comme nombre de choses gratuites.
-\par A: D'après ma propre expérience, les auteurs d'ouvrages techniques font cela pour l'auto-publicité. Il n'est pas possible de se faire beaucoup d'argent d'une telle manière.
+\par R: D'après ma propre expérience, les auteurs d'ouvrages techniques font cela pour l'auto-publicité. Il n'est pas possible de se faire beaucoup d'argent d'une telle manière.
\par Q: Comment trouver du travail dans le domaine de la rétro-ingénierie ?
-\par A: Il existe des topics d'embauche qui apparaissent de temps en temps sur Reddit, dédiés à la rétro-ingénierie (cf. reverse engineering ou RE)\FNURLREDDIT{}
+\par R: Il existe des topics d'embauche qui apparaissent de temps en temps sur Reddit, dédiés à la rétro-ingénierie (cf. reverse engineering ou RE)\FNURLREDDIT{}
(\RedditHiringThread{}).
Jetez un oeil ici.
Un topic d'embauche quelque peu lié peut être trouvé dans le subreddit \q{netsec}: \NetsecHiringThread{}.
\par Q: J'ai une question...
-\par A: Envoyez la moi par email (\EMAIL).
+\par R: Envoyez la moi par email (\EMAIL).
View
@@ -71,6 +71,7 @@ \chapter{รูปแบบของโค้ด}
\EN{\input{patterns/numeral_EN}}
\ITA{\input{patterns/numeral_ITA}}
\DE{\input{patterns/numeral_DE}}
+\FR{\input{patterns/numeral_FR}}
% chapters
\input{patterns/00_empty/main}
@@ -0,0 +1,154 @@
+% TODO translate
+\subsection{Système de numération}
+
+Les Hommes ont probablement pris l'habitude d'utiliser la numérotation décimale parce qu'ils ont 10 doigts.
+Néanmoins, le nombre 10 n'a pas de signification particulière en science et en mathématiques.
+En électronique, le système de numérotation est le binaire : 0 pour l'absence de courant dans un fil et 1 s'il y en a.
+10 en binaire est 2 en décimale; 100 en binaire est 4 en décimale et ainsi de suite.
+
+Si le système de numération a 10 chiffres, il est en \IT{base} 10. % \IT{radix} ?
+Le système binaire est en \IT{base} 2.
+
+Rappels importants :
+1) Un \IT{nombre} est un nombre, tandis qu'un \IT{chiffre} est un moyen d'écriture et est généralement un caractère;
+2) Un nombre ne change pas lorsqu'on le convertit dans une autre base : sa notation change.
+
+Comment convertir un nombre d'un base à une autre ?
+
+La notation positionnelle est utilisée quasiment partout, cela signifie qu'un chiffre (nombre contenu dans un seul caractère) a un certain poids dépendant de sa position.
+Si 2 se situe le plus à droite, c'est 2.
+S'il est placé un chiffre avant celui le plus à droite, c'est 20.
+
+Que représente $1234$ ?
+
+$10^3 \cdot 1 + 10^2 \cdot 2 + 10^1 \cdot 3 + 1 \cdot 4$ = 1234 ou
+$1000 \cdot 1 + 100 \cdot 2 + 10 \cdot 3 + 4 = 1234$
+
+De même pour les nombres binaires, mais la base est 2 au lieu de 10.
+Que représente 0b101011 ?
+
+$2^5 \cdot 1 + 2^4 \cdot 0 + 2^3 \cdot 1 + 2^2 \cdot 0 + 2^1 \cdot 1 + 2^0 \cdot 1 = 43$ ou
+$32 \cdot 1 + 16 \cdot 0 + 8 \cdot 1 + 4 \cdot 0 + 2 \cdot 1 + 1 = 43$
+
+On peut opposer la notation positionnelle avec la notation non-positionnelle comme la numération romaine
+\footnote{A propos de l'évolution du système de numération, voir \InSqBrackets{\TAOCPvolII{}, 195--213.}}.
+Peut-être que l'Humanité a choisi le système de numération positionnelle parce qu'il était plus simple pour les opérations basiques (addition, multiplication, etc.) à la main sur papier.
+
+En effet, les nombres binaires peuvent être ajoutés, soustraits et ainsi de suite de la même manière que c'est enseigné à l'école, mais seulement 2 chiffres sont disponibles.
+
+Les nombres binaires sont volumineux pour représenter le code source et les dumps, c'est pourquoi le système hexadécimal peut etre utilisé.
+Les nombres en base hexadécimal utilisent les nombres 0..9 et aussi 6 caractères latins : A..F.
+Chaque chiffre hexadécimal prend 4 bits ou 4 chiffres binaires, donc c'est très simple de convertir un nombre binaire vers l'hexadécimal et inversement, même manuellement.
+
+\begin{center}
+\begin{longtable}{ | l | l | l | }
+\hline
+\HeaderColor hexadécimal & \HeaderColor binaire & \HeaderColor décimal \\
+\hline
+0 &0000 &0 \\
+1 &0001 &1 \\
+2 &0010 &2 \\
+3 &0011 &3 \\
+4 &0100 &4 \\
+5 &0101 &5 \\
+6 &0110 &6 \\
+7 &0111 &7 \\
+8 &1000 &8 \\
+9 &1001 &9 \\
+A &1010 &10 \\
+B &1011 &11 \\
+C &1100 &12 \\
+D &1101 &13 \\
+E &1110 &14 \\
+F &1111 &15 \\
+\hline
+\end{longtable}
+\end{center}
+
+Comment savoir quelle est la base actuellement utilisée ?
+
+Les nombres décimaux sont d'ordinaire écrits tels quels, i.e, 1234. Mais certains assembleurs autorisent d'accentuer la base décimale d'un nombre et ce nombre peut s'écrire avec un "d" en suffixe : 1234d.
+
+Les nombres binaires sont parfois écrits avec le préfixe "0b" : 0b100110111 (\ac{GCC} a une extension de langage non-standard pour ca \footnote{\url{https://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html})}.
+Il y a aussi un autre moyen : le suffixe "b", par exemple : 100110111b.
+J'essaierai de garder le préfixe "0b" tout le long du livre pour les nombres binaires.
+
+Les nombres hexadécimaux sont écrits avec le préfixe "0x" en \CCpp et autres \ac{PL}s : 0x1234ABCD.
+Ou il y a le suffixe "h" : 1234ABCDh - c'est une manière commune de les représenter dans les assembleurs et les débuggeurs.
+Si le nombre commence par un A..F, un 0 est ajouté au début : 0ABCDEFh.
+J'essaierai de garder le préfixe "0x" tout le long du livre pour les nombres hexadécimaux.
+
+Faut-il apprendre à convertir les nombres de tête? La table des nombres hexadécimaux de 1 chiffre peut facilement être mémorisée. Pour les nombres plus gros, ce n'est pas la peine de se torturer.
+
+\subsubsection{Base octal}
+
+Un autre système numération a été largement utilisé en informatique est la représentation octale: il y a 8 chiffres (0..7) et occupent 3 bits, donc c'est facile de convertir un nombre d'un base à l'autre.
+Il est maintenant remplacé par le système hexadécimal quasiment partout mais, chose surprenante, il y a encore une commande sur *NIX, utilisée par beaucoup de personnes, qui a un nombre octal comme argument : \TT{chmod}.
+
+\myindex{UNIX!chmod}
+Comme beaucoup d'utilisateur *NIX le savent, l'argument de \TT{chmod} peut être un nombre à 3 chiffres. Le premier correspond aux droits du propriétaire du fichier, le scond correspond aux droits pour le groupe (auquel le fichier appartient), le troisième est pour tous les autres.
+Et chaque caratère peut être représenté en binaire:
+
+\begin{center}
+\begin{longtable}{ | l | l | l | }
+\hline
+\HeaderColor décimal & \HeaderColor binaire & \HeaderColor signification
+\\
+\hline
+7 &111 &\textbf{rwx} \\
+6 &110 &\textbf{rw-} \\
+5 &101 &\textbf{r-x} \\
+4 &100 &\textbf{r-{}-} \\
+3 &011 &\textbf{-wx} \\
+2 &010 &\textbf{-w-} \\
+1 &001 &\textbf{-{}-x} \\
+0 &000 &\textbf{-{}-{}-} \\
+\hline
+\end{longtable}
+\end{center}
+
+Ainsi chaque bit correspond à un flag: lecture (r) / écriture (w) / exécution (x).
+
+La raison pour laquelle je parle de \TT{chmod} ici est que le nombre passé en argument peut être écrit comme un nombre octal.
+Prenons par exemple, 644.
+Quand vous tapez \TT{chmod 644 file}, vous définissez les permissions de lecture/écriture pour le propriétaire, les permissions de lecture pour le groupe et encore les permissions de lecture pour les autres.
+Convertissons le nombre 644 en octal vers le binaire, ce sera \TT{110100100}, ou (par groupe de 3 bits) \TT{110 100 100}.
+
+Maintenant que nous savons que chaque triplet sert a décrire les permissions pour le propriétaire/groupe/autres : le premier est \TT{rw-}, le second est \TT{r--} et le troisième est \TT{r--}.
+
+Le système de numération octal était aussi populaire sur les vieux ordinateurs comme le PDP-8 parce que les mots pouvaient être de 12, 24 ou de 36 bits et ces nombres sont divisibles par 3, donc la représentation octale était naturelle dans cet environnement.
+Aujourd'hui, tous les ordinateurs populaires utilisent des mots/taille d'adresse de 16, 32 ou de 64 bits et ces nombres sont divisibles par 4, donc la représentation hexadécimale était plus naturelle içi.
+
+Le système de numération octal est supporté par tous les compilateurs \CCpp standards.
+C'est parfois une source de confusion parce que les nombres octaux sont notés avec un zéro au début. Par exemple, 0277 est 255. % 0277 = 255 (original text), maybe 0377 = 255 ?
+Et parfois, vous faites une faute de frappe et écrivez "09" au lieu de 9, et le compilateur ne vous l'autorise pas.
+GCC peut renvoyer quelque chose comme ca:\\
+\TT{error: invalid digit "9" in octal constant}. % TODO : translate this too ?
+
+\subsubsection{Divisibilité}
+
+Quand vous voyez un nombre décimal comme 120, vous pouvez rapidement déduire qu'il est divisible par 10, parce que le dernier chiffre est zéro.
+Egalement, 123400 est divisible par 100 parce que les deux derniers chiffres sont zéros.
+
+De la même façon, un nombre hexadécimal 0x1230 est divisible par 0x10 (ou 16), 0x123000 est disible par 0x1000 (ou 4096), etc.
+
+Un nombre binaire 0b1000101000 est divisible par 0b1000 (8), etc.
+
+Cette propriété peut être souvent utilisée pour déterminer rapidement si la taille d'un bloc mémoire correspond à la limite.
+Par exemple, les sections dans les fichiers \ac{PE} commencent quasiment toujours à une adresse finissant par 3 zéros hexadécimaux: 0x41000, 0x10001000, etc.
+La raison derrière ce fait est que la plupart des sections \ac{PE} sont remplies à la limite de 0x1000 (4096) octets.
+
+\subsubsection{Arithmétique multiprécision et base}
+
+\index{RSA}
+L'arithmétique multiprécision utilise des nombres très grands et peuvent chacun être enregistré sur plusieurs octets.
+Par exemple, les clés RSA utilisent jusqu'à 4096 bits et parfois plus encore.
+
+Dans \InSqBrackets{\TAOCPvolII, 265} vous pouvez trouver l'idée suivante: quand vous enregistrez un nombre multiprécision dans plusieurs octets. Tout le nombre peut être représenté avec une base de $2^8=256$, et chaque chiffre est associé à l'octet correspondant.
+De la même manière, si vous sauvegardez un nombre multiprécision sur plusieurs entiers de 32 bits, chaque chiffre est associé à l'emplacement de 32 bits et vous pouvez penser que ce nombre est stocké dans une base $2^{32}$.
+
+\subsubsection{Prononciation}
+
+Les nombres dans une base non décimale sont généralement prononcés par un chiffre à la fois : ``un-zéro-zéro-un-un-...''.
+Les mots comme ``dix``, ``mille``, etc, ne sont généralement pas prononcés, parce qu'ils peuvent être confondus avec ceux en base décimale.
+
@@ -1,6 +1,6 @@
\section{La méthode}
-Lorsque l'auteur de ce livre à commencer à apprendre le C, et plus tard, le \Cpp, il a pris l'habitude d'écrire des petits morceaux de
+Lorsque l'auteur de ce livre a commencé à apprendre le C, et plus tard, le \Cpp, il a pris l'habitude d'écrire des petits morceaux de
code, de les compiler et de regarder le langage d'assemblage généré.
Cela lui a permis de comprendre facilement ce qui se passe dans le code qu'il écrit.
\footnote{En fait, il fait encore cela lorsqu'il ne comprend ce qu'un morceau de code fait.}
@@ -13,10 +13,10 @@ \section{La méthode}
Ceux qui sont déjà familier avec l'une de ces architectures peuvent rapidement survoler ces pages.
Parfois, des anciens compilateurs sont utilisés, afin d'obtenir des extraits de code le plus court (ou le plus simple) possible.
-\section*{\Exercises}
+\section*{\Exercices}
Lorsque l'auteur de ce livre étudiant le langage d'assemblage, il a souvent compilé des petites fonctions en C et les a ensuite
-ré-écrite peu à peu en assambleur, en essayant d'obtenir un code aussi conçis que possible.
+ré-écrite peu à peu en assembleur, en essayant d'obtenir un code aussi conçis que possible.
Cela n'en vaut probablement plus la peine aujourd'hui, car il est difficile
de se mesurer aux derniers compilateurs en terme d'efficacité. Cela reste par contre un excellent moyen d'approfondir ses connaissances
de l'assembleur.
@@ -39,5 +39,5 @@ \section*{Niveau d'optimisation et information de débogage}
même parfois absentes du code machine résultants.
Les rétro-ingénieurs peuvent rencontrer n'importe quelle version, simplement parce que certains développeurs mettent les options
d'optimisation, et d'autres pas.
-Pour cette raison, et lorsque c'est possible, nous allons essayer de travailler sur des examples avec les versions de débogage
+Pour cette raison, et lorsque c'est possible, nous allons essayer de travailler sur des exemples avec les versions de débogage
et finale du code présenté dans ce livre.

0 comments on commit 3a4fb5f

Please sign in to comment.