The Price of Scripting: DietLibC vs ASM

Just for fun.

I adapted the technique from this great article, to build a custom ELF 64

BITS 64
	        org 0x400000
  ehdr:                                                 ; Elf32_Ehdr
                db      0x7F, "ELF", 2, 1, 1, 0         ;   e_ident
        times 8 db      0
                dw      2                               ;   e_type
                dw      0x3e                            ;   e_machine
                dd      1                               ;   e_version
                dq      _start                          ;   e_entry
                dq      phdr - $$                       ;   e_phoff
                dq      0                               ;   e_shoff
                dd      0                               ;   e_flags
                dw      ehdrsize                        ;   e_ehsize
                dw      phdrsize                        ;   e_phentsize
                dw      1                               ;   e_phnum
                dw      0                               ;   e_shentsize
                dw      0                               ;   e_shnum
                dw      0                               ;   e_shstrndx
  
  ehdrsize      equ     $ - ehdr
  
  phdr:                                                 ; Elf32_Phdr
                dd      1                               ;   p_type
                dd      5                               ;   p_offset
	        dq      0
                dq      $$                              ;   p_vaddr
                dq      $$                              ;   p_paddr
                dq      filesize                        ;   p_filesz
                dq      filesize                        ;   p_memsz
                dq      0x1000                          ;   p_align
  
  phdrsize      equ     $ - phdr
	

_start:
	mov     rax, 1
	mov     rdi, 1
	mov     rsi, msg
	mov     rdx, 14
	syscall	
	mov     rax, 0
	mov     rdi, 0
	mov     rsi, key
	mov     rdx, 1
	syscall
	mov    rax, 60
	mov    rdi, 0
	syscall


	msg 	db      "hello, world!",0x0a
	key 	db      0

	
	filesize equ $ - $$

Compile with

 nasm -f bin -o hellos hello64.asm; chmod +x hellos

And get

Language | Size       | Strip   | Mem  | Virt Mem | Res Mem | Wr Mem | Sh Mem
---------+------------+---------+------+----------+---------+--------+---------
ASM ELF  |  201       |     264 |  8 K | 148 K    |   4 K   |  8 K   | N/A

Yes… it grows when we try to strip it!

2 Likes