Assembly 2


x86_64 Assembly


Packages required:

  • nasm – the Netwide Assembler, a portable 80×86 assembler
  • ld – The GNU linker (compiler)

User Input


section .data
        text1 db "What is your name? "
        text2 db "Hello, "

section .bss
        name resb 16

section .text
        global _start

_start:

        call _printText1
        call _getName
        call _printText2
        call _printName

        mov rax, 60
        mov rdi, 0
        syscall

_getName:
        mov rax, 0
        mov rdi, 0
        mov rsi, name
        mov rdx, 16
        syscall
        
_printText1:
        mov rax, 1
        mov rdi, 1
        mov rsi, text1
        mov rdx, 19
        syscall
        ret

_printText2:
        mov rax, 1
        mov rdi, 1
        mov rsi, text2
        mov rdx, 7
        syscall
        ret

_printName:
        mov rax, 1
        mov rdi, 1
        mov rsi, name
        mov rdx, 16
        syscall
        ret


Breakdown

There are 4 subroutines in this program:

  • _printText1
  • _getName
  • _printText2
  • _printName

_getName utilizes the read syscall and stores the user input


The name variable has 16 bytes assigned it , a basic buffer overflow can be executed to inject a command.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s