diff --git a/nasm/README.md b/nasm/README.md new file mode 100644 index 00000000..0e6b2859 --- /dev/null +++ b/nasm/README.md @@ -0,0 +1,43 @@ +# Netwide Assembler + +This is the (Nasm) 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 + +```console +../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 + +```console +nasm sample_code.s +``` + +## Run on Unikraft + +```console +./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. + +We can use this command to check that everything worked properly: + +```console +objdump -D -b binary -m i386 -M intel,x86-64 sample_code +``` + 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