From 4d380e0b82a77240bc5859c13161e90128d15f0d Mon Sep 17 00:00:00 2001 From: Andy Spencer Date: Sun, 16 Dec 2018 06:06:33 +0000 Subject: [PATCH] Update C Compiling presentation. --- .gitignore | 7 + cc/cc.pdf | Bin 0 -> 50474 bytes cc/cc.tex | 62 ++++++-- cc/elf.svg | 340 ++++++++++++++++++++++++++++++++++++++++++++ cc/makefile | 5 +- cc/source/hello.c | 7 + cc/source/makefile | 15 ++ cc/source/syscall.c | 9 ++ 8 files changed, 431 insertions(+), 14 deletions(-) create mode 100644 cc/cc.pdf create mode 100644 cc/elf.svg create mode 100644 cc/source/hello.c create mode 100644 cc/source/makefile create mode 100644 cc/source/syscall.c diff --git a/.gitignore b/.gitignore index 0c0b127..e3102e2 100644 --- a/.gitignore +++ b/.gitignore @@ -5,6 +5,7 @@ # C output *.o *.a +*.so # Latex output *.aux @@ -14,3 +15,9 @@ *.snm *.toc *.vrb + +# CC presentation +cc/elf.pdf +cc/packages/ +cc/source/hello +cc/source/syscall diff --git a/cc/cc.pdf b/cc/cc.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c09f5130e6714fe41b89e17f98815065326e62b7 GIT binary patch literal 50474 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 z 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 + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ... + .data + .rodata + .text + Program header table + ELF header + Section header table + + + + + + + + + + + + + ⎧⎪⎨⎪⎩ + ⎧⎨⎩ + diff --git a/cc/makefile b/cc/makefile index ae699e6..7ce937e 100644 --- a/cc/makefile +++ b/cc/makefile @@ -1,5 +1,8 @@ -build: +build: elf.pdf runlatex cc.tex +%.pdf: %.svg + inkscape --export-pdf=$@ $< + clean: rm -f *.aux *.log *.nav *.out *.pdf *.snm *.toc *.vrb diff --git a/cc/source/hello.c b/cc/source/hello.c new file mode 100644 index 0000000..099e13c --- /dev/null +++ b/cc/source/hello.c @@ -0,0 +1,7 @@ +#include + +int main() +{ + printf("hello, sfvlug!\n"); + return 0; +} diff --git a/cc/source/makefile b/cc/source/makefile new file mode 100644 index 0000000..ce76496 --- /dev/null +++ b/cc/source/makefile @@ -0,0 +1,15 @@ +CC = gcc +LD = ld +CFLAGS = -Wall -g -static + +default: hello syscall + +syscall: syscall.c makefile + $(CC) $(CFLAGS) -c -o syscall.o syscall.c + $(LD) -static -o syscall syscall.o -lc + +hello: %: %.o + $(CC) $(CFLAGS) -o $@ $+ + +%.o: %.c makefile + $(CC) $(CFLAGS) -c -o $@ $< diff --git a/cc/source/syscall.c b/cc/source/syscall.c new file mode 100644 index 0000000..63a2b58 --- /dev/null +++ b/cc/source/syscall.c @@ -0,0 +1,9 @@ +#define _GNU_SOURCE +#include +#include + +void _start() +{ + syscall(SYS_write, 0, "hello, world!\n", 14); + syscall(SYS_exit, 0); +} -- 2.43.2