diff --git a/nasm/README.md b/nasm/README.md new file mode 100644 index 00000000..14e2e875 --- /dev/null +++ b/nasm/README.md @@ -0,0 +1,25 @@ +# Netwide Assembler + +This is the netwide assembler and it is meant to be used in the binary compatibility mode of unikraft. + +## Content +- sample_code.s: a sample assembly code file that can be assembled using nasm. +- usr/bin/nasm: the nasm binary +- lib/ & lib64/: the required libraries for nasm + +## Extract dynamic libraries +```../extract.sh usr/bin/nasm``` + +output: +``` +Copying /lib/x86_64-linux-gnu/libc.so.6 ... +Copying /lib64/ld-linux-x86-64.so.2 ... +``` + +## Run on linux +```nasm sample_code.s``` + +## Run on unikraft +```./run.sh -r ../dynamic-apps/nasm/ usr/bin/nasm sample_code.s``` + +This should generate the output file ```sample_code``` which is the assembled machine code generated by nasm. diff --git a/nasm/lib/x86_64-linux-gnu/libc.so.6 b/nasm/lib/x86_64-linux-gnu/libc.so.6 new file mode 100644 index 00000000..db27b090 Binary files /dev/null and b/nasm/lib/x86_64-linux-gnu/libc.so.6 differ diff --git a/nasm/lib64/ld-linux-x86-64.so.2 b/nasm/lib64/ld-linux-x86-64.so.2 new file mode 100755 index 00000000..3f3b4e0d Binary files /dev/null and b/nasm/lib64/ld-linux-x86-64.so.2 differ diff --git a/nasm/sample_code.s b/nasm/sample_code.s new file mode 100644 index 00000000..6141c4b5 --- /dev/null +++ b/nasm/sample_code.s @@ -0,0 +1,31 @@ +BITS 64 + +xor rax, rax +test rdi, rdi +jz end + +loop: +cmp byte [rdi], 0 +jz end + +xor rbx, rbx +mov bl, byte [rdi] +cmp bl, 0x5a +ja loop_end + +push rax +push rdi +mov rdi, rbx +mov rax, 0x403000 +call rax +pop rdi +mov byte [rdi], al +pop rax +inc rax + +loop_end: +inc rdi +jmp loop + +end: +ret diff --git a/nasm/usr/bin/nasm b/nasm/usr/bin/nasm new file mode 100755 index 00000000..1aa30adb Binary files /dev/null and b/nasm/usr/bin/nasm differ