commit 8e2ad0e8d8ada74bb65a38dfa518ddf7c78c43a8 Author: lowlevellearning Date: Fri May 19 08:38:45 2023 -0400 Initial commit diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..ed051a0 --- /dev/null +++ b/Makefile @@ -0,0 +1,15 @@ +default: all + +all: powerpc arm aarch64 + +powerpc: + powerpc-linux-gnu-gcc -o ppc rosetta.c -static + powerpc-linux-gnu-objdump -d -Mintel ./ppc > ppc-dump + +arm: + arm-linux-gnueabi-gcc -o arm rosetta.c -static + arm-linux-gnueabi-objdump -d -Mintel ./arm > arm-dump + +aarch64: + aarch64-linux-gnu-gcc -o aarch64 rosetta.c -static + aarch64-linux-gnu-objdump -d -Mintel ./aarch64 > aarch64-dump diff --git a/README.md b/README.md new file mode 100644 index 0000000..2e3b141 --- /dev/null +++ b/README.md @@ -0,0 +1,27 @@ +# The ASM Rosetta Stone +This respository contains the ASM Rosetta Stone, a small snippet of C +that you can use to learn a new assembly variant in a short amount of +time. + +## Checklist +- registers + - names [] + - width [] +- stack memory + - how is it used [] + - prolouge, epilouge [] +- calling conventions + - arguments [] + - return value [] + - return address [] +- control flow + - branching [] + - conditional branches[] + - calls [] +- syscall interface [] + + + + + + diff --git a/rosetta.c b/rosetta.c new file mode 100644 index 0000000..c0d4b98 --- /dev/null +++ b/rosetta.c @@ -0,0 +1,38 @@ +#include +#include +#include + +// calling conventions +int returny_func(int *a, char b, short c, int d) +{ + // return value + return b+c; +} + +int main(int argc, char **argv) +{ + // 64-bit + long long mylong = 0xbabecafef00dface; + + // 32-bit + int myint = 0xdeadf00d; + + // string operations + char str[] = "mystr"; + + // canary value + int i = 1337; + + // control flow + while (i) + { + i--; + } + + int ret = returny_func(&i, 0x42, 0x69, 0x31337); + + // syscall interface + syscall(SYS_write, 1, "done:)\n", 7); + + return 32; +} diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000..204cd79 --- /dev/null +++ b/setup.sh @@ -0,0 +1,3 @@ +#!/bin/sh + +sudo apt install gcc-aarch64-linux-gnu gcc-arm-linux-gnueabi gcc-powerpc-linux-gnu