Updated the manual, corrected some terms and found a bug

git-svn-id: https://www4.informatik.uni-erlangen.de/i4svn/danceos/trunk/devel/fail@1970 8c4709b5-6ec9-48aa-a5cd-a96041d1645a
This commit is contained in:
unzner
2012-12-06 14:47:42 +00:00
parent 2b36678737
commit 378cabd996
4 changed files with 101 additions and 1 deletions

View File

@ -11,7 +11,7 @@ using namespace std;
using namespace fail;
char const * const results_csv = "l4sys.csv";
char const *l4sys_output_result_strings[] = { "Unknown", "Done", "Incomplete", "Timeout", "Wrong output", "Error" };
char const *l4sys_output_result_strings[] = { "Unknown", "No effect", "Incomplete execution", "Crash", "Silent data corruption", "Error" };
char const *l4sys_output_experiment_strings[] = { "Unknown", "GPR Flip", "RAT Flip", "IDC Flip", "ALU Instr Flip" };
char const *l4sys_output_register_strings[] = { "Unknown", "EAX", "ECX", "EDX", "EBX", "ESP", "EBP", "ESI", "EDI" };

View File

@ -448,6 +448,11 @@ bool L4SysExperiment::run() {
// do the logging
logInjection();
} else if (exp_type == param->msg.RATFLIP) {
/*
TODO: provide information on the affected register
in param->msg.register and on its destination in
param->msg.details
*/
ud_type_t which = UD_NONE;
unsigned rnd = 0;
Udis86 udis(injection_ip);

Binary file not shown.

View File

@ -206,6 +206,101 @@ exactly one experiment and exits. To complete your campaign,
you should use the \texttt{client.sh} script in the \texttt{scripts}
subdirectory of Fail*.
\section{Format of the result file}
When the campaign is finished, the campaign server generates a report
file (by default called \texttt{l4sys.csv}) in a primitive CSV dialect.
The only syntax rules are that the columns are separated by commas,
that the respective data sets are separated by line breaks (\verb+\n+),
and that the cells do not contain line breaks or commas.
This section lists and describes the columns in the report generated by
the campaign server, from left to right.
\begin{enumerate}
\item \verb+exp_type+\\
Names the experiment that generated the return data.
If it is none of the following, a writing error occurred:
\begin{itemize}
\item Unknown
\item GPR Flip
\item RAT Flip
\item IDC Flip
\item ALU Instr Flip
\end{itemize}
For \emph{Unknown}, a debug report should be provided.
If not, something went completely wrong, and you should
check the logs.
\item \verb+injection_ip+\\
The instruction pointer of the fault injection
in lowercase hexadecimal notation.
Note that the injection happens right \emph{before} this
instruction.
\item \verb+register+\\
When the fault injection experiment affects a general purpose register,
it is listed here. This column should have one of the following values;
if it does not, a writing error occurred:
\begin{enumerate}
\item Unknown
\item EAX
\item ECX
\item EDX
\item EBX
\item ESP
\item EBP
\item ESI
\item EDI
\end{enumerate}
\item \verb+instr_offset+\\
The offset of the executed instruction, relative to either all executed
instructions or to all listed instructions in case you applied
a filter (see above). This offset includes multiple runs of the same
instruction.
For example, this is useful when you have loops in you program and
need a rough idea how many runs your loop had executed until
the injection.
\item \verb+injection_bit+\\
The bit at which the injection was performed. This value is
only used in GPRFlip and IDCFlip. GPRFlip inverts the bit at
position \verb+injection_bit+ in the register, counted from the right.
IDCFlip inverts the bit at position \verb+injection_bit+
of the current instruction, counted from the left.
\item \verb+resulttype+\\
The result of the fault injection.
This column should have one of the following values;
if it does not, a writing error occurred:
\begin{enumerate}
\item Unknown
\item No effect
\item Incomplete execution
\item Crash
\item Silent data corruption
\item Error
\end{enumerate}
\item \verb+resultdata+\\
The meaning of this field can vary for each experiment. At the moment,
all of the experiments use it to store the last instruction
pointer of the emulator (in decimal notation).
This information can be used to determine when a fault
turned into a failure.
\item \verb+output+\\
The output on the EIA-232 serial line generated by the workload
program. Undisplayable or reserved characters are escaped in a
C conformant octal manner (e.g. \verb+\033+ for the Escape character).
\item \verb+details+\\
This column provides various details on the experiment run,
which may help to
trace errors or to reconstruct the injected fault.
ALUInstrFlip uses this column to
provide the opcode of the new instruction.
\end{enumerate}
\section{Known bugs}
At the moment, RATFlip does not provide enough information
to reconstruct the injected fault
(see also the \texttt{TODO} in \texttt{experiment.cc}).
\section{To Be Continued}
This is everything I consider important so far. If you still encounter