• Stars
    star
    115
  • Rank 296,979 (Top 6 %)
  • Language
    TeX
  • Created over 4 years ago
  • Updated 7 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Template for EPFL (BSc, MSc, or doctoral) theses and semester projects

EPFL thesis/project report LaTeX template

Template for IC EPFL (BSc, MSc, or doctoral) theses and semester projects. The template contains a rough structure with some hints for systems-oriented projects but the same structure is easily adaptable to other research projects as well.

Check out the compiled example document if you want to see how it is rendered.

License and acknowledgement

The source code and LaTeX package is licensed under the LPPL. This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3 of this license or (at your option) any later version. The latest version of this license is in http://www.latex-project.org/lppl.txt

We would appreciate if you acknowledge the use of this template and where you got it from in your report.

Contact

Contact Mathias Payer with bug reports or questions.

Prerequisites

Make sure you have the necessary LaTeX packages installed. For Ubuntu/Debian, the installation instructions are as follows:

sudo apt install make texlive-base texlive-bibtex-extra texlive-latex-base \
                 texlive-latex-extra texlive-latex-recommended \
                 texlive-science texlive-lang-german texlive-lang-french \
                 texlive-bibtex-extra biber rubber

Editing

You will edit the files thesis.tex (this is where you write your report) and thesis.bib (this is where you add all your references). Add figures in a ./figures directory. To create the PDF of your thesis, run make.

Writing Tips

Writing is hard. Here, have some help.

I. Punctuation

  1. Use the Oxford comma for enumerations: We talk about a, b, and c (see the comma before and)
  2. We use commas around e.g. and i.e.: foo, e.g., or, i.e., bar
  3. This is a sentence with a footnote\footnote{In the footnote we use a full sentence as well.}.

II. Weasel words and bad writing

  1. Never use "is able to", "is not able to". These expressions can always be removed
  2. Don't use passive voice (or minimize passive voice as much as possible)
  3. Don't use abbreviations (no don't won't it's) in a paper
  4. Don't use weasel words (Up to sixty percent, Clearly, The vast majority)
  5. Run a spell check and grammar check on the document before every commit
  6. Don't use Discuss about link
  7. For the "Related Work" section, use consistency. Always cite the work after introducing the name
  8. Always add a space after parentheses "foo (bar)", not "foo(bar)", this is not a function call!
  9. Be careful about the correct spelling of benchmark and other systems: SPEC CPU2006

III. LaTeX do's and don'ts

  1. Use \autoref not \ref when referring to a section. When you refer to a specific section add label{sec:mysec} and then refer to it as \autoref{sec:mysec}. LaTeX will turn this into, e.g., Section 2. Same goes for Figures, Tables, or Listings.
  2. Use a non-breaking space (\~) before, e.g., \cite (foo\~\cite{bar}), \autoref as in foo\~\autoref{fig:foo}; don't use a breaking space before a non-breaking space as this defeats the purpose of non-breaking spaces. Do not use non-breaking spaces for free standing text such as XXX. \autoref{fig:foo} shows....
  3. For providing inline comments while iterating over the paper, you can use the todonotes LaTex package. This allows for turning off the comments using a simple disable flag. Sample provided below:
     \usepackage[disable]{todonotes} %disables all todonotes
     \newcommand{\ali}[1]{\todo[inline,color=red!40]{alice: #1}} % inline comment block
  4. Use \emph while introducing keywords and for proper nouns, e.g., \emph{Control-Flow Integrity} (CFI)

IV. Paper writing

  1. Start with an outline of the paper
  2. For each section/subsection outline each paragraph and what you want to say. Keep this information as comment above the paragraphs
  3. Continue to expand (write text for the individual paragraphs) and compact (condense the text to remove fluff), then expand again to figure out a better wording.
  4. Figures are important, each major concept should be described through a self-explaining Figure; take care of reasonable captions!
  5. Tables and graphs are important too, take care to show the advantages of your system; make sure the captions are helpful!
  6. Goal: someone reading just the outline and looking at the Figures/Graphs should get a good idea what the paper is about.

V. Benchmarking

  1. Always use all programs in a benchmark set, report the full performance overhead
  2. Memory overhead may be important too
  3. For figures: show the baseline, start x/y axis at 0, show label axes
  4. When presenting results in a table: (i) right align numbers, left align text, (ii) use commas as delimeter for large numbers: 1,000,000; not 1000000, (iii) label your columns/rows, (iv) the caption should explain any abbreviations, (v) the table must be referenced in text, explaining the main take-away but not just repeating results.

VI. Discussing Related Work

Think who is the most likely expert reviewer of your paper. How critically should you discuss their work? Orthogonally, their work is already published and contributed to the field. Always talk about related work in a positive way. Highlight the positive aspects when you introduce related work, then iterate over why your work is different.

Foo et al. introduced the first zero-overhead CFI instrumentation based on an optimized set check\~\cite{FoosWork}. While \sysname leverages a similar runtime check, it combines a static analysis with a dynamic modification scheme that allows on-the-fly adjustments of target sets while Foo's target sets were purely static.

VII. Repositories and Linting

Note that these are hard rules that we will enforce in the group :)

  • Push your code to a git repository, add a link to this repository in your slack channel and/or in the wiki of the project
  • Add a Makefile that builds the paper with rubber (or pdflatex). The repository contains an example Makefile.
  • Always use vector images, never rasterize (i.e., no JPG/PNG but rather export to PDF then embed PDF)
  • The full text of the paper is in a single file for easier editing/searching (the repository will take care of merging)
  • Break lines at 80 characters

Presentation tips

General rules:

  • Around one slide per minute of presentation.
  • If presentation is shorter than 15 minutes, no need for a overview of the content.
  • Always finish you presentation on the conclusion slide. You want your listener to read it again while you answer questions and not look at a blank "Q&A" slide.
  • Add slides number for easier referencing when your listener ask questions.
  • Aim for consistency in fonts, letter case, color among slides.
  • Short word sequences, not necessarily full sentences

Figures:

  • Make sure figures are readable (do not go under 10pt).
  • Google Slides does not allow for SVG import, make sure your PNG are big enough to not look fuzzy on the projector.
  • Add labels and units to figures, graphs, axes.

Giving the talk

  • Specify if you want questions during or after the talk
  • Watch the audience (pick 2-3 faces throughout the room and let your eyes wander during the talk)
  • Modulate your voice, speak clearly and make breaks between sentences/slides
  • Hold your hands still and don't constantly jump around, let the audience focus on the slides

More Repositories

1

retrowrite

RetroWrite -- Retrofitting compiler passes through binary rewriting
Python
644
star
2

printbf

Brainfuck interpreter inside printf
Brainfuck
596
star
3

FuzzGen

C++
288
star
4

magma

A ground-truth fuzzing benchmark suite based on real programs with real bugs.
HTML
267
star
5

T-Fuzz

Python
245
star
6

BOPC

Block Oriented Programming -- Compiler
Python
177
star
7

FuZZan

FuZZan: Efficient Sanitizer Metadata Design for Fuzzing
C++
117
star
8

malWASH

C++
114
star
9

datAFLow

A data-flow-guided fuzzer
Faust
106
star
10

USBFuzz

A Framework for fuzzing USB Drivers by Device Emulation
C
104
star
11

HexType

HexType: Efficient Detection of Type Confusion Errors for C++
C++
97
star
12

FishFuzz

AFL/AFL++ version FishFuzz
C
72
star
13

SMoTherSpectre

Proof-of-concept code for the SMoTherSpectre exploit.
C
71
star
14

FirmFuzz

Automated IoT firmware fuzzing framework.
C
70
star
15

Igor

C
67
star
16

libdetox

Fast and efficient binary translator
C
55
star
17

Gramatron

Coverage-guided grammar aware fuzzer that uses grammar automatons
C
55
star
18

memTrace

memTrace, a framework for lightweight memory tracing
C
53
star
19

Evocatio

C
52
star
20

fuzzing-seed-selection

"Seed Selection for Successful Fuzzing" artifact (at ISSTA 2021)
C++
39
star
21

HexPADS

HexPADS, a host-based, Performance-counter-based Attack Detection System
C
38
star
22

ShadowStack

LLVM Implementation of different ShadowStack schemes for x86_64
C++
36
star
23

RetroWrite-Tutorial

C
36
star
24

GLeeFuzz

LLVM
32
star
25

EPOXY

Root Repo for the EPOXY tool that applies Privilege Overlays on bare-metal systems
C
31
star
26

OSTEP-slides

Makefile
30
star
27

CFIXX

C++
26
star
28

SieveFuzz

Optimizing Directed Fuzzing via Target-tailored Program State Restriction
C
24
star
29

ViDeZZo

ViDeZZo source code.
C
21
star
30

pubstats

Python
19
star
31

teezz-fuzzer

19
star
32

mitiGate

Benchmark to test different stop the exploit mitigations
C
17
star
33

datashield

C++
16
star
34

HexVASAN

C++
14
star
35

AutoBib

AutoBib: create beautiful bib files and html publication pages automagically
Python
13
star
36

specrop

Code repository for experiments in SpecROP paper
C
9
star
37

nesCheck

C++
8
star
38

hexhive.github.io

HexHive homepage
HTML
8
star
39

specrop-public

Code repository for experiments in SpecROP paper
C
6
star
40

WarpAttack

JavaScript
6
star
41

retrowrite-dev

Retrowrite Development (Internal) Repository
6
star
42

Crystallizer

A hybrid analysis framework to aid in uncovering deserialization vulnerabilities
Java
6
star
43

EPOXY-llvm

Fork of LLVM for used to create EPOXY
C++
5
star
44

SyzRisk

Official repository of SyzRisk [ASIA CCS'24]
Go
5
star
45

IOVFI

An accurate and resilient semantic function identifier
Python
5
star
46

midas

Systematic Kernel TOCTTOU Protection
C
5
star
47

simple_attacks

A set of simple buggy programs with corresponding exploits and simple shellcode
C
5
star
48

halucinator-tutorial

Tutorial for HALucinator
C
4
star
49

dis-cover

Disassemble binaries and recover as much info as possible
Python
4
star
50

teezz-ca-driver

C
4
star
51

CUP

4
star
52

teezz-caid

TEEzz's Client Application Identification
Python
3
star
53

adaptSTM

adaptSTM, a competitive, word-based STM library that is based on a global clock and an array of combined global versions (timestamps) and locks.
C
3
star
54

EPOXY-clang

Fork of Clang used to create EPOXY
C++
3
star
55

HyperPill

3
star
56

WOOT21

HTML
2
star
57

GAENScan

Java
2
star
58

dis-cover-packages-analysis

Debian C++ packages analysis with the dis-cover tool
Jupyter Notebook
2
star
59

teezz-fuzzing-engine

Python
2
star
60

SURGEON

Performant, flexible, and accurate re-hosting via transplantation
C
2
star
61

BLURtooth

1
star
62

teezz-introspection

C++
1
star
63

dibartolomeo-msthesis

Luca Di Bartolomeo's master thesis
TeX
1
star
64

seccell-seL4

The seL4 microkernel
C
1
star
65

se-valgrind

C
1
star
66

dimva24

HTML
1
star