Exit in Assembly :
For writing exit assembly program we need to check exit syscall reference number .
I use this online man page :
https://syscalls.kernelgrok.com/
From above we can conclude that for exit system call we need 2 registers :
[x] EAX => Eax should contain exit sys call number (0x01)
[x] EBX => Ebx should contain error code (0 for normal exit)
A good shell-code :
[x] Should be Null free
[x] Smaller in length
[x] Position Independent
Below is my code :
I wrote a small script to compile and assemble nasm program and extract the shellcode from it then saving the shellcode into a c file and compiling the new c program.
Here is my script :
For writing exit assembly program we need to check exit syscall reference number .
I use this online man page :
https://syscalls.kernelgrok.com/
From above we can conclude that for exit system call we need 2 registers :
[x] EAX => Eax should contain exit sys call number (0x01)
[x] EBX => Ebx should contain error code (0 for normal exit)
A good shell-code :
[x] Should be Null free
[x] Smaller in length
[x] Position Independent
Below is my code :
I wrote a small script to compile and assemble nasm program and extract the shellcode from it then saving the shellcode into a c file and compiling the new c program.
Here is my script :

Tweaked some instructions :p
Next you can debug and check the execution in gdb by setting breakpoints and stepping instructions one by one .
Below is my gdb console before calling interrupt int 0x80 showing the value of eax and ebx as expected :)

great... 👌🙏
ReplyDeleteNice !!!!
ReplyDeleteShellcode Length: 8
ReplyDelete--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_ACCERR, si_addr=0x555555558038} ---
+++ killed by SIGSEGV +++
zsh: segmentation fault strace -e exit ./shellcode