Compare commits

...
31 Commits
Author SHA1 Message Date
christoph 9549ae774c Update zotero.bib 2026-07-07 16:12:02 +02:00
christoph 087b82af96 Small improvements after feedback (citing, footnotes, methodology) 2026-07-07 16:04:59 +02:00
christoph 112159f893 Update zotero.bib 2026-07-06 22:55:33 +02:00
christoph 67929c39f4 Update chapter title style 2026-07-05 23:46:00 +02:00
christoph 3ba5be8c86 WIP: background section 2026-07-05 23:45:52 +02:00
christoph af400ab8d4 Ignore converted SVGs 2026-07-03 20:17:45 +02:00
christoph 549a05fbf7 Fix incorrect resetting of \sloppy 2026-07-03 11:47:30 +02:00
christoph 6dbcdc05d3 Fix justfile .latexmkrc path for subfiles 2026-07-03 11:43:24 +02:00
christoph 00bb9380b2 Wrap bibliography in \sloppy to prevent overfull hboxes 2026-07-03 01:50:19 +02:00
christoph e936f0a8d8 Add mylatexformat commands 2026-07-03 01:20:33 +02:00
christoph aad8942361 Only compile necessary frontmatter/backmatter additions (e.g., bib) for single subfiles 2026-07-03 00:43:14 +02:00
christoph b2e2c67b4c Replace flake with .envrc 2026-07-03 00:42:18 +02:00
christoph 13c3808ef8 Update out_dir/aux_dir 2026-07-03 00:29:46 +02:00
christoph b1bf0fe5ba Clean .out dir in justfile 2026-07-03 00:29:28 +02:00
christoph e2fb4f7651 Include all subchapters from main file (to not break vimtex) 2026-07-03 00:29:20 +02:00
christoph c121089311 Add tex root directive to chapters 2026-07-03 00:29:03 +02:00
christoph 85fd335f07 Add flake 2026-07-03 00:26:05 +02:00
christoph 710cbf42ed WIP: background section 2026-07-02 23:37:29 +02:00
christoph af500a6691 Ignore build directories 2026-07-02 23:36:14 +02:00
christoph ab3da7b971 Clean .aux dir in justfile 2026-07-02 23:34:26 +02:00
christoph 43e421a1fd Add makeglossaries to latexmkrc 2026-07-02 23:34:13 +02:00
christoph c3a06b4e43 Start background chapter 2026-07-01 23:53:27 +02:00
christoph 446f82205a Add latexmk colored output 2026-07-01 18:51:40 +02:00
christoph e57f246904 Simplify justfile by adding .latexmkrc 2026-07-01 18:19:07 +02:00
christoph 3fa872d922 Add preliminary signed statutory declaration 2026-07-01 15:39:05 +02:00
christoph ef81fcee56 Add "placeholder" text from proposal 2026-07-01 15:38:19 +02:00
christoph 914325fdbe Split zotero imported and manual references 2026-07-01 15:37:20 +02:00
christoph 5d1c2d1eef Fix bib file lookup for subfiles 2026-07-01 15:36:51 +02:00
christoph e8891233d8 Use titlepage from bachelor's thesis 2026-06-30 15:52:05 +02:00
christoph 3f44dbbad3 Import references from zotero 2026-06-30 15:09:23 +02:00
christoph 8e5b1697ad Switch to scrbook class for sans-serif headings 2026-06-30 15:09:14 +02:00
38 changed files with 5151 additions and 702 deletions
+1
View File
@@ -0,0 +1 @@
export BIBINPUTS="$PWD:$BIBINPUTS"
+3 -424
View File
@@ -1,424 +1,3 @@
# Created by https://www.toptal.com/developers/gitignore/api/windows,linux,macos,visualstudiocode,sublimetext,latex
# Edit at https://www.toptal.com/developers/gitignore?templates=windows,linux,macos,visualstudiocode,sublimetext,latex
### LaTeX ###
## Core latex/pdflatex auxiliary files:
*.aux
*.lof
*.log
*.lot
*.fls
*.out
*.toc
*.fmt
*.fot
*.cb
*.cb2
.*.lb
## Intermediate documents:
*.dvi
*.xdv
*-converted-to.*
*.ist
# these rules might exclude image files for figures etc.
# *.ps
# *.eps
# *.pdf
## Generated if empty string is given at "Please type another file name for output:"
.pdf
## Bibliography auxiliary files (bibtex/biblatex/biber):
*.bbl
*.bcf
*.blg
*-blx.aux
*-blx.bib
*.run.xml
## Build tool auxiliary files:
*.fdb_latexmk
*.synctex
*.synctex(busy)
*.synctex.gz
*.synctex.gz(busy)
*.pdfsync
## Build tool directories for auxiliary files
# latexrun
latex.out/
svg-inkscape/
_minted-*/
## Auxiliary and intermediate files from other packages:
# algorithms
*.alg
*.loa
# achemso
acs-*.bib
# amsthm
*.thm
# beamer
*.nav
*.pre
*.snm
*.vrb
# changes
*.soc
# comment
*.cut
# cprotect
*.cpt
# elsarticle (documentclass of Elsevier journals)
*.spl
# endnotes
*.ent
# fixme
*.lox
# feynmf/feynmp
*.mf
*.mp
*.t[1-9]
*.t[1-9][0-9]
*.tfm
#(r)(e)ledmac/(r)(e)ledpar
*.end
*.?end
*.[1-9]
*.[1-9][0-9]
*.[1-9][0-9][0-9]
*.[1-9]R
*.[1-9][0-9]R
*.[1-9][0-9][0-9]R
*.eledsec[1-9]
*.eledsec[1-9]R
*.eledsec[1-9][0-9]
*.eledsec[1-9][0-9]R
*.eledsec[1-9][0-9][0-9]
*.eledsec[1-9][0-9][0-9]R
# glossaries
*.acn
*.acr
*.glg
*.glo
*.gls
*.*-glg
*.*-glo
*.*-gls
*.glsdefs
*.lzo
*.lzs
# uncomment this for glossaries-extra (will ignore makeindex's style files!)
# *.ist
# gnuplottex
*-gnuplottex-*
# gregoriotex
*.gaux
*.gtex
# htlatex
*.4ct
*.4tc
*.idv
*.lg
*.trc
*.xref
# hyperref
*.brf
# knitr
*-concordance.tex
# TODO Comment the next line if you want to keep your tikz graphics files
*.tikz
*-tikzDictionary
# listings
*.lol
# luatexja-ruby
*.ltjruby
# makeidx
*.idx
*.ilg
*.ind
# minitoc
*.maf
*.mlf
*.mlt
*.mtc
*.mtc[0-9]*
*.slf[0-9]*
*.slt[0-9]*
*.stc[0-9]*
# minted
_minted*
*.pyg
# morewrites
*.mw
# nomencl
*.nlg
*.nlo
*.nls
# pax
*.pax
# pdfpcnotes
*.pdfpc
# sagetex
*.sagetex.sage
*.sagetex.py
*.sagetex.scmd
# scrwfile
*.wrt
# sympy
*.sout
*.sympy
sympy-plots-for-*.tex/
# pdfcomment
*.upa
*.upb
# pythontex
*.pytxcode
pythontex-files-*/
# tcolorbox
*.listing
# thmtools
*.loe
# TikZ & PGF
*.dpth
*.md5
*.auxlock
# todonotes
*.tdo
# vhistory
*.hst
*.ver
# easy-todo
*.lod
# xcolor
*.xcp
# xmpincl
*.xmpi
# xindy
*.xdy
# xypic precompiled matrices and outlines
*.xyc
*.xyd
# endfloat
*.ttt
*.fff
# Latexian
TSWLatexianTemp*
## Editors:
# WinEdt
*.bak
*.sav
# Texpad
.texpadtmp
# LyX
*.lyx~
# Kile
*.backup
# gummi
.*.swp
# KBibTeX
*~[0-9]*
# TeXnicCenter
*.tps
# auto folder when using emacs and auctex
./auto/*
*.el
# expex forward references with \gathertags
*-tags.tex
# standalone packages
*.sta
# Makeindex log files
*.lpz
# REVTeX puts footnotes in the bibliography by default, unless the nofootinbib
# option is specified. Footnotes are the stored in a file with suffix Notes.bib.
# Uncomment the next line to have this generated file ignored.
#*Notes.bib
### LaTeX Patch ###
# LIPIcs / OASIcs
*.vtc
# glossaries
*.glstex
### Linux ###
*~
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
### macOS ###
# General
.DS_Store
.AppleDouble
.LSOverride
# Icon must end with two \r
Icon
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk
### SublimeText ###
# Cache files for Sublime Text
*.tmlanguage.cache
*.tmPreferences.cache
*.stTheme.cache
# Workspace files are user-specific
*.sublime-workspace
# Project files should be checked into the repository, unless a significant
# proportion of contributors will probably not be using Sublime Text
# *.sublime-project
# SFTP configuration file
sftp-config.json
# Package control specific files
Package Control.last-run
Package Control.ca-list
Package Control.ca-bundle
Package Control.system-ca-bundle
Package Control.cache/
Package Control.ca-certs/
Package Control.merged-ca-bundle
Package Control.user-ca-bundle
oscrypto-ca-bundle.crt
bh_unicode_properties.cache
# Sublime-github package stores a github token in this file
# https://packagecontrol.io/packages/sublime-github
GitHub.sublime-settings
### VisualStudioCode ###
.vscode/*
!.vscode/tasks.json
!.vscode/launch.json
*.code-workspace
### VisualStudioCode Patch ###
# Ignore all local history of files
.history
.ionide
### Windows ###
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
# End of https://www.toptal.com/developers/gitignore/api/windows,linux,macos,visualstudiocode,sublimetext,latex
# Ignore compiled pdf documents (I don't have any .pdf graphics)
*.pdf
# Ignore latexindent backups
*.bak*
# Ignore tcblistof output
*.listings
**/.aux
**/.out
**/svg-inkscape
+68
View File
@@ -0,0 +1,68 @@
$pdf_mode = 4;
$lualatex =
q{lualatex -shell-escape -interaction=nonstopmode %O %S 2>&1 | perl -pe 's/(^!.*)/\e[1;31m$1\e[0m/; s/([Ww]arning)/\e[1;33m$1\e[0m/'};
$out_dir = ".out";
$aux_dir = ".aux";
$bibtex = "biber %O %S";
$pdf_previewer = "zathura %O %S";
# Color output: https://tex.stackexchange.com/questions/617572/is-it-possible-to-make-latexmk-ouput-with-color
{
no warnings 'redefine';
use Term::ANSIColor;
my $old_warn_running = \&main::warn_running;
sub color_warn_running {
print STDERR color('green');
$old_warn_running->(@_);
print STDERR color('reset');
}
my $old_failure = \&main::failure;
sub color_failure {
print STDERR color('bold red');
$old_failure->(@_);
print STDERR color('reset');
}
my $old_failure_msg = \&main::failure_msg;
sub color_failure_msg {
print STDERR color('bold red');
$old_failure_msg->(@_);
print STDERR color('reset');
}
if ( -t STDERR ) {
*main::warn_running = \&color_warn_running;
*main::failure = \&color_failure;
*main::failure_msg = \&color_failure_msg;
}
}
# https://tex.stackexchange.com/questions/1226/how-to-make-latexmk-use-makeglossaries
add_cus_dep( 'glo', 'gls', 0, 'run_makeglossaries' );
add_cus_dep( 'acn', 'acr', 0, 'run_makeglossaries' );
sub run_makeglossaries {
my ( $base_name, $path ) =
fileparse( $_[0] ); #handle -outdir param by splitting path and file, ...
pushd $path; # ... cd-ing into folder first, then running makeglossaries ...
if ($silent) {
system "makeglossaries -q '$base_name'"; #unix
# system "makeglossaries", "-q", "$base_name"; #windows
}
else {
system "makeglossaries '$base_name'"; #unix
# system "makeglossaries", "$base_name"; #windows
}
popd; # ... and cd-ing back again
}
push @generated_exts, 'glo', 'gls', 'glg';
push @generated_exts, 'acn', 'acr', 'alg';
$clean_ext .= ' %R.ist %R.xdy';
+10 -10
View File
@@ -1,18 +1,18 @@
LATEXMK := "latexmk -pdflatex=lualatex -pdf -shell-escape -interaction=nonstopmode"
LATEXMK := "latexmk -pvc"
build:
#!/usr/bin/env bash
ROOT="$PWD"
FILE=$(find . -type f \( -path './chapters/*' -name '*.tex' ! -name 'template.tex' \) -o -name 'thesis.tex' | sed 's|^\./||' | sort | fzf)
DIR=$(dirname "$FILE")
BASE=$(basename "$FILE" .tex)
kitty -e sh -c "cd '$DIR' && {{ LATEXMK }} -outdir=build -pvc -view=none '$BASE.tex'" > /dev/null 2>&1 &
while [ ! -f "$DIR/build/$BASE.pdf" ]; do sleep 0.5; done
if command -v inotifywait > /dev/null; then
inotifywait -qq -e close_write "$DIR/build/$BASE.pdf"
else
sleep 2
fi
zathura "$DIR/build/$BASE.pdf" > /dev/null 2>&1 &
kitty -e sh -c "cd '$DIR' && BIBINPUTS='$ROOT:' {{ LATEXMK }} -r '$ROOT/.latexmkrc' '$BASE.tex'" > /dev/null 2>&1 &
clean:
find . -type d \( -name build -o -name svg-inkscape \) -exec rm -rf {} +
find . -type d \( -name build -o -name svg-inkscape -o -name .aux -o -name .out \) -exec rm -rf {} +
format:
lualatex -ini -jobname=thesis "&lualatex" mylatexformat.ltx thesis.tex
clean-format:
rm thesis.fmt thesis.log thesis.tex.bbl thesis.tex.blg
-17
View File
@@ -1,17 +0,0 @@
%! TeX program = lualatex
\documentclass[../../thesis.tex]{subfiles}
\begin{document}
\chapter*{Abstract}\label{ch:abstract}
\addcontentsline{toc}{chapter}{\nameref{ch:abstract}}
As semiconductor node sizes shrink, transient hardware faults pose a growing risk to computing systems, especially in environments where reliability is critical.
\Gls{wasm}, a binary-code format developed for the web, is increasingly used in embedded systems through standalone runtimes such as the \Gls{wamr}.
This thesis investigates \Gls{wamr}'s compatibility with hardening techniques for transient hardware faults through systematic single-bit fault injection on a simulated IA-32 CPU using the \Gls{fail} fault-injection framework.
The interpreter and \Gls{aot} execution modes of \Gls{wamr} are compared under fault conditions and software-based hardening techniques are evaluated at two levels: (I) the language/application level, by hardening source programs before compilation to Wasm, and (II) the runtime level, by hardening \Gls{wamr} itself.
\todo[inline]{Copied from proposal}
\end{document}
@@ -0,0 +1,90 @@
%! TeX program = lualatex
%! TeX root = ../../thesis.tex
\documentclass[../../thesis.tex]{subfiles}
\begin{document}
\chapter{Introduction}\label{ch:introduction}
As semiconductor node sizes shrink, transient hardware faults pose a growing risk to computing systems, especially in environments where reliability is critical.
\Gls{wasm}, a binary code format developed for the web, is increasingly used in embedded systems through standalone runtimes such as the \Gls{wamr}~\autocite{wamr}.
This thesis investigates \Gls{wamr}'s compatibility with hardening techniques for transient hardware faults through systematic single-bit fault injection on a simulated IA-32 CPU using the \Gls{fail} \gls{fi} framework.
The interpreter and \gls{aot} execution modes of \Gls{wamr} are compared under fault conditions and software-based hardening techniques are evaluated at two levels: (I) the language/application level, by hardening source programs before compilation to \Gls{wasm}, and (II) the runtime level, by hardening \Gls{wamr} itself.
\todo[inline]{Abstract from expose, needs to be rewritten}
Transient hardware faults can manifest in different types of errors such as \glspl{sdc} or \glspl{due}.
This work focuses on \glspl{sdc} specifically as they can propagate silently through subsequent data-/program-flow without causing detectable system failures, thus producing trusted but incorrect results.
As \Gls{wasm} is adopted beyond the web, the resilience of \Gls{wasm} runtimes against these types of failures becomes a relevant question.
\Gls{wamr}~\autocite{wamr} is designed for lightweight standalone execution of \Gls{wasm} modules.
It supports interpretation (with and without \gls{jit} compilation) and \gls{aot} compilation, trading memory footprint and portability for performance.
Besides platform independence, the \Gls{wasm} specification mandates additional safety features such as memory-isolated program execution and bounds-checked memory access.
This raises the question of how fault resilience compares between executing a (hardened) program natively or introducing \Gls{wamr} as an additional abstraction layer to the execution environment.
To answer these questions, this thesis uses the \Gls{fail} \gls{fi} framework~\autocite{schirmeierFAILVersatileFaultInjection2012} that allows injecting bit-level faults into a simulated CPU using the Bochs IA-32 emulator.
\Gls{fail} is able to exhaustively cover the fault-space of possible bit flips by applying fault-similarity pruning to reduce the size of the fault-space and smart-hopping to accelerate single experiment simulations~\autocite{schirmeierEfficientFaultInjectionbasedAssessment}.
To mitigate \Glspl{sdc}, software-based fault tolerance techniques are evaluated.
\Glspl{anbcode}~\autocite{forinVitalCodedMicroprocessor1990} are a method of encoding and verifying data- and program-flow integrity during execution.
\Gls{replication}~\autocite{polednaReplicaDeterminismDistributed1994} improves fault resilience by executing multiple independent copies of computations and using majority voting to detect or correct errors.
Both techniques can be applied either at the application level, by hardening the program before compilation to \Gls{wasm}, or at the runtime level, by hardening \Gls{wamr} itself to transparently improve fault resilience.
The central objective is to analyze the effects of transient faults on \Gls{wamr} and assess the effectiveness of hardening techniques across execution modes.
\todo[inline]{Introduction from expose, needs to be rewritten}
\section{Research Questions}
\paragraph{How do transient hardware faults affect the correctness of programs executed in \Gls{wamr} in comparison to native execution?}
\Gls{wamr} provides additional abstractions and safety features over native execution but brings increased complexity and a larger memory footprint.
This question evaluates how these differences affect the rate of silent data corruption and if the increased fault surface outweighs the safety gains.
The analysis distinguishes different experiment results such as correct execution, \gls{sdc} and \gls{due} to characterize the impact of \Gls{wamr} on system behavior under fault.
Additionally, the distribution of faults is examined to determine particularly vulnerable code paths in \Gls{wamr}.
\paragraph{How does the resilience of \Gls{wamr} differ between interpreter mode and \gls{aot} execution mode?}
\Gls{wamr} supports both \gls{aot} compilation and interpreted execution of \Gls{wasm} modules.
\Gls{aot} mode executes a \Gls{wasm} module pre-compiled to native code.
\Gls{wamr} sets up an execution environment that provides \Gls{wasm}-specific benefits such as isolated execution or checked memory access before jumping into native code.
In contrast, interpreter mode executes \Gls{wasm} bytecode directly using one of \Gls{wamr}'s interpreter implementations.
This question compares both modes under identical \gls{fi} campaigns to determine if the interpreters' additional runtime checks and safety mechanisms provide a more resilient execution environment than \gls{aot} mode.
\paragraph{To what extent can source program hardening techniques applied to the source code reduce \gls{sdc}?}
This question evaluates application-level hardening such as software \gls{replication} and \glspl{anbcode} before compilation to \Gls{wasm}.
Techniques include the \Gls{cored}~\autocite{ulbrichEliminatingSinglePoints2012} approach, where programs are executed repeatedly before masking errors using the \glsdisp{anbcode}{ANB-coded} majority voter.
The effectiveness of the tested methods is measured in terms of \gls{sdc} reduction in comparison to the non-hardened variants.
Further considerations include the difference between detectable and correctable errors and the possibility of combining different hardening techniques.
\paragraph{To what extent can the intermediate \Gls{wasm} program be hardened to reduce \gls{sdc}?}
Instead of hardening the source program by modifying its source code, hardening techniques can be applied to the intermediate \Gls{wasm} bytecode representation.
This allows exploiting properties of the source program that are not accessible in its source representation, such as \Gls{wasm}'s operand stack or its restricted control flow.
The bytecode level also allows a more fine-grained approach to methods like software-based replication, as individual instructions can be replicated.
\paragraph{How effectively can hardening techniques be applied directly to the WAMR runtime's interpreter execution mode?}
In contrast to application-level hardening, this question investigates modifying the \Gls{wamr} runtime itself to improve reliability.
This could offer advantages since it eliminates the need to harden each program on the application level individually, but could be unfeasible to implement or introduce high performance penalties.
Key components of the interpreter loop, such as the opcode dispatch mechanism or arithmetic operations, could be hardened.
Additionally, other critical runtime components that contribute disproportionately to fault propagation are to be identified.
The evaluation focuses on the feasibility of hardening the \Gls{wamr} runtime, its impact on \gls{sdc} rates, and its runtime cost.
\paragraph{How effectively can hardening techniques be applied directly to the WAMR runtime's ahead-of-time execution mode?}
To implement the safety features required by the \Gls{wasm} specification, \gls{wamr}'s \gls{aot} compiler (\textquote{\gls{wamrc}}) instruments the resulting native code with \textquote{glue}-code, for example to guard memory accesses or implement function lookups.
Since transparently hardening \gls{aot} execution by modifying the compiler itself is out of scope for this thesis, this glue-code could be targeted instead.
The hardening potential of this approach is compared to the hardening of the interpreter execution mode in the previous research question.
\paragraph{How do the runtime overheads of application- and runtime-level hardening compare?}
Fault tolerance mechanisms introduce computational overhead, which is especially important in resource-constrained environments.
This question compares the performance impact of application-level and runtime-level hardening to determine trade-offs between resilience and efficiency.
Performance is evaluated in the context of embedded/resource-restrained systems, where constraints might limit the ability to use certain hardening strategies.
\todo[inline]{Taken from expose for reference}
\end{document}
@@ -0,0 +1,13 @@
%! TeX program = lualatex
%! TeX root = ../../thesis.tex
\documentclass[../../thesis.tex]{subfiles}
\begin{document}
\chapter{Related Work}\label{ch:relatedwork}
Related work is for similar work (e.g., Wasm with software-based mitigation).
In a wider sense also hardening papers for e.g., Python could be considered.
\end{document}
@@ -0,0 +1,11 @@
%! TeX program = lualatex
%! TeX root = ../../thesis.tex
\documentclass[../../thesis.tex]{subfiles}
\begin{document}
\chapter{Methodology}\label{ch:methodology}
Specific FARM-model variant for this research questions, fault model.
\end{document}
@@ -1,8 +0,0 @@
%! TeX program = lualatex
\documentclass[../../thesis.tex]{subfiles}
\begin{document}
\chapter{Related Work}\label{ch:relatedwork}
\end{document}
@@ -1,8 +1,9 @@
%! TeX program = lualatex
%! TeX root = ../../thesis.tex
\documentclass[../../thesis.tex]{subfiles}
\begin{document}
\chapter{Introduction}\label{ch:introduction}
\chapter{Background}\label{ch:background}
\end{document}
+51
View File
@@ -0,0 +1,51 @@
%! TeX program = lualatex
%! TeX root = ../../thesis.tex
\documentclass[../../thesis.tex]{subfiles}
\begin{document}
\section{WebAssembly}\label{sec:wasm}
The open \Acrfull{wasm} standard defines a portable virtual instruction set architecture, binary code format and text format for execution inside a virtual (stack) machine~\autocite{wasm3spec}.
\Gls{wasm} instructions operate on an operand stack instead of registers: values are pushed and consumed through stack operations, similar to Java's virtual machine.
It is developed and maintained by the World Wide Web Consortium (W3C)\iffalse{}\footnote{\url[2026-07-01]{https://w3.org/}}\fi to support high-performance applications in web-based environments.
While the initial implementations of \Gls{wasm} runtime environments were confined to web browsers\footnote{In 2016, experimental \Gls{wasm} runtimes were implemented in Firefox, Google Chrome and Microsoft Edge: \url[2026-07-01]{https://hacks.mozilla.org/2016/03/a-webassembly-milestone/}}, \Gls{wasm} does not make any web-specific assumptions, so many different standalone runtimes like \textquote{Wasmtime}\footnote{\url[2026-07-01]{https://github.com/bytecodealliance/wasmtime/}} or the \Acrfull{wamr} (see \autoref{sec:wamr}) have emerged since.
Besides instructions or execution behavior, two file formats are defined by the \Gls{wasm} standard: the \Gls{wasm} \textquote{Binary Format} \iffalse{}(see \autoref{lst:wasmexample})\fi for space-efficient representation and fast transmission, and the Lisp-like \Gls{wasm} \textquote{Text Format} for human readability (see \autoref{lst:watexample}).
Both formats are equivalent, they represent the same underlying content differently for alternate purposes.
% \begin{codeblock}[label=lst:wasmexample]{\Gls{wasm} Binary Format}{.wasm}
% \inputminted{hex}{\subfix{listings/wat_example.hex}}
% \end{codeblock}
\begin{codeblock}[label=lst:watexample]{\Gls{wasm} Text Format}{.wat}
\inputminted{wat}{\subfix{listings/wat_example.wat}}
\end{codeblock}
% TODO: Info on wat (module, type, func, memory, global, export)
\autoref{lst:watexample} shows a minimal \Gls{wasm} module in text format.
The \code{module} declaration groups all definitions of the compilation unit.
A \code{type} declares the shared function signature, the \code{func} then references this type and provides its implementation.
The module uses two pages of \code{memory} and defines the stack pointer as a mutable \code{global}.
At the end, the \textquote{memory} and \textquote{main} function are exported, so the host environment can invoke the module and access its state.
Not visible in the above example are \code{import} statements, which allow the \Gls{wasm} program to access functions, variables or memory from the host environment.
In a typical workflow, a program written in a high-level language like C or Rust gets compiled to the \Gls{wasm} binary format using an LLVM-based toolchain, the binary is then executed in a web-based or standalone runtime environment.
The binaries mainly consist of \textit{values}, \textit{instructions}, \textit{functions} and \textit{memory}, bundled into \textit{modules}. % TODO: This is already visible in the watexample...
To execute a program, the module is loaded from its binary format representation, \textit{decoded}, \textit{validated}, \textit{instantiated} and lastly, \textit{invoked}.
During runtime, \Gls{wasm} provides memory safety, control flow integrity and independent execution (sandboxing)\footnote{\url[2026-07-01]{https://webassembly.org/docs/security/}}.
Memory safety is achieved through a bounds-checked linear memory with an inaccessible call stack\footnote{The call stack is not part of \Gls{wasm}'s linear memory but the execution environment: \url[2026-07-01]{https://bytecodealliance.github.io/wamr.dev/blog/the-wamr-memory-model/}}, preventing arbitrary memory accesses and buffer overflows.
The linear memory is a contiguous and growable byte array that is shared between the module and host.
Control flow integrity stems from structured control flow: branches target verifiable positions and function calls are index-based and verified against the function table\iffalse{}\footnote{\url[2026-07-01]{https://clang.llvm.org/docs/ControlFlowIntegrity.html}}\fi.
Additionally, the running program cannot observe its (immutable) source code to prevent control flow hijacking.
Sandboxing is enforced by isolating each module's state: a module can only interact with the outside world through explicitly imported functions and resources provided by its host runtime.
Its safety features, portability, language/hardware independence and well-definedness make \Gls{wasm} an interesting platform even for resource-constrained and security-critical systems.
% \subsection{\Glsdesc*{wasm} Binary Format}\label{ssec:wasmbinaryformat}
% \subsection{\Glsdesc*{wasm} Text Format}\label{ssec:wasmtextformat}
% \subsection{\Glsdesc*{wasm} Memories}\label{ssec:wasmmemories}
% \subsection{\Glsdesc*{wasm} Control Flow}\label{ssec:wasmcontrolflow}
\end{document}
+29
View File
@@ -0,0 +1,29 @@
%! TeX program = lualatex
%! TeX root = ../../thesis.tex
\documentclass[../../thesis.tex]{subfiles}
\begin{document}
\section{WebAssembly Micro Runtime}\label{sec:wamr}
\Acrfull{wamr}~\autocite{wamr} is a lightweight standalone \Gls{wasm} runtime by the \textquote{Bytecode Alliance}\iffalse{}\footnote{\url[2026-07-02]{https://bytecodealliance.org/}}\fi, designed for embedded devices.
\Gls{wamr} includes three main components: The runtime libraries required to load and execute \Gls{wasm} modules (the decode, validate, instantiate, invoke process mentioned in \autoref{sec:wasm}) are called \textquote{\Gls{vmcore}}.
\Gls{vmcore} can be embedded in C/C++ host applications.
A standalone version of \Gls{vmcore} is provided by the \textquote{\gls{iwasm}} program.
It acts as the host application and allows running \code{.wasm} files directly from the command-line.
The last component is \textquote{\gls{wamrc}}, a compiler transforming \code{.wasm} to \Gls{aot} compiled native code, necessary when not using one of \Gls{wamr}'s interpreter implementations.
\Gls{wasm} modules can be executed in five different running modes using \Gls{vmcore}\footnote{\url[2026-07-01]{https://bytecodealliance.github.io/wamr.dev/blog/introduction-to-wamr-running-modes/}}:
\begin{itemize}
\item \sansbf{\Gls{aot}} mode sacrifices platform-independence for performance and runtime size efficiency. The \Gls{wasm} module is compiled to platform-native code with \Gls{wasm}-specific scaffolding to retain \Gls{wasm}'s security features.
\item \sansbf{Classic Interpreter} is \Gls{wamr}'s slow reference implementation of a \Gls{wasm} interpreter, mainly targeted towards debugging purposes.
\item \sansbf{Fast Interpreter} provides a speed boost over the classic interpreter by using a custom internal intermediate representation of \Gls{wasm} opcodes.
\item \sansbf{LLVM \Gls{jit}} achieves the highest performance (excluding \Gls{aot} mode) by utilizing the LLVM framework for compilation.
\item \sansbf{Fast \Gls{jit}} improves startup time over the LLVM \Gls{jit} by utilizing a lighweight compiler instead of LLVM, but trades some runtime performance.
\end{itemize}
In \Gls{aot} mode the \Gls{wasm} module is invoked by jumping into its native code, the interpreted modes follow a traditional opcode fetch, decode, execute loop.
Of those five modes, this thesis is concerned with \Gls{aot} mode and the classic interpreter for analyzability reasons: \Gls{aot} mode is most similar to native execution without the additional \Gls{wasm} layer. The classic interpreter allows a simpler understanding of fault effects than the fast interpreter or \Glspl{jit} as no different code representations are involved.
\end{document}
+56
View File
@@ -0,0 +1,56 @@
%! TeX program = lualatex
%! TeX root = ../../thesis.tex
\documentclass[../../thesis.tex]{subfiles}
\begin{document}
\section{Fault-Injection Leveraged}\label{sec:fail}
\Gls{fail}~\autocite{schirmeierFAILOpenVersatile2015} is an emulation-based vulnerability analysis tool.
It provides a toolset to perform \gls{fi} experiments to analyze the vulnerability of software to transient hardware faults.
In contrast to other \gls{fi} tools\todo{give examples}, \Gls{fail} enables deep simulator state access while simultaneously supporting multiple simulator backends, like BOCHS\footnote{\url[2026-07-07]{https://bochs.sourceforge.io/}} or gem5\footnote{\url[2026-07-02]{https://www.gem5.org/}}.
\Gls{fail} is split into different components: A \textit{campaign} consists of multiple \gls{fi} \textit{experiments}, where each experiment injects a single fault.
The \textit{campaign controller} distributes those experiments to running \Gls{fail} instances.
Campaigns can be parallelized by running multiple instances on different systems or cores.
Each experiment utilizes \Gls{fail}'s \textit{simulator abstraction layer} to control the target backend, to fast-forward the target to the desired state and inject a fault.
This abstraction layer allows switching out backends to support different target platforms.
To perform a vulnerability analysis, the examined program needs to be instrumented with fences that define the region to trace (see \autoref{lst:tracefencemarkers}).
\begin{codeblock}[label=lst:tracefencemarkers]{Trace Region Fence}{.cpp}
\inputminted{cpp}{\subfix{listings/tracefence.cpp}}
\end{codeblock}
\Gls{fail} then records the instruction pointer changes and memory accesses inside this region during the so-called \textquote{golden run}: a faultless execution of the program that determines which injections should be performed during the campaign.
Then, the golden run is enriched with the traced region's disassembly to take into account the read and written registers.
The last step before campaign execution is the \textit{prune} step, where the collected data is translated into corresponding experiments.
Different data points from the trace that result in the same \textquote{fault-similarity class} (as used by Schirmeier~\autocite{schirmeierEfficientFaultInjectionbasedAssessment}) are removed from the campaign.
Two experiments belong to the same similarity class if the \textit{relevant} parts of their resulting simulator state are identical.
From the pruned instruction pointer changes, memory accesses, and register accesses \Gls{fail} constructs a number of \textit{pilots}: representatives of the existing fault-similarity classes.
Each pilot then corresponds to a single experiment.
\Gls{fail}'s campaigns are event-driven: the user specifies conditions, for example an access to a certain memory region.
Once a condition is reached, a user-defined action is performed, like injecting a fault or registering a certain experiment outcome.
Users do not have to write every campaign from scratch, as \Gls{fail} includes a \textquote{generic experiment} which can be used as a starting point.
The generic experiment performs three types of fault injections by default:
\begin{itemize}
\item \sansbf{Memory} injections: Before the program reads from a memory address, a fault is injected.
\item \sansbf{Register} injections: Before the program reads from a register, a fault is injected.
\item \sansbf{Instruction Pointer} injections: The instruction pointer's value is randomized to disturb the program flow and introduce random jumps.
\end{itemize}
Furthermore, different experiment outcomes are classified:
\begin{itemize}
\item \sansbf{Trap}: The injected fault caused the simulated CPU to throw an exception.
\item \sansbf{Timeout}: The injected fault caused the program to stall.
\item \sansbf{Ok Marker} (\code{fail\_marker\_positive()}): The program executed correctly even with the injected fault.
\item \sansbf{Detected Marker} (\code{fail\_marker\_detected()}): The injected fault was detected by the program.
\item \sansbf{Fail Marker} (\code{fail\_marker\_negative()}): The injected fault was not detected by the program.
\item \sansbf{Access Outerspace}: Caught if the program reads or writes anywhere outside valid ELF addresses.
\item \sansbf{Write Textsegment}: Caught if the program writes to addresses inside the \code{.text} section of the program.
\end{itemize}
Ok/Detected/Fail outcomes are classified by instrumenting the tested code with \textquote{markers} (see \autoref{lst:classificationmarkers}).
If the program execution passes a marker, the experiment outcome is classified accordingly.
\begin{codeblock}[label=lst:classificationmarkers]{Classification Markers}{.cpp}
\inputminted{cpp}{\subfix{listings/classificationmarkers.cpp}}
\end{codeblock}
\end{document}
@@ -0,0 +1,6 @@
// Continuation of previous example
if (sum == 100) {
fail_marker_positive();
} else {
fail_marker_negative();
}
@@ -0,0 +1,8 @@
fail_start_trace();
int sum = 0;
for (int i = 0; i < 100; ++i) {
++sum;
}
fail_stop_trace();
@@ -0,0 +1,5 @@
0000000 6100 6d73 0001 0000 0501 6001 0100 037f
0000010 0102 0500 0103 0200 0806 7f01 4101 8880
0000020 0b04 1107 0602 656d 6f6d 7972 0002 6d04
0000030 6961 006e 0a00 0106 0004 2a41 000b
000003d
Binary file not shown.
@@ -0,0 +1,8 @@
(module $wat_example.wasm
(type (;0;) (func (result i32)))
(func $main (type 0) (result i32)
i32.const 42)
(memory (;0;) 2)
(global $__stack_pointer (mut i32) (i32.const 66560))
(export "memory" (memory 0))
(export "main" (func $main)))
@@ -1,8 +0,0 @@
%! TeX program = lualatex
\documentclass[../../thesis.tex]{subfiles}
\begin{document}
\chapter{Experiment Design}\label{ch:experimentdesign}
\end{document}
@@ -1,11 +1,64 @@
%! TeX program = lualatex
%! TeX root = ../../thesis.tex
\documentclass[../../thesis.tex]{subfiles}
\begin{document}
\chapter{Experiment Setup}\label{ch:experimentsetup}
\subfile{04_01_wamr_baremetal.tex}
\subfile{04_02_wasm_host_program.tex}
\section{Execution Environment}
\begin{itemize}
\item Baremetal execution in BOCHS
\end{itemize}
\section{\Gls{wamr} Modifications}\label{sec:wamrmodifications}
\begin{itemize}
\item Cross-compiler issues
\item Which platform functions?
\item WAMR exception handler marker?
\end{itemize}
\section{Wasm Host Program}
\begin{itemize}
\item WAMR setup
\item WAMR memory allocators
\item Calling \code{FAIL\_MARKER}s (native functions)
\end{itemize}
\section{Experiment Types}
\begin{itemize}
\item C only
\item WAMR AOT
\item WAMR interpreter
\end{itemize}
\section{Controlling What Gets Injected/Memory Isolation}
\begin{itemize}
\item --catch-write-textsegment (does NOT prevent injections into the textsegment!)
\item --catch-outerspace
\end{itemize}
\section{Missing FAIL\_MARKERs for AOT experiments}
\begin{itemize}
\item AOT Addressauflösung/Def-Use chain theory
\item Somehow caught by --catch-write-textsegment or --catch-outerspace because stuff was linked to .text?
\item Optimization theory
\begin{itemize}
\item Does the target program contain the expected instructions?
\item Does FAIL* treat the variables as not live? (volatile, fail\_stop\_trace(sum))
\item Trying more complex programs, as -O0 always writes intermediate results to memory
\item Swap fail\_marker\_positive and fail\_marker\_negative
\end{itemize}
\item Does the pruner clear those injections for some reason?
\item Does the disassembler not disassemble the .text subsections?
\item Is the TracingPlugin broken? (GDB -> No, but FAIL* doesn't trace register accesses)
\item Solution: Gap in the .elf symbol space (addresses that are not covered by some symbol). FAIL needs this to disassemble the Wasm AOT code to find the register accesses. FAIL also needs to find this AOT code, so it can't be relocated -> Needs --xip
\end{itemize}
\section{Target Programs}
\begin{itemize}
\item Toy examples
\item TacleBench~\autocite{TACLeBench,seidlerTACLeBenchWasmConverter2026}
\end{itemize}
\end{document}
@@ -1,13 +0,0 @@
%! TeX program = lualatex
\documentclass[../../thesis.tex]{subfiles}
\begin{document}
\section{WAMR Baremetal Platform}\label{sec:wamrbaremetal}
\begin{itemize}
\item Cross-compiler issues
\item Which platform functions?
\end{itemize}
\end{document}
@@ -1,14 +0,0 @@
%! TeX program = lualatex
\documentclass[../../thesis.tex]{subfiles}
\begin{document}
\section{Wasm Host Program}\label{sec:wasmhost}
\begin{itemize}
\item WAMR setup
\item Calling \code{FAIL\_MARKER}s
\item WAMR exception handler marker?
\end{itemize}
\end{document}
+1
View File
@@ -1,4 +1,5 @@
%! TeX program = lualatex
%! TeX root = ../../thesis.tex
\documentclass[../../thesis.tex]{subfiles}
\begin{document}
@@ -1,4 +1,5 @@
%! TeX program = lualatex
%! TeX root = ../../thesis.tex
\documentclass[../../thesis.tex]{subfiles}
\begin{document}
@@ -1,4 +1,5 @@
%! TeX program = lualatex
%! TeX root = ../../thesis.tex
\documentclass[../../thesis.tex]{subfiles}
\begin{document}
+19 -2
View File
@@ -1,18 +1,25 @@
%! TeX program = lualatex
%! TeX root = ../../thesis.tex
\documentclass[../../thesis.tex]{subfiles}
\begin{document}
% \addchap{Examples}\label{ch:examples}
\chapter{Examples}\label{ch:examples}
See if everything works:
\todo[inline]{Sanity check so everything looks correct}
This is \code{inline code}.
This is a reference to \Gls{fail}.
This is another reference to \Gls{fail}.
This is a citation~\autocite{polednaReplicaDeterminismDistributed1994}.
\section{This is a section}\label{sec:examplesection}
This is a reference to \autoref{ch:introduction}.
This is a formula: \( \sum\limits_{f=1}^{\infty}\frac{o}{r}\cdot m_{u} + l^{a} \).
This is \textbf{bold text that is slightly bold}, so underwhelming.
In contrast, \sansbf{this text is very strong}, very cool\footnote{very cool}.
\begin{codeblock}[label=lst:examplelisting]{This is a listing}{C++}
\inputminted{cpp}{\subfix{listings/example.cpp}}
@@ -20,10 +27,20 @@ This is a formula: \( \sum\limits_{f=1}^{\infty}\frac{o}{r}\cdot m_{u} + l^{a} \
\begin{figure}[H]
\centering
\begin{subfigure}[b]{0.55\textwidth}
\begin{subfigure}[b]{0.85\textwidth}
\includesvg[width=1.0\linewidth]{\subfix{figures/example.svg}}
\end{subfigure}
\caption{This is a figure.}\label{fig:examplefigure}
\end{figure}
\begin{figure}[H]
\centering
\begin{subfigure}[b]{0.95\textwidth}
\includesvg[width=1.0\linewidth]{\subfix{figures/heatmap2.svg}}
\end{subfigure}
\caption{This is another figure.}\label{fig:exampleheatmap}
\end{figure}
\lipsum%
\end{document}
File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 610 KiB

+1
View File
@@ -1,4 +1,5 @@
%! TeX program = lualatex
%! TeX root = ../../thesis.tex
\documentclass[../../thesis.tex]{subfiles}
\begin{document}
BIN
View File
Binary file not shown.
Binary file not shown.
Binary file not shown.
+55 -12
View File
@@ -6,12 +6,20 @@
% Acronyms
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \newacronym{acpi}{ACPI}{Advanced Configuration and Power Interface}
% \newacronym[
% text={text in the glossary (uses text in the document if omitted)},
% plural={plural text in the document (uses text if omitted)},
% description={description in the glossary (uses description in the document if omitted)},
% ]{key}{text in the document}{description in the document}
\newacronym{aot}{AoT}{Ahead-of-Time}
\newacronym{fi}{FI}{Fault Injection}
\newacronym{fail}{FAIL*}{Fault Injection Leveraged}
\newacronym{sdc}{SDC}{Silent Data Corruption}
\newacronym[description={Ahead-of-Time Compilation}]{aot}{AOT}{ahead-of-time}
% \newacronym[description={Classic Interpreter}]{cint}{CI}{classic interpreter}
\newacronym{fail}{FAIL*}{Fault-Injection Leveraged}
\newacronym[description={Fault-Injection}]{fi}{FI}{fault-injection}
% \newacronym[description={Fast Interpreter}]{fint}{FI}{fast interpreter}
\newacronym[description={Detected Unrecoverable Error}]{due}{DUE}{detected unrecoverable error}
\newacronym[description={Just-in-Time Compiler}]{jit}{JIT}{just-in-time}
\newacronym[description={Silent Data Corruption}]{sdc}{SDC}{silent data corruption}
\newacronym{wamr}{WAMR}{WebAssembly Micro Runtime}
\newacronym{wasm}{Wasm}{WebAssembly}
@@ -19,12 +27,47 @@
% Glossary Entries
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% \newglossaryentry{apic timer}{%
% name={APIC Timer},
% description={A hardware timer that can trigger periodic interrupts by using a counter, integrated in the local APIC}
% \newglossaryentry{key}{%
% name={text in the glossary},
% text={text in the document (uses name if omitted)},
% plural={plural text in the document (uses text if omitted)},
% description={description in the glossary},
% }
% \newglossaryentry{fail}{%
% name={FAIL*},
% description={Fault Injection Leveraged, a \Gls{fi} framework}
% }
\newglossaryentry{ancode}{%
name={AN-Code},
text={AN-code},
description={Arithmetic coding scheme protecting against operand errors}
}
\newglossaryentry{anbcode}{%
name={ANB-Code},
text={ANB-code},
description={Arithmetic coding scheme protecting against operand and operator errors}
}
\newglossaryentry{anbdcode}{%
name={ANBD-Code},
text={ANBD-code},
description={Arithmetic coding scheme protecting against operand, operator and operation errors}
}
\newglossaryentry{cored}{%
name={Combined Redundancy},
first={Combined Redundancy (CoRed)},
description={Hardening technique utilizing \Gls{replication} in combination with an \glsdisp{anbcode}{ANB-coded} majority voter},
}
\newglossaryentry{iwasm}{%
name={iWasm},
description={\Gls{wamr}'s standalone binary that provides a command-line interface to load and execute \Gls{wasm} modules using \Gls{vmcore}}
}
\newglossaryentry{replication}{%
name={Replication},
text={replication},
description={Hardening technique utilizing replicated hardware or execution in combination with a majority voter}
}
\newglossaryentry{vmcore}{%
name={VMcore},
description={\Gls{wamr}'s runtime libraries for \Gls{wasm} module loading and execution}
}
\newglossaryentry{wamrc}{%
name={WamrC},
description={\Gls{wamr}'s \gls{aot} compiler for \Gls{wasm}}
}
+133 -93
View File
@@ -1,33 +1,29 @@
% Language
\usepackage[american]{babel}
% \usepackage[T1]{fontenc} % Silbentrennung bei Sonderzeichen
% \usepackage[utf8]{inputenc}
% Layout
\usepackage[left=3.5cm,right=2.5cm,top=2.5cm,bottom=2.5cm]{geometry} % Typical margin
\usepackage{titling}
\usepackage{fancyhdr}
\usepackage{setspace} % Line stretch
% Bibliography
\usepackage[backend=biber,urldate=iso,date=iso,seconds=true]{biblatex}
\usepackage[backend=biber,style=alphabetic,urldate=iso,date=iso,seconds=true]{biblatex}
\setcounter{biburlnumpenalty}{7000} % linebreaks after numbers
\bibliography{references,zotero}
\usepackage[nottoc,notlof,notlot]{tocbibind} % Include bibliography in ToC, nottoc disables the "Contents" entry for the ToC itself
% Figures
\usepackage{graphicx} % Required for inserting images
\usepackage{subcaption} % Mehrere Figuren in einer
\usepackage{float} % [H] floating/positioning von Figuren
\usepackage[bottom]{footmisc} % Bottom not below footnote
% Math
\usepackage{amsmath,amsthm} % Don't load amssymb with concmath-otf
\usepackage{mathtools} % Extension of amsmath
% \usepackage{upgreek} % For non italic greek (vectors/matrices)
\usepackage{unicode-math}
\usepackage{lualatex-math}
\usepackage[font=small,labelfont=bf,labelsep=endash,margin=1cm,hypcap]{caption}
\usepackage[margin=1cm,hypcap]{subcaption} % Mehrere Figuren in einer
\usepackage{floatbytocbasic} % float for komascript
% \usepackage[bottom,multiple]{footmisc} % Bottom not below footnote
\usepackage{flafter}
\usepackage{placeins} % \FloatBarrier to flush floats
% Tables
\usepackage{tabularx}
\usepackage{booktabs}
% \usepackage{tabularx}
% \usepackage{tablefootnote}
% \usepackage{makecell}
% \usepackage{color,colortbl}
@@ -37,30 +33,74 @@
\usepackage{algpseudocode}
\usepackage{xcolor}
\usepackage{tikz}
\usepackage{listings} % For lstinputlisting ChkTeX
\usetikzlibrary{shadings, backgrounds}
\usepackage[minted]{tcolorbox}
\setminted{style=default}
\tcbuselibrary{skins} % breakable
% Math
\usepackage{amsmath,amsthm} % Don't load amssymb with concmath-otf
\usepackage{mathtools} % Extension of amsmath
\mathtoolsset{showonlyrefs}
\usepackage{xpatch}
\makeatletter
\xpretocmd\HyRef@autoref{\noeqref{#2}}{}{} % showonlyrefs mit \autoref
\makeatother
% lua-uni-stage-tables.lua:141: attempt to perform arithmetic on a string value (local 'key')
\csname endofdump\endcsname
\usepackage{unicode-math}
\usepackage{lualatex-math}
% Typography
\usepackage[babel,final,protrusion=true,expansion=true,tracking=false,kerning=false,spacing=false]{microtype}
\usepackage{fontspec}
% \usepackage{fontspec}
\usepackage{concmath-otf}
\setmonofont{MonoLisa Alt}[Scale=MatchLowercase]
% Pagestyle
\KOMAoptions{%
% chapterprefix,
% appendixprefix,
headsepline,
% footsepline,
% cleardoublepage=current, % linenumbers and headers on interleaf pages
% cleardoublepage=plain, % linenumbers on interleaf pages
footnotes=multiple, % TODO: Doesn't work, maybe because of hyperref?
}
% Chapter style
\renewcommand*{\chapterformat}{%
{\huge\mdseries\chapapp~\thechapter\autodot\enskip}%
}
\setkomafont{chapter}{\huge\bfseries}
\renewcommand{\chapterlinesformat}[3]{%
#2{\MakeUppercase{#3}}%
\par\nobreak\vspace{.3\baselineskip}%
\rule{\textwidth}{.5pt}%
}
% Various stuff
\usepackage[page]{appendix} % [toc]
\usepackage{lipsum}
\usepackage[inkscapelatex=false]{svg} % Don't touch fonts
\usepackage{comment}
% \usepackage{comment}
\usepackage{pdfpages}
\usepackage{luatodonotes}
\usepackage[minNoteWidth=1.0cm]{luatodonotes}
\usepackage{siunitx}
\sisetup{detect-all}
\usepackage[l2tabu,orthodox]{nag}
\usepackage{etoolbox} % For \ifstrequal
\usepackage[autostyle]{csquotes} % Correct quotation marks with \textquote{}
\usepackage{silence} % Silence warnings
\usepackage[intoc]{nomencl} % Nomenclature
\usepackage[luatex,hidelinks]{hyperref} % Load late
\usepackage[acronym,automake,nonumberlist,nogroupskip]{glossaries} % Load after hyperref, toc
% \usepackage[intoc]{nomencl} % Nomenclature
\usepackage[luatex,colorlinks]{hyperref} % Load late, hidelinks
\usepackage{bookmark} % Needed for hyperref with scrbook
\usepackage[acronym,automake=immediate,nonumberlist,nogroupskip,toc]{glossaries} % Load after hyperref, toc
\setacronymstyle{long-short}
\setglossarystyle{super}
\renewcommand{\glsnamefont}[1]{\sansbf{#1}}
\usepackage{xurl} % xurl does url-line-breaks in contrast to url
% Multi-file
@@ -68,22 +108,18 @@
% Settings
\setstretch{1.25}
\bibliography{references}
\clubpenalty=10000
\widowpenalty=10000
\displaywidowpenalty=10000
% \floatstyle{boxed}
% \restylefloat{figure}
\sisetup{detect-all}
\tcbuselibrary{skins} % breakable
\usetikzlibrary{shadings, backgrounds}
\setlength{\headheight}{14pt}
\mathtoolsset{showonlyrefs}
\usepackage{xpatch}
\makeatletter
\xpretocmd\HyRef@autoref{\noeqref{#2}}{}{} % showonlyrefs mit \autoref
\makeatother
% Allow more (and larger) floats on text pages
\renewcommand{\topfraction}{0.9} % use up to ..% of space on top
\renewcommand{\bottomfraction}{0.8} % use up to ..% of space on bottom
\setcounter{topnumber}{4} % place up to .. on top
\setcounter{bottomnumber}{1} % place up to .. on bottom
\setcounter{totalnumber}{4} % place up to .. total
\renewcommand{\textfraction}{0.07} % allow down to ..% of text
\renewcommand{\floatpagefraction}{0.7} % fill at least ..% of float pages (must be less than \topfraction)
\makeatletter\newcommand{\tcb@cnt@codeblockautorefname}{Listing}\makeatother
@@ -93,23 +129,20 @@
% \WarningFilter{latexfont}{Font shape `TS1/zi4/m/it' undefined}
% \WarningFilter{latexfont}{Some font shapes were not available}
\fancypagestyle{plain}{%
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
\fancyfoot[RO,LE]{\thepage}
}
\fancypagestyle{report}{%
\fancyhf{}
\renewcommand{\headrulewidth}{0.4pt}
\fancyfoot[RO,LE]{\thepage}
\fancyhead[LO,RE]{\slshape \leftmark\/}
}
% Macros
\let\oldurl\url%
\let\url\undefined%
\newcommand{\url}[2][\PackageError{Thesis}{URL requires 2 arguments: \url[date]{address}, e.g.\ \url[07/27/2024]{https://github.com}}{}]{\oldurl{#2} (visited on #1)}
\newcommand{\url}[2][\PackageError{Thesis}{URL requires 2 arguments: \url[date]{address}, e.g.\ \url[2024-07-27]{https://github.com}}{}]{\oldurl{#2} (visited on #1)}
\let\oldref\ref%
\let\ref\undefined%
\newcommand{\ref}[1]{\PackageError{Thesis}{REF:\ Use \autoref{label} instead}{}}
\let\oldcite\cite%
\let\cite\undefined%
\newcommand{\cite}[1]{\PackageError{Thesis}{CITE:\ Use \autocite{ref} instead}{}}
\newcommand{\sansbf}[1]{{\usekomafont{disposition}#1}}
\renewcommand{\author}[1]{\gdef\theauthor{#1}}
\renewcommand{\title}[1]{\gdef\thetitle{#1}}
@@ -124,6 +157,9 @@
\newcommand{\advisors}[1]{\gdef\theadvisors{#1}}
\newcommand{\dean}[1]{\gdef\thedean{#1}}
% Hyphenation
\hyphenation{Web-Assembly}
% Default start and end for each subfile (the main.tex is also a subfile!)
\AtBeginDocument{%
% Capitalize all the section names (has to be placed after \begin{document})
@@ -148,71 +184,75 @@
pdfcreator={LuaLaTeX}
}
% Macros
% \renewcommand{\ref}[1]{\autoref{#1}}
\let\oldref\ref%
\let\ref\undefined%
\newcommand{\ref}[1]{\PackageError{Thesis}{REF:\ Use \autoref{label} instead}{}}
% Only compile title/glossaries/toc with the main document
\ifSubfilesClassLoaded{}{%
\pagestyle{empty}
\pagenumbering{gobble}
\input{titlepage}
\cleardoublepage%
\let\oldcite\cite%
\let\cite\undefined%
\newcommand{\cite}[1][\PackageError{Thesis}{CITE:\ Use \autocite{ref} instead}{}]
\frontmatter%
\pagestyle{plain}
\pagenumbering{Roman}
\tableofcontents%
\cleardoublepage%
% Visualize "overfull-hbox"
\overfullrule=2cm
\phantomsection%
\todototoc\listoftodos%
\cleardoublepage%
% \pagestyle{empty}
% \pagenumbering{gobble}
% Starting pages
\frontmatter%
\input{titlepage}
\cleardoublepage%
% \pagestyle{plain}
% \pagenumbering{Roman}
% \tableofcontents{\thispagestyle{plain}}
\tableofcontents%
\cleardoublepage%
% \pagestyle{report}
\setacronymstyle{short-long}
\printglossary[type=\acronymtype]
\cleardoublepage%
\printglossary%
\printacronyms%
\cleardoublepage%
\printglossary%
\cleardoublepage%
}
\mainmatter%
% \pagenumbering{arabic}
\pagestyle{headings}
\pagenumbering{arabic}
}
\AtEndDocument{
% \pagestyle{empty}
% \pagenumbering{gobble}
\backmatter%
\pagestyle{plain}
\pagenumbering{Roman}
\let\url\undefined%
\let\url\oldurl%
\let\cite\undefined%
\let\cite\oldcite%
% Allow wider inter-word-spacing to prevent overfull hboxes in the bibliography
\sloppy%
\printbibliography[heading=bibintoc]
% \printbibliography%
\fussy%
\cleardoublepage%
\listoffigures%
\cleardoublepage%
% Only compile lists/declaration with the main document
\ifSubfilesClassLoaded{}{%
\phantomsection%
\addcontentsline{toc}{chapter}{Lists}
\listofalgorithms%
% \addcontentsline{toc}{chapter}{List of Algorithms}
\cleardoublepage%
\listoffigures%
\addcontentsline{toc}{section}{List of Figures}
\cleardoublepage%
\tcblistof[\chapter*]{listings}{List of Listings}
% \addcontentsline{toc}{chapter}{List of Listings}
\cleardoublepage%
\listofalgorithms%
\addcontentsline{toc}{section}{List of Algorithms}
\cleardoublepage%
\listoftables%
\cleardoublepage%
\tcblistof[\chapter*]{listings}{List of Listings}
\addcontentsline{toc}{section}{List of Listings}
\cleardoublepage%
\includepdf[pages=-]{declaration.pdf}
\listoftables%
\addcontentsline{toc}{section}{List of Tables}
\cleardoublepage%
\phantomsection%
\addcontentsline{toc}{chapter}{Statutory Declaration}
\includepdf[pages=-]{declaration_signed.pdf}
}
}
% Colors
+42 -32
View File
@@ -1,33 +1,43 @@
@article{polednaReplicaDeterminismDistributed1994,
title = {Replica Determinism in Distributed Real-Time Systems: {{A}} Brief
Survey},
shorttitle = {Replica Determinism in Distributed Real-Time Systems},
author = {Poledna, Stefan},
date = {1994-05},
journaltitle = {Real-Time Systems},
shortjournal = {Real-Time Syst},
volume = {6},
number = {3},
pages = {289--316},
issn = {0922-6443, 1573-1383},
doi = {10.1007/BF01088629},
url = {http://link.springer.com/10.1007/BF01088629},
urldate = {2026-03-26},
abstract = {Replication of entities is a convenient technique to achieve
fault-tolerance. The problem of replica determinism thereby is to
assure, that replicated entities show consistent behavior in the
absence of failures. Possible sources for replica non-determinism
as well as basic requirements and strategies to enforce replica
determinism axe presented. The problem of replica determinism
enforcement under real-time constraints is surveyed in the
context of the communication problem for distributed systems.
Furthermore the close interdependence between replica determinism
on the one side and synchronization strategies, handling of
failures and redundancy preservation on the other side is
reviewed. The impact of synchronous or asynchronous approaches on
replication strategies is also discussed.},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/DB8GU2TK/Poledna - 1994 -
Replica determinism in distributed real-time systems A brief
survey.pdf},
@inproceedings{TACLeBench,
author = {Heiko Falk and Sebastian Altmeyer and Peter Hellinckx and Bj{\"o}rn
Lisper and Wolfgang Puffitsch and Christine Rochange and Martin
Schoeberl and Rasmus Bo S{\o}rensen and Peter W{\"a}gemann and Simon
Wegener},
title = {{TACLeBench}: A Benchmark Collection to Support Worst-Case Execution
Time Research},
booktitle = {16th International Workshop on Worst-Case Execution Time Analysis
(WCET 2016)},
year = {2016},
editor = {Martin Schoeberl},
volume = {55},
series = {OpenAccess Series in Informatics (OASIcs)},
pages = {2:1--2:10},
address = {Dagstuhl, Germany},
publisher = {Schloss Dagstuhl--Leibniz-Zentrum f\"ur Informatik},
}
@software{seidlerTACLeBenchWasmConverter2026,
title = {{{TACLeBench Wasm Converter}}},
author = {Seidler, Maximilian and W\"agemann, Peter and Kapitza, R\"udiger},
date = {2026-02-17},
url = {https://gitos.rrze.fau.de/i4/openaccess/tacle-bench-wasm-converter},
organization = {Friedrich-Alexander-Universit\"at Erlangen-N\"urnberg (FAU)},
}
@software{wamr,
title = {{WebAssembly Micro Runtime}},
author = {{WAMR Contributors}},
date = {},
organization = {Bytecode Alliance},
url = {https://bytecodealliance.github.io/wamr.dev/},
urldate = {2026-03-28},
}
@comment{bochs,
title = {{Bochs IA-32 Emulator Project}},
author = {Lawton, Kevin and {BOCHS Contributors}},
date = {},
organization = {},
url = {https://bochs.sourceforge.io/},
urldate = {2026-03-28},
}
+15 -12
View File
@@ -1,24 +1,27 @@
%! TeX program = lualatex
\documentclass[a4paper,11pt,twoside]{book} % Add final to silence TODOs
\documentclass[a4paper,11pt,twoside,overfullrule]{scrbook} % Add final to silence TODOs
\input{preamble.tex}
\input{glossary.tex}
\begin{document}
\subfile{chapters/examples/examples.tex}
% TODO: Double check the autofilled Zotero references
\subfile{chapters/00_introduction/00_00_introduction.tex}
\cleardoublepage%
\subfile{chapters/00_abstract/00_00_abstract.tex}
\subfile{chapters/01_related_work/01_00_related_work.tex}
\cleardoublepage%
\subfile{chapters/01_introduction/01_00_introduction.tex}
\subfile{chapters/02_methodology/02_00_methodology.tex}
\cleardoublepage%
\subfile{chapters/02_related_work/02_00_related_work.tex}
\cleardoublepage%
\subfile{chapters/03_experiment_design/03_00_experiment_design.tex}
\subfile{chapters/03_background/03_00_background.tex}
\subfile{chapters/03_background/03_01_wasm.tex}
\subfile{chapters/03_background/03_02_wamr.tex}
\subfile{chapters/03_background/03_03_fail.tex}
% TODO: Write about faults/errors/fault chain?
\cleardoublepage%
\subfile{chapters/04_experiment_setup/04_00_experiment_setup.tex}
@@ -33,10 +36,10 @@
\subfile{chapters/07_conclusion/07_00_conclusion.tex}
\cleardoublepage%
% Appendix
\backmatter% % Backmatter breaks reference counters into appendices
% \pagenumbering{Roman}
\appendix
% \pagenumbering{Roman}
\subfile{chapters/examples/examples.tex}
\cleardoublepage%
\end{document}
+112 -54
View File
@@ -1,68 +1,126 @@
\author{Christoph Urlacher}
\title{Experimental Evaluation of WebAssembly Under Transient Fault Conditions for Safety-Critical Systems}
\thesistype{Master's Thesis}
% \thesisid{IDIDID}
% \birthday{1st of January 2000}
% \birthplace{Ratingen}
% \thesisstart{1st of July 2026}
\thesisend{31st of December 2026}
\birthday{1st of January 2000}
\birthplace{Ratingen}
\thesisstart{1st of July 2026}
\thesisend{December 31st, 1900}
\advisors{Prof.\ Dr.-ing.~Peter Ulbrich\\Dr.~Maximilian Seidler}
\date{\today}
\begin{titlepage}
\setstretch{1.25}
\definecolor{TUGreen}{rgb}{0.517,0.721,0.094}
% \vspace*{-3cm}
\newlength{\links}
\setlength{\links}{-1.5cm}
\sffamily
\hspace*{\links}
\begin{minipage}{12.5cm}
\includegraphics[width=8cm]{tudo/tud_logo_rgb}
\end{minipage}
\vspace*{4cm}
\newgeometry{left=2.5cm,right=2.5cm,top=3cm}
\hspace*{\links}
\hspace*{-0.2cm}
\begin{minipage}{9cm}
\large
\begin{center}
{\Large \thethesistype} \\
\vspace*{1cm}
\textbf{\thetitle} \\
\vspace*{1cm}
\theauthor\\
\thethesisend%
\end{center}
\end{minipage}
\normalsize
\vspace*{5.5cm}
\begin{center}
\vspace*{2.1cm}
\includegraphics[width=6cm]{tud_logo_rgb.jpg}
\hspace*{\links}
\begin{minipage}[b]{8cm}
% \normalsize
\raggedright%
Advisors: \\
\theadvisors%
\end{minipage}
\vspace{0.75cm}
\vspace*{2.5cm}
\hspace*{\links}
\begin{minipage}[b]{8cm}
\raggedright%
Technische Universität Dortmund \\
Fakultät für Informatik\\
Lehrstuhl 12 -- Arbeitsgruppe Systemsoftware\\
\oldurl{https://sys.cs.tu-dortmund.de}
\end{minipage}
\begin{minipage}[b]{7cm}
\raggedleft%
In Kooperation mit:\\
Fakultätsname\\
Lehrstuhl-/Institutsbezeichnung
\end{minipage}
{\Large\thethesistype}
\vspace{0.75cm}
% Thesis title
\rule{\textwidth}{0.25mm}\\
\vspace{-5pt}
\rule{\textwidth}{0.8mm}\\
{\huge \textsc{\thetitle\\}}
\rule{\textwidth}{0.8mm}\\
\vspace{-5pt}
\rule{\textwidth}{0.25mm}
\vspace{7.5em}
{submitted by} \\[.6em]
{\huge \theauthor} \\[.2em]
{from Ratingen}\\
\vfill
% Department
Department of Computer Science\\
Computer Science XII\\
System Software Group\\
Technical University of Dortmund\\
\vspace{1cm}
% Date
\vspace{0.5cm}
\thethesisend%
\vspace{0.5cm}
% People
\begin{tabular}{r l}
Primary Reviewer: & Prof.\ Dr.-ing.~Peter Ulbrich \\
Secondary Reviewer: & Someone \\
Supervisor: & Someone \\
\end{tabular}
\end{center}
\end{titlepage}
% \begin{titlepage}
% \setstretch{1.25}
% \definecolor{TUGreen}{rgb}{0.517,0.721,0.094}
% % \vspace*{-3cm}
% \newlength{\links}
% \setlength{\links}{-1.5cm}
% \sffamily
% \hspace*{\links}
% \begin{minipage}{12.5cm}
% \includegraphics[width=8cm]{tud_logo_rgb.jpg}
% \end{minipage}
%
% \vspace*{4cm}
%
% \hspace*{\links}
% \hspace*{-0.2cm}
% \begin{minipage}{9cm}
% \large
% \begin{center}
% {\Large \thethesistype} \\
% \vspace*{1cm}
% \textbf{\thetitle} \\
% \vspace*{1cm}
% \theauthor\\
% \thethesisend%
% \end{center}
% \end{minipage}
% \normalsize
% \vspace*{5.5cm}
%
% \vspace*{2.1cm}
%
% \hspace*{\links}
% \begin{minipage}[b]{8cm}
% % \normalsize
% \raggedright%
% Advisors: \\
% \theadvisors%
% \end{minipage}
%
% \vspace*{2.5cm}
% \hspace*{\links}
% \begin{minipage}[b]{8cm}
% \raggedright%
% Technische Universität Dortmund \\
% Fakultät für Informatik\\
% Lehrstuhl 12 -- Arbeitsgruppe Systemsoftware\\
% \oldurl{https://sys.cs.tu-dortmund.de}
% \end{minipage}
% \begin{minipage}[b]{7cm}
% \raggedleft%
% In Kooperation mit:\\
% Fakultätsname\\
% Lehrstuhl-/Institutsbezeichnung
% \end{minipage}
%
% \end{titlepage}

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 90 KiB

+443
View File
@@ -0,0 +1,443 @@
@article{aidemarkGOOFIGenericObjectOriented,
title = {{{GOOFI}} : {{Generic Object-Oriented Fault Injection Tool}}},
author = {Aidemark, Joakim and Vinter, Jonny and Folkesson, Peter and Karlsson, Johan},
date = {2001},
abstract = {In this paper, we present a new fault injection tool called GOOFI (Generic Object-Oriented Fault Injection). GOOFI is designed to be adaptable to various target systems and different fault injection techniques. The tool is highly portable between different host platforms since it relies on the Java programming language and a SQL compatible database. The current version of the tool supports pre-runtime Software Implemented Fault Injection and Scan-Chain Implemented Fault Injection.},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/3RK6XB92/Aidemark et al. - 2001 - GOOFI Generic Object-Oriented Fault Injection Tool.pdf}
}
@article{arlatFaultInjectionDependability1990,
title = {Fault Injection for Dependability Validation: A Methodology and Some Applications},
shorttitle = {Fault Injection for Dependability Validation},
author = {Arlat, J. and Aguera, M. and Amat, L. and Crouzet, Y. and Fabre, J.-C. and Laprie, J.-C. and Martins, E. and Powell, D.},
date = {1990-02},
journaltitle = {IEEE Transactions on Software Engineering},
shortjournal = {IIEEE Trans. Software Eng.},
volume = {16},
number = {2},
pages = {166--182},
issn = {00985589},
doi = {10.1109/32.44380},
url = {http://ieeexplore.ieee.org/document/44380/},
urldate = {2026-07-07},
abstract = {This paper addresses the problem of the dependability validation of fault-tolerant computing systems and more specifically the validation of the fault-tolerance mechanisms. The presented approach is based on the use of fault-injection at the physical level on a hardwarelsoftware prototype of the considered system. The place of this approach in a validation directed design process, as well as its place with respect to related works on fault-injection, is clearly identified. The major requirements and problems related to the development and application of a validation methodology based on fault injection are presented and discussed. Emphasis is put on the definition, analysis, and use of the experimental dependability measures that can be obtained. The proposed methodology has been implemented through the realization of a general pin-level fault injection tool (MESSALINE) and its usefulness is demonstrated by the application of MESSALINE to the experimental validation of two systems: 1) a subsystem of a centralized computerized inerlocking system for railway control applications and 2) a distributed system corresponding to the current implementation of the dependable communication system of the ESPRIT Delta-4 Project.},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/7J6HHXRR/Arlat et al. - 1990 - Fault injection for dependability validation a methodology and some applications.pdf}
}
@inproceedings{chenImprovingJavaVirtual2005,
title = {Improving Java Virtual Machine Reliability for Memory-Constrained Embedded Systems},
booktitle = {Proceedings of the 42nd Annual Conference on {{Design}} Automation - {{DAC}} '05},
author = {Chen, Guangyu and Kandemir, Mahmut},
date = {2005},
pages = {690},
publisher = {ACM Press},
location = {San Diego, California, USA},
doi = {10.1145/1065579.1065761},
url = {http://portal.acm.org/citation.cfm?doid=1065579.1065761},
urldate = {2026-03-26},
abstract = {Dual-execution/checkpointing based transient error tolerance techniques have been widely used in the high-end mission critical systems. These techniques, however, are not very attractive for cost-sensitive embedded systems because they require extra resources (e.g., large memory, special hardware, etc), and thus increase overall cost of the system. In this paper, we propose a transient error tolerant Java Virtual Machine (JVM) implementation for embedded systems. Our JVM uses dual-execution and checkpointing to detect and recover from transient errors. However, our technique does not require any special hardware support (except for the memory page protection mechanism, which is commonly available in modern embedded processors), and the memory space overhead it incurs is not excessive. Therefore, it is suitable for memory-constrained embedded systems. We implemented our approach and performed experiments with seven embedded Java applications.},
eventtitle = {The 42nd Annual Conference},
isbn = {978-1-59593-058-3},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/FKKICG9F/Chen and Kandemir - 2005 - Improving java virtual machine reliability for memory-constrained embedded systems.pdf}
}
@inproceedings{fidalgoUsingNEXUSCompliant2006,
title = {Using {{NEXUS}} Compliant Debuggers for Real Time Fault Injection on Microprocessors},
booktitle = {Proceedings of the 19th Annual Symposium on {{Integrated}} Circuits and Systems Design},
author = {Fidalgo, André and Gericota, Manuel and Alves, Gustavo and Ferreira, José},
date = {2006-08-28},
pages = {214--219},
publisher = {ACM},
location = {Ouro Preto MG Brazil},
doi = {10.1145/1150343.1150397},
url = {https://dl.acm.org/doi/10.1145/1150343.1150397},
urldate = {2026-07-06},
eventtitle = {{{SBCCI06}}: 19th {{Symposium}} on {{Integrated Circuits}} and {{System Design}}},
isbn = {978-1-59593-479-6},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/LDE6FJQF/Fidalgo et al. - 2006 - Using NEXUS compliant debuggers for real time fault injection on microprocessors.pdf}
}
@article{forinVitalCodedMicroprocessor1990,
title = {Vital {{Coded Microprocessor Principles}} and {{Application}} for {{Various Transit Systems}}},
author = {Forin, P.},
date = {1990-09},
journaltitle = {IFAC Proceedings Volumes},
shortjournal = {IFAC Proceedings Volumes},
volume = {23},
number = {2},
pages = {79--84},
issn = {14746670},
doi = {10.1016/S1474-6670(17)52653-1},
url = {https://linkinghub.elsevier.com/retrieve/pii/S1474667017526531},
urldate = {2026-03-30},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/77H4FFUQ/Forin - 1990 - Vital Coded Microprocessor Principles and Application for Various Transit Systems.pdf}
}
@inproceedings{goloubevaSofterrorDetectionUsing2003,
title = {Soft-Error Detection Using Control Flow Assertions},
booktitle = {Proceedings 18th {{IEEE Symposium}} on {{Defect}} and {{Fault Tolerance}} in {{VLSI Systems}}},
author = {Goloubeva, O. and Rebaudengo, M. and Sonza Reorda, M. and Violante, M.},
date = {2003},
pages = {581--588},
publisher = {IEEE},
location = {Boston, MA, USA},
doi = {10.1109/DFTVS.2003.1250158},
url = {https://ieeexplore.ieee.org/document/1250158/},
urldate = {2026-07-06},
abstract = {Over the last years, an increasing number of safety-critical tasks have been demanded to computer systems. In this paper, a software-based approach for developing safety-critical applications is analyzed. The technique is based on the introduction of additional executable assertions to check the correct execution of the program control flow. By applying the proposed technique, several benchmark applications have been hardened against transient errors. Fault Injection campaigns have been performed to evaluate the fault detection capability of the proposed technique in comparison with state-of-the-art alternative assertionbased methods. Experimental results show that the proposed approach is far more effective than the other considered techniques in terms of fault detection capability, at the cost of a limited increase in memory requirements and in performance overhead.},
eventtitle = {Proceedings. 18th {{IEEE International Symposium}} on {{Defect}} and {{Fault Tolerance}} in {{VLSI Systems}}},
isbn = {978-0-7695-2042-1},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/WI2QDM9X/Goloubeva et al. - 2003 - Soft-error detection using control flow assertions.pdf}
}
@article{hammingErrorDetectingError,
title = {Error Detecting and Error Correcting Codes},
author = {Hamming, Richard W},
date = {1950-04},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/AYGVTSAN/Hamming - 1950 - Error detecting and error correcting codes.pdf}
}
@article{hoffmannExperiencesSoftwarebasedSofterror2016,
title = {Experiences with Software-Based Soft-Error Mitigation Using {{AN}} Codes},
author = {Hoffmann, Martin and Ulbrich, Peter and Dietrich, Christian and Schirmeier, Horst and Lohmann, Daniel and Schröder-Preikschat, Wolfgang},
date = {2016-03},
journaltitle = {Software Quality Journal},
shortjournal = {Software Qual J},
volume = {24},
number = {1},
pages = {87--113},
issn = {0963-9314, 1573-1367},
doi = {10.1007/s11219-014-9260-4},
url = {http://link.springer.com/10.1007/s11219-014-9260-4},
urldate = {2026-07-06},
abstract = {Arithmetic error coding schemes are a well known and effective technique for soft error mitigation. Although the underlying coding theory is generally a complex area of mathematics, its practical implementation is comparatively simple in general. However, compliance with the theory can be lost easily while moving towards an actual implementation, which finally jeopardizes the aspired fault-tolerance characteristics and effectiveness. In this paper, we present our experiences and lessons learned from implementing arithmetic error coding schemes (AN codes) in the context of our Combined Redundancy fault-tolerance approach. We focus on the challenges and pitfalls in the transition from maths to machine code for a binary computer from a systems perspective. Our results show, that practical misconceptions (such as the use of prime numbers) and architecture-dependent implementation glitches occur at every stage of this transition. We identify typical pitfalls and describe practical measures to find and resolve them. This allowed us to eliminate all remaining silent data corruptions in the Combined Redundancy framework, which we validated by an extensive fault-injection campaign covering the entire fault space of 1-bit and 2-bit errors.},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/UU2JZ5HL/Hoffmann et al. - 2016 - Experiences with software-based soft-error mitigation using AN codes.pdf}
}
@inproceedings{hoffmannPractitionersGuideSoftwareBased2014,
title = {A {{Practitioner}}'s {{Guide}} to {{Software-Based Soft-Error Mitigation Using AN-Codes}}},
booktitle = {2014 {{IEEE}} 15th {{International Symposium}} on {{High-Assurance Systems Engineering}}},
author = {Hoffmann, Martin and Ulbrich, Peter and Dietrich, Christian and Schirmeier, Horst and Lohmann, Daniel and Schroder-Preikschat, Wolfgang},
date = {2014-01},
pages = {33--40},
publisher = {IEEE},
location = {Miami Beach, FL, USA},
doi = {10.1109/HASE.2014.14},
url = {http://ieeexplore.ieee.org/document/6754585/},
urldate = {2026-01-05},
abstract = {Arithmetic error coding schemes (AN codes1) are a well known and effective technique for soft error mitigation. Although coding theory being a rich area of mathematics, their implementation seems to be fairly easy. However, compliance with the theory can be lost easily while moving towards an actual implementation finally jeopardizing the aspired fault-tolerance characteristics. In this paper, we present our experiences and lessons learned from implementing AN codes in the CoRed dependable voter. We focus on the challenges and pitfalls in the transition from maths to machine code for a binary computer from a systems perspective. Our results show, that practical misconceptions (such as the use of prime numbers) and architecturedependent implementation glitches occur at every stage of this transition. We identify typical pitfalls and describe practical measures to find and resolve them. Our measures eliminate all remaining SDCs in the CoRed voter, which is validated by an extensive fault-injection campaign that covers 100 percent of the fault space for 1-bit and 2-bit errors.},
eventtitle = {2014 {{IEEE}} 15th {{International Symposium}} on {{High-Assurance Systems Engineering}} ({{HASE}})},
isbn = {978-1-4799-3466-9 978-1-4799-3465-2},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/CY3ULLCA/Hoffmann et al. - 2014 - A Practitioner's Guide to Software-Based Soft-Error Mitigation Using AN-Codes.pdf}
}
@inproceedings{kuvaiskiiAmpampx0394EncodingPracticalEncoded2015,
title = {Delta-{{Encoding}}: {{Practical Encoded Processing}}},
shorttitle = {\&amp;Amp;\#x0394;-{{Encoding}}},
booktitle = {2015 45th {{Annual IEEE}}/{{IFIP International Conference}} on {{Dependable Systems}} and {{Networks}}},
author = {Kuvaiskii, Dmitrii and Fetzer, Christof},
date = {2015-06},
pages = {13--24},
publisher = {IEEE},
location = {Rio de Janeiro, Brazil},
doi = {10.1109/DSN.2015.20},
url = {https://ieeexplore.ieee.org/document/7266834},
urldate = {2026-07-06},
abstract = {Transient and permanent errors in memory and CPUs occur with alarming frequency. Although most of these errors are masked at the hardware level or result in crashes, a non-negligible number of them leads to Silent Data Corruptions (SDCs), i.e., incorrect results of computations. Safety-critical programs require a very high level of confidence that such faults are detected and not propagated to the outside. Unfortunately, state-of-the-art fault detection techniques generally assume a limited Single Event Upset fault model, concentrating only on transient faults.},
eventtitle = {2015 45th {{Annual IEEE}}/{{IFIP International Conference}} on {{Dependable Systems}} and {{Networks}} ({{DSN}})},
isbn = {978-1-4799-8629-3},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/XBMRFFTE/Kuvaiskii and Fetzer - 2015 - Delta-Encoding Practical Encoded Processing.pdf}
}
@thesis{munkSoftwareFaultToleranceMechanism,
title = {A Software Fault-Tolerance Mechanism for Mixed-Critical Real-Time Applications on Consumer-Grade Many-Core Processors},
author = {Munk, Peter},
date = {2016-07},
langid = {ngerman},
file = {/home/christoph/Notes/Zotero/storage/8QKA739L/Munk - 2016 - A Software Fault-Tolerance Mechanism for Mixed-Critical Real-Time Applications on Consumer-Grade Man.pdf}
}
@article{polednaReplicaDeterminismDistributed1994,
title = {Replica Determinism in Distributed Real-Time Systems: {{A}} Brief Survey},
shorttitle = {Replica Determinism in Distributed Real-Time Systems},
author = {Poledna, Stefan},
date = {1994-05},
journaltitle = {Real-Time Systems},
shortjournal = {Real-Time Syst},
volume = {6},
number = {3},
pages = {289--316},
issn = {0922-6443, 1573-1383},
doi = {10.1007/BF01088629},
url = {http://link.springer.com/10.1007/BF01088629},
urldate = {2026-03-26},
abstract = {Replication of entities is a convenient technique to achieve fault-tolerance. The problem of replica determinism thereby is to assure, that replicated entities show consistent behavior in the absence of failures. Possible sources for replica non-determinism as well as basic requirements and strategies to enforce replica determinism axe presented. The problem of replica determinism enforcement under real-time constraints is surveyed in the context of the communication problem for distributed systems. Furthermore the close interdependence between replica determinism on the one side and synchronization strategies, handling of failures and redundancy preservation on the other side is reviewed. The impact of synchronous or asynchronous approaches on replication strategies is also discussed.},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/DB8GU2TK/Poledna - 1994 - Replica determinism in distributed real-time systems A brief survey.pdf}
}
@article{raabSafeSoftwareProcessing,
title = {Safe Software Processing by Concurrent Execution in a Real-Time Operating System},
author = {Raab, Peter and Kramer, Stefan and Mottok, Jurgen and Meier, Hans and Racek, Stanislav},
date = {2011-09},
abstract = {The requirements for safety-related software systems increases rapidly. To detect arbitrary hardware faults, there are applicable coding mechanism, that add redundancy to the software. In this way it is possible to replace conventional multi-channel hardware and so reduce costs. Arithmetic codes are one possibility of coded processing and are used in this approach. A further approach to increase fault tolerance is the multiple execution of certain critical parts of software. This kind of time redundancy is easily realized by the parallel processing in an operating system. Faults in the program flow can be monitored. No special compilers, that insert additional generated code into the existing program, are required. The usage of multi-core processors would further increase the performance of such multi-channel software systems. In this paper we present the approach of program flow monitoring combined with coded processing, which is encapsulated in a library of coded data types. The program flow monitoring is indirectly realized by means of an operating system.},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/MJAVLTNB/Raab et al. - 2011 - Safe software processing by concurrent execution in a real-time operating system.pdf}
}
@inproceedings{rebaudengoSofterrorDetectionSoftware1999,
title = {Soft-Error Detection through Software Fault-Tolerance Techniques},
booktitle = {Proceedings 1999 {{IEEE International Symposium}} on {{Defect}} and {{Fault Tolerance}} in {{VLSI Systems}} ({{EFT}}'99)},
author = {Rebaudengo, M. and Sonza Reorda, M. and Torchiano, M. and Violante, M.},
date = {1999},
pages = {210--218},
publisher = {IEEE Comput. Soc},
location = {Albuquerque, NM, USA},
doi = {10.1109/DFTVS.1999.802887},
url = {http://ieeexplore.ieee.org/document/802887/},
urldate = {2026-07-06},
abstract = {The paper describes a systematic approach for automatically introducing data and code redundancy into an existing program written using a high-level language. The transformations aim at making the program able to detect most of the soft-errors affecting data and code, independently of the Error Detection Mechanisms (EDMs) possibly implemented by the hardware. Since the transformations can be automatically applied as a pre-compilation phase, the programmer is freed from the cost and responsibility of introducing suitable EDMs in its code. Preliminary experimental results are reported, showing the fault coverage obtained by the method, as well as some figures concerning the slow-down and code size increase it causes.},
eventtitle = {1999 {{IEEE International Symposium}} on {{Defect}} and {{Fault Tolerance}} in {{VLSI Systems}}},
isbn = {978-0-7695-0325-7},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/HFQUUT6L/Rebaudengo et al. - 1999 - Soft-error detection through software fault-tolerance techniques.pdf}
}
@incollection{schiffelANBANBDmemEncodingDetecting2010,
title = {{{ANB-}} and {{ANBDmem-Encoding}}: {{Detecting Hardware Errors}} in {{Software}}},
shorttitle = {{{ANB-}} and {{ANBDmem-Encoding}}},
booktitle = {Computer {{Safety}}, {{Reliability}}, and {{Security}}},
author = {Schiffel, Ute and Schmitt, André and Süßkraut, Martin and Fetzer, Christof},
editor = {Schoitsch, Erwin},
editora = {Hutchison, David and Kanade, Takeo and Kittler, Josef and Kleinberg, Jon M. and Mattern, Friedemann and Mitchell, John C. and Naor, Moni and Nierstrasz, Oscar and Pandu Rangan, C. and Steffen, Bernhard and Sudan, Madhu and Terzopoulos, Demetri and Tygar, Doug and Vardi, Moshe Y. and Weikum, Gerhard},
editoratype = {redactor},
date = {2010},
volume = {6351},
pages = {169--182},
publisher = {Springer Berlin Heidelberg},
location = {Berlin, Heidelberg},
doi = {10.1007/978-3-642-15651-9_13},
url = {http://link.springer.com/10.1007/978-3-642-15651-9_13},
urldate = {2026-03-29},
abstract = {It is expected that commodity hardware is becoming less reliable because of the continuously decreasing feature sizes of integrated circuits. Nevertheless, more and more commodity hardware with insufficient error detection is used in critical applications. One possible solution is to detect hardware errors in software using arithmetic AN-codes. These codes detect hardware errors independent of the actual failure modes of the underlying hardware. However, measurements have shown that AN-codes still exhibit large rates of undetected silent data corruptions (SDC). These high rates of undetected SDCs are caused by the insufficient protection of control and data flow through AN-codes. In contrast, ANB- and ANBD-codes promise much higher error detection rates because they also detect errors in control and data flow. We present our encoding compiler that automatically applies either an AN-, ANBor ANBD-code to an application. Our error injections show that AN-, ANB-, and ANBD-codes successfully detect errors and more important that indeed ANB- and ANBD-codes reduce the SDC rate more effectively than AN-codes. The difference between ANBD- and ANB-codes is also visible but less pronounced.},
isbn = {978-3-642-15650-2 978-3-642-15651-9},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/VU7Y6B54/Schiffel et al. - 2010 - ANB- and ANBDmem-Encoding Detecting Hardware Errors in Software.pdf}
}
@thesis{schiffelHardwareErrorDetection2011,
type = {phdthesis},
title = {Hardware {{Error Detection Using AN-Codes}}},
author = {Schiffel, Ute},
date = {2011},
institution = {Technical University of Dresden},
location = {Dresden},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/7BXMSTFW/Hardware_Error_Detection_Using_AN_Codes.pdf}
}
@incollection{schirmeierDependabilityAspectsConfigurable2021,
title = {Dependability {{Aspects}} in {{Configurable Embedded Operating Systems}}},
booktitle = {Dependable {{Embedded Systems}}},
author = {Schirmeier, Horst and Borchert, Christoph and Hoffmann, Martin and Dietrich, Christian and Martens, Arthur and Kapitza, Rüdiger and Lohmann, Daniel and Spinczyk, Olaf},
editor = {Henkel, Jörg and Dutt, Nikil},
date = {2021},
pages = {85--116},
publisher = {Springer International Publishing},
location = {Cham},
doi = {10.1007/978-3-030-52017-5_4},
url = {http://link.springer.com/10.1007/978-3-030-52017-5_4},
urldate = {2026-07-06},
abstract = {Abstract As all conceptual layers in the software stack depend on the operating system (OS) to reliably provide resource-management services and isolation, it can be considered the “reliable computing base” that must be hardened for correct operation under fault models such as transient hardware faults in the memory hierarchy. In this chapter, we approach the problem of system-software hardening in three complementary scenarios. (1) We address the following research question: Where do the general reliability limits of static system-software stacks lie, if designed from scratch with reliability as a first-class design goal? In order to reduce the proverbial “attack surface” as far as possible, we harness static application knowledge from an AUTOSAR-compliant task set, and protect the whole OS kernel with AN-encoding. This static approach yields an extremely reliable software system, but is constrained to specific application domains. (2) We investigate how reliable a dynamic COTS embedded OS can become if hardened with programming-language and compiler-based fault-tolerance techniques. We show that aspect-oriented programming is an appropriate means to encapsulate generic software-implemented hardware fault tolerance mechanisms that can be application-specifically applied to a selection of OS components. (3) We examine how system-software stacks can survive even more adverse fault models like whole-system outages, using emerging persistent memory (PM) technology as a vehicle for state conservation. Our findings include that software transactional memory facilitates maintaining consistent state within PM and allows fast recovery.},
isbn = {978-3-030-52016-8 978-3-030-52017-5},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/WAVR4R62/Schirmeier et al. - 2021 - Dependability Aspects in Configurable Embedded Operating Systems.pdf}
}
@thesis{schirmeierEfficientFaultInjectionbasedAssessment,
type = {phdthesis},
title = {Efficient {{Fault-Injection-based Assessment}} of {{Software-Implemented Hardware Fault Tolerance}}},
author = {Schirmeier, Horst},
date = {2016},
institution = {Technical University of Dortmund},
location = {Dortmund},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/MIBRJ5DT/Schirmeier - Efficient Fault-Injection-based Assessment of Software-Implemented Hardware Fault Tolerance.pdf}
}
@inproceedings{schirmeierFAILOpenVersatile2015,
title = {{{FAIL}}*: {{An Open}} and {{Versatile Fault-Injection Framework}} for the {{Assessment}} of {{Software-Implemented Hardware Fault Tolerance}}},
shorttitle = {{{FAIL}}*},
booktitle = {2015 11th {{European Dependable Computing Conference}} ({{EDCC}})},
author = {Schirmeier, Horst and Hoffmann, Martin and Dietrich, Christian and Lenz, Michael and Lohmann, Daniel and Spinczyk, Olaf},
date = {2015-09},
pages = {245--255},
publisher = {IEEE},
location = {Paris, France},
doi = {10.1109/EDCC.2015.28},
url = {https://ieeexplore.ieee.org/document/7371972/},
urldate = {2026-03-29},
abstract = {Due to voltage and structure shrinking, the influence of radiation on a circuits operation increases, resulting in future hardware designs exhibiting much higher rates of soft errors. Software developers have to cope with these effects to ensure functional safety. However, software-based hardware fault tolerance is a holistic property that is tricky to achieve in practice, potentially impaired by every single design decision. We present FAIL*, an open and versatile architecture-level fault-injection (FI) framework for the continuous assessment and quantification of fault tolerance in an iterative software development process. FAIL* supplies the developer with reusable and composable FI campaigns, advanced pre- and post-processing analyses to easily identify sensitive spots in the software, wellabstracted back-end implementations for several hardware and simulator platforms, and scalability of FI campaigns by providing massive parallelization. We describe FAIL*, its application to the development process of safety-critical software, and the lessons learned from a real-world example.},
eventtitle = {2015 11th {{European Dependable Computing Conference}} ({{EDCC}})},
isbn = {978-1-4673-9289-1},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/DVEUWLJJ/Schirmeier et al. - 2015 - FAIL An Open and Versatile Fault-Injection Framework for the Assessment of Software-Implemented Ha.pdf}
}
@article{schirmeierFAILVersatileFaultInjection2012,
title = {{{FAIL}}*: {{Towards}} a {{Versatile Fault-Injection Experiment Framework}}},
author = {Schirmeier, Horst and Hoffmann, Martin and Kapitza, Rüdiger and Lohmann, Daniel and Spinczyk, Olaf},
date = {2012-01},
abstract = {Many years of research on dependable, faulttolerant software systems yielded many tool implementations for vulnerability analysis and experimental validation of resilience measures. We identify two disjoint classes of fault-injection (FI) experiment tools in the field, and argue that both are plagued by inherent deficiencies, such as insufficient target state access, little or no means to switch to another target system, and non-reusable experiment code.},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/G9SATNLR/Schirmeier et al. - FAIL Towards a Versatile Fault-Injection Experiment Framework.pdf}
}
@article{schusterDemystifyingSoftErrorMitigation2017,
title = {Demystifying {{Soft-Error Mitigation}} by {{Control-Flow Checking}} -- {{A New Perspective}} on Its {{Effectiveness}}},
author = {Schuster, Simon and Ulbrich, Peter and Stilkerich, Isabella and Dietrich, Christian and SchröDer-Preikschat, Wolfgang},
date = {2017-10-31},
journaltitle = {ACM Transactions on Embedded Computing Systems},
shortjournal = {ACM Trans. Embed. Comput. Syst.},
volume = {16},
pages = {1--19},
issn = {1539-9087, 1558-3465},
doi = {10.1145/3126503},
url = {https://dl.acm.org/doi/10.1145/3126503},
urldate = {2026-07-06},
abstract = {Soft errors are a challenging and urging problem in the domain of safety-critical embedded systems. For decades, checking schemes have been investigated and improved to mitigate soft-error effects for the class of control-flow faults, with current industrial standards strongly recommending their use. However, reality looks different: Taking a systems perspective, we implemented four representative Control-Flow Checking (CFC) schemes and put them through their paces in 396 fault-injection campaigns. In contrast to previous work, which typically relied on probability-based vulnerability metrics, we accounted for the influence of memory and time overheads on the fault-space dimensions and applied those in full-scan fault injections. This change in procedure alone severely degraded the perceived effectiveness of CFC. In addition, we expanded the perspective to data-flow faults and their influence on the overall susceptibility, an aspect that so far has been largely ignored. Our results suggest that, without accompanying measures, any improvement regarding control-flow faults is dominated by the increase in data faults caused by the increased attack surface in terms of memory and runtime overhead. Moreover, CFC performance less depended on the detection capabilities than on general aspects of the concrete binary compilation and execution. In conclusion, incorporating CFC is not as straightforward as often assumed and the vulnerability of systems with hardened control-flow may in many cases even be increased by the schemes themselves.},
issue = {5s},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/BLKUCBAD/Schuster et al. - 2017 - Demystifying Soft-Error Mitigation by Control-Flow Checking -- A New Perspective on its Effectivenes.pdf}
}
@inproceedings{skarinGOOFI2ToolExperimental2010,
title = {{{GOOFI-2}}: {{A}} Tool for Experimental Dependability Assessment},
shorttitle = {{{GOOFI-2}}},
booktitle = {2010 {{IEEE}}/{{IFIP International Conference}} on {{Dependable Systems}} \& {{Networks}} ({{DSN}})},
author = {Skarin, Daniel and Barbosa, Raul and Karlsson, Johan},
date = {2010-06},
pages = {557--562},
publisher = {IEEE},
location = {Chicago, IL},
doi = {10.1109/DSN.2010.5544265},
url = {http://ieeexplore.ieee.org/document/5544265/},
urldate = {2026-07-06},
abstract = {This paper presentsGOOFI-2, a comprehensive fault in jection tool for experimental dependability assessment of embedded systems. The tool includes a large number of ex tensions and improvements over its predecessor, GOOF!. These include support for three widely used fault injection techniques, two target processors, and a variety of new features for storing, disseminating and analyzing experi mental data. We report on our experiences and lessons learned from the use and development ofGOOFI-2. In par ticular, we compare and discuss properties of three fault injection techniques: Nexus-based, exception-based and instrumentation-based injection. The comparison relies on several sets of experiments with two target processors, Freescale's MPC565 and MPC5554.},
eventtitle = {2010 {{IEEE}}/{{IFIP International Conference}} on {{Dependable Systems}} \& {{Networks}} ({{DSN}})},
isbn = {978-1-4244-7500-1 978-1-4244-7501-8},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/2HMSUPZM/Skarin et al. - 2010 - GOOFI-2 A tool for experimental dependability assessment.pdf}
}
@book{slettenWebAssemblyDefinitiveGuide2021,
title = {{{WebAssembly}}: The Definitive Guide: Safe, Fast, and Portable Code},
shorttitle = {{{WebAssembly}}},
author = {Sletten, Brian},
date = {2021},
edition = {First edition},
publisher = {O'Reilly Media},
location = {Sebastopol, CA},
abstract = {"WebAssembly: The Definitive Guide is a thorough and accessible introduction to one of the most transformative technologies hitting our industry. What started as a way to use languages other than JavaScript in the browser has evolved into a comprehensive path toward portability, performance, increased security, and greater code reuse across an impressive collection of deployment targets. Author Brian Sletten introduces elements of this technology incrementally while building to several concrete, code-driven examples of practical, cutting-edge WebAssembly uses. Whether you work with enterprise software or embedded systems, or in entertainment, scientific computing, or startup environments, you'll learn how WebAssembly can have a positive impact on the way you develop software." -- Back cover},
isbn = {978-1-4920-8984-1},
pagetotal = {317},
keywords = {Application software,Assembly languages (Electronic computers),Computer programs,Development,Développement,Développement Logiciels,Guides et manuels,Handbook,Handbooks and manuals,Internet programming,Langage assembleur (Langage de programmation),Logiciels d'application,Programmation Internet,Sites Web,Web site development},
file = {/home/christoph/Notes/Zotero/storage/82VVGKJV/Sletten - 2021 - WebAssembly the definitive guide safe, fast, and portable code.pdf}
}
@article{soloukiDependabilityEmbeddedSystems2024,
title = {Dependability in {{Embedded Systems}}: {{A Survey}} of {{Fault Tolerance Methods}} and {{Software-Based Mitigation Techniques}}},
shorttitle = {Dependability in {{Embedded Systems}}},
author = {Solouki, Mohammadreza Amel and Angizi, Shaahin and Violante, Massimo},
date = {2024},
journaltitle = {IEEE Access},
shortjournal = {IEEE Access},
volume = {12},
pages = {180939--180967},
issn = {2169-3536},
doi = {10.1109/ACCESS.2024.3509633},
url = {https://ieeexplore.ieee.org/document/10772080/},
urldate = {2026-03-26},
abstract = {Fault tolerance is a critical aspect of modern computing systems, ensuring correct functionality in the presence of faults. This paper presents a comprehensive survey of fault tolerance methods and mitigation techniques in embedded systems, with a focus on both software and hardware faults. Emphasis is placed on real-time embedded systems, considering their resource constraints and the increasing interconnectivity of computing systems in commercial and industrial applications. The survey covers various fault tolerance methods, including hardware, software, and hybrid redundancy. Particular attention is given to software faults, acknowledging their significance as a leading cause of system failures, while also addressing hardware faults and their mitigation. Moreover, the paper explores the challenges posed by soft errors in modern computing systems. The survey concludes by emphasizing the need for continued research and development in fault tolerance methods, specifically in the context of real-time embedded systems, and highlights the potential for extending fault tolerance approaches to diverse computing environments.},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/7I9EXB4N/Solouki et al. - 2024 - Dependability in Embedded Systems A Survey of Fault Tolerance Methods and Software-Based Mitigation.pdf}
}
@inproceedings{ulbrichEliminatingSinglePoints2012,
title = {Eliminating {{Single Points}} of {{Failure}} in {{Software-Based Redundancy}}},
booktitle = {2012 {{Ninth European Dependable Computing Conference}}},
author = {Ulbrich, P. and Hoffmann, M. and Kapitza, R. and Lohmann, D. and Schroder-Preikschat, W. and Schmid, R.},
date = {2012-05},
pages = {49--60},
publisher = {IEEE},
location = {Sibiu},
doi = {10.1109/EDCC.2012.21},
url = {http://ieeexplore.ieee.org/document/6214760/},
urldate = {2026-01-07},
eventtitle = {2012 {{Ninth European Dependable Computing Conference}} ({{EDCC}})},
isbn = {978-1-4673-0938-7 978-0-7695-4671-1},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/8QZAMSR7/Ulbrich et al. - 2012 - Eliminating Single Points of Failure in Software-Based Redundancy.pdf}
}
@incollection{wapplerSoftwareEncodedProcessing2007,
title = {Software {{Encoded Processing}}: {{Building Dependable Systems}} with {{Commodity Hardware}}},
shorttitle = {Software {{Encoded Processing}}},
booktitle = {Computer {{Safety}}, {{Reliability}}, and {{Security}}},
author = {Wappler, Ute and Fetzer, Christof},
editor = {Saglietti, Francesca and Oster, Norbert},
editora = {Hutchison, David and Kanade, Takeo and Kittler, Josef and Kleinberg, Jon M. and Mattern, Friedemann and Mitchell, John C. and Naor, Moni and Nierstrasz, Oscar and Pandu Rangan, C. and Steffen, Bernhard and Sudan, Madhu and Terzopoulos, Demetri and Tygar, Doug and Vardi, Moshe Y. and Weikum, Gerhard},
editoratype = {redactor},
date = {2007},
volume = {4680},
pages = {356--369},
publisher = {Springer Berlin Heidelberg},
location = {Berlin, Heidelberg},
doi = {10.1007/978-3-540-75101-4_34},
url = {http://link.springer.com/10.1007/978-3-540-75101-4_34},
urldate = {2026-03-26},
abstract = {In future, the decreasing feature size and the reduced power supply will make it much more difficult to built reliable microprocessors. Economic pressure will most likely result in the reliability of microprocessors being tuned for the commodity market. In the dependability domain we expect the continued spreading of mixed-mode computing systems, i.e., systems that execute both critical and non-critical functionality. To permit the efficient execution of non-critical applications and the correct execution of critical applications, we introduce the concept of Software Encoded Processing (SEP). SEP enforces a crash failure semantics of the underlying CPU. It does not require the source code of encoded programs and provides probabilistic guarantees. To achieve this, arithmetic codes and signatures are used to detect corrupted data and faulty executions of programs.},
isbn = {978-3-540-75100-7 978-3-540-75101-4},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/VQT3AEQF/Wappler and Fetzer - 2007 - Software Encoded Processing Building Dependable Systems with Commodity Hardware.pdf}
}
@misc{wasm1spec,
title = {{{WebAssembly}} 1.0 {{Specification}}},
author = {{WebAssembly Community Group} and Rossberg, Andreas},
date = {2019-07-20},
url = {https://webassembly.github.io/spec/versions/core/WebAssembly-1.0.pdf},
urldate = {2026-07-01},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/WQV9G6TQ/WebAssembly Community Group and Rossberg - 2019 - WebAssembly 1.0 Specification.pdf}
}
@misc{wasm2spec,
title = {{{WebAssembly}} 2.0 {{Specification}}},
author = {{WebAssembly Community Group} and Rossberg, Andreas},
date = {2025-09-16},
url = {https://webassembly.github.io/spec/versions/core/WebAssembly-2.0.pdf},
urldate = {2026-07-01},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/DKNDNCPF/WebAssembly Community Group and Rossberg - 2025 - WebAssembly 2.0 Specification.pdf}
}
@misc{wasm3spec,
title = {{{WebAssembly}} 3.0 {{Specification}} ({{Draft}})},
author = {{WebAssembly Community Group} and Rossberg, Andreas},
date = {2026-06-25},
url = {https://webassembly.github.io/spec/core/_download/WebAssembly.pdf},
urldate = {2026-07-01},
langid = {english},
file = {/home/christoph/Notes/Zotero/storage/8YB9FEXY/WebAssembly Community Group and Rossberg - 2026 - WebAssembly 3.0 Specification (Draft).pdf}
}