Skip to content
Snippets Groups Projects
Verified Commit ec9e892a authored by iliya.saroukha's avatar iliya.saroukha :first_quarter_moon:
Browse files

fix: typos in chap 3

parent 1b9cef4c
Branches
No related tags found
No related merge requests found
...@@ -364,10 +364,10 @@ que l'implémentation originelle de Blue Pill, celle-ci est désormais compatibl ...@@ -364,10 +364,10 @@ que l'implémentation originelle de Blue Pill, celle-ci est désormais compatibl
non-seulement avec les extensions AMD-V mais aussi Intel VT-x. Dans l'optique non-seulement avec les extensions AMD-V mais aussi Intel VT-x. Dans l'optique
de rendre cette implémentation \say{générique}, une grande quantité d'appels de rendre cette implémentation \say{générique}, une grande quantité d'appels
directs aux fonctions ont été masqués par une indirection supplémentaire via directs aux fonctions ont été masqués par une indirection supplémentaire via
une structure du nom de \verb|HVM_DEPENDENT| dont le contenu partiel est une structure du nom de \verb|HVM_DEPENDENT| dont le contenu est présenté dans
présenté dans la Figure~\ref{fig:code_hvm_dependent_struct}. Les divers types la Figure~\ref{fig:code_hvm_dependent_struct}. Les divers types des champs
des champs définis dans cette structure sont en réalité des pointeurs de définis dans cette structure sont en réalité des pointeurs de fonctions comme
fonctions comme l'illustre la Figure~\ref{fig:code_arch_init_func_ptr}. l'illustre la Figure~\ref{fig:code_arch_init_func_ptr}.
\begin{figure}[tbph!] \begin{figure}[tbph!]
\begin{minted} \begin{minted}
...@@ -433,7 +433,7 @@ seront interceptés par l'hyperviseur via \verb|ArchRegisterTraps|, puis ...@@ -433,7 +433,7 @@ seront interceptés par l'hyperviseur via \verb|ArchRegisterTraps|, puis
d'initialiser l'état de l'invité (de l'\acrshort{os} natif à migrer) à l'aide d'initialiser l'état de l'invité (de l'\acrshort{os} natif à migrer) à l'aide
du pointeur de fonctions \verb|ArchInitialize|. Finalement, la dernière action du pointeur de fonctions \verb|ArchInitialize|. Finalement, la dernière action
de \verb|HvmSubvertCpu()| sera de virtualiser le \acrshort{cpu} sur lequel de \verb|HvmSubvertCpu()| sera de virtualiser le \acrshort{cpu} sur lequel
s'exécute le bout de code actuel et de ce fait, lancé sur celui-ci l'hyperviseur. s'exécute le bout de code actuel et de ce fait, lancer sur celui-ci l'hyperviseur.
Ces actions seront effectuées par la fonction appelé par le pointeur Ces actions seront effectuées par la fonction appelé par le pointeur
\verb|ArchVirtualize|. \verb|ArchVirtualize|.
...@@ -514,7 +514,7 @@ NTSTATUS NTAPI HvmSubvertCpu ( ...@@ -514,7 +514,7 @@ NTSTATUS NTAPI HvmSubvertCpu (
La fonction \verb|SvmInitialize()| appelée par \verb|ArchInitialize|, présentée La fonction \verb|SvmInitialize()| appelée par \verb|ArchInitialize|, présentée
dans la Figure~\ref{fig:code_svm_initialize}, aura pour but d'allouer le dans la Figure~\ref{fig:code_svm_initialize}, aura pour but d'allouer le
\gls{vmcb} de l'invité. Cette structure de données, dont la nomenclature du côté \gls{vmcb} de l'invité. Cette structure de données, dont la nomenclature du côté
d'Intel varie légérement (\gls{vmcs}), est subdivisé en deux sections : une d'Intel varie légèrement (\gls{vmcs}), est subdivisée en deux sections : une
section de \say{contrôle} et une de \say{sauvegarde d'état} section de \say{contrôle} et une de \say{sauvegarde d'état}
(\textit{state save area}). Principalement, ce sera la zone de sauvegarde qui (\textit{state save area}). Principalement, ce sera la zone de sauvegarde qui
aura un intérêt particulier car celle-ci sera utilisée afin de conserver l'état aura un intérêt particulier car celle-ci sera utilisée afin de conserver l'état
...@@ -531,7 +531,7 @@ lui sera utilisé plus tard comme argument fourni à l'instruction \verb|VMRUN|. ...@@ -531,7 +531,7 @@ lui sera utilisé plus tard comme argument fourni à l'instruction \verb|VMRUN|.
Après que cet élément fut alloué, sa zone de contrôle sera configurée Après que cet élément fut alloué, sa zone de contrôle sera configurée
via la fonction \verb|SvmSetupControlArea| puis l'initialisation de l'état de via la fonction \verb|SvmSetupControlArea| puis l'initialisation de l'état de
l'invité pourra être entamé. Ceci sera accompli par la fonction l'invité pourra être entamée. Ceci sera accompli par la fonction
\verb|SvmInitGuestState()| à laquelle sera fourni en argument : \verb|SvmInitGuestState()| à laquelle sera fourni en argument :
l'instance \verb|Cpu| de la structure \verb|PCPU| contenant les \acrshort{vmcb}s l'instance \verb|Cpu| de la structure \verb|PCPU| contenant les \acrshort{vmcb}s
qui y sont associés, le pointeur d'instruction de l'invité ainsi que son qui y sont associés, le pointeur d'instruction de l'invité ainsi que son
...@@ -545,7 +545,8 @@ assembleur. Ce symbole fournira au registre \verb|rax| l'adresse physique du ...@@ -545,7 +545,8 @@ assembleur. Ce symbole fournira au registre \verb|rax| l'adresse physique du
\verb|OriginalVmcb| est exécutera l'instruction \verb|svm_vmsave|. Du fait que \verb|OriginalVmcb| est exécutera l'instruction \verb|svm_vmsave|. Du fait que
les fonctions intrinsèques liées aux instructions matérielles n'étaient pas les fonctions intrinsèques liées aux instructions matérielles n'étaient pas
proposées par les compilateurs de l'époque, celles-ci ont dû être répliquées en proposées par les compilateurs de l'époque, celles-ci ont dû être répliquées en
\say{codant} l'instruction à la main, octet par octet. \say{codant} l'instruction à la main, octet par octet, comme l'illustre la
Figure~\ref{fig:code_asm_svm_vmsave}.
\begin{figure}[tbph!] \begin{figure}[tbph!]
\begin{minted} \begin{minted}
...@@ -641,7 +642,7 @@ En ce qui concerne la fonction \verb|SvmVirtualize()|, son rôle sera de fournir ...@@ -641,7 +642,7 @@ En ce qui concerne la fonction \verb|SvmVirtualize()|, son rôle sera de fournir
à \verb|SvmVmrun()| en argument l'entièreté de l'instance \verb|Cpu| de la à \verb|SvmVmrun()| en argument l'entièreté de l'instance \verb|Cpu| de la
structure de type \verb|PCPU| qui contiendra notamment le \acrshort{vmcb} structure de type \verb|PCPU| qui contiendra notamment le \acrshort{vmcb}
initialisé avec l'état de l'\acrshort{os} afin que celui-ci puisse reprendre initialisé avec l'état de l'\acrshort{os} afin que celui-ci puisse reprendre
son exécution à la suite de l'exécution de l'instruction \verb|VMRUN|. son exécution de l'instruction \verb|VMRUN|.
% Il est nécessaire de garder en tête que l'état de l'\acrshort{os} fut déjà % Il est nécessaire de garder en tête que l'état de l'\acrshort{os} fut déjà
% stocké dans un \acrshort{vmcb} à part entière. Afin que celui-ci puisse % stocké dans un \acrshort{vmcb} à part entière. Afin que celui-ci puisse
...@@ -678,16 +679,16 @@ static NTSTATUS NTAPI SvmVirtualize ( ...@@ -678,16 +679,16 @@ static NTSTATUS NTAPI SvmVirtualize (
\caption{Fichier \lstinline{svm/svm.c:1174}. Source : tiré du code source de Blue Pill, ref. URL06 / réalisé par RUTKOWSKA Joanna}\label{fig:code_svm_virtualize} \caption{Fichier \lstinline{svm/svm.c:1174}. Source : tiré du code source de Blue Pill, ref. URL06 / réalisé par RUTKOWSKA Joanna}\label{fig:code_svm_virtualize}
\end{figure} \end{figure}
La routine \verb|SvmVmrun()|, illustré par la Figure~\ref{fig:code_asm_svm_vmrun}, La routine \verb|SvmVmrun()|, illustrée par la Figure~\ref{fig:code_asm_svm_vmrun},
quant à elle est séparée en plusieurs phases. La première consistera à allouer quant à elle est séparée en plusieurs phases. La première consistera à allouer
suffisamment de place sur la pile pour pouvoir suffisamment de place sur la pile pour pouvoir
stocker tous les registres de travaux de l'invité lorsque l'hyperviseur stocker tous les registres de travaux de l'invité lorsque l'hyperviseur
reprendra la main sur l'exécution. Puis, la valeur de l'adresse physique reprendra la main sur l'exécution. Puis, la valeur de l'adresse physique
stockée dans le champ \verb|VmcbToContinuePA| est fourni à l'instruction stockée dans le champ \verb|VmcbToContinuePA| est fournie à l'instruction
\verb|svm_vmload| afin de charger l'état du \acrshort{cpu} stocké à l'adresse \verb|svm_vmload| afin de charger l'état du \acrshort{cpu} stocké à l'adresse
de \acrshort{vmcb}. La troisième étape, se résume à une boucle qui va du \acrshort{vmcb}. La troisième étape, se résume à une boucle qui va
continuellement exécuter l'instruction \verb|VMRUN| avec la même adresse continuellement exécuter l'instruction \verb|VMRUN| avec la même adresse
physique du \acrshort{vmcb} mentionné précédemment. À partir de ce moment, physique du \acrshort{vmcb} mentionnée précédemment. À partir de ce moment,
l'\acrshort{os} natif de la machine reprendra son exécution dans une l'\acrshort{os} natif de la machine reprendra son exécution dans une
\acrshort{vm} contrôlée par l'hyperviseur. \acrshort{vm} contrôlée par l'hyperviseur.
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment