From f9f2b6bb2d685556bc3346ca3f7e55f4c865fc16 Mon Sep 17 00:00:00 2001 From: johannst Date: Tue, 24 Nov 2020 21:23:08 +0100 Subject: add process init chapter Add chapter on process initialization. Add program to visualize data provided by the Linux Kernel as specified in the SysV ABI. Add utils for syscalls and printing + tests. --- 02_process_init/entry.S | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 02_process_init/entry.S (limited to '02_process_init/entry.S') diff --git a/02_process_init/entry.S b/02_process_init/entry.S new file mode 100644 index 0000000..50425ba --- /dev/null +++ b/02_process_init/entry.S @@ -0,0 +1,27 @@ +// Copyright (c) 2020 Johannes Stoelp + +#include + +.intel_syntax noprefix + +.section .text, "ax", @progbits +.global _start +_start: + // $rsp is guaranteed to be 16-byte aligned. + + // Clear $rbp as specified by the SysV AMD64 ABI. + xor rbp, rbp + + // Load pointer to process context prepared by execve(2) syscall as + // specified in the SysV AMD64 ABI. + // Save pointer in $rdi which is the arg0 (int/ptr) register. + lea rdi, [rsp] + + // Stack frames must be 16-byte aligned before control is transfered to the + // callees entry point. + call entry + + // Call exit(0) syscall. + mov rdi, 0 + mov rax, __NR_exit + syscall -- cgit v1.2.3