Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .global _main
- .align 2
- _main:
- bl _new_sock
- tbnz x0, #31, _err_exit
- sub sp, sp, #16
- str w0, [sp]
- ldr w0, [sp]
- bl _connect
- tbnz x0, #31, _err_exit
- ldr w0, [sp]
- bl _send
- ldr w0, [sp]
- bl _close
- tbnz x0, #31, _err_exit
- add sp, sp, #16
- b _exit
- _new_sock:
- mov x0, #2 ; AF_INET
- mov x1, #1 ; SOCK_STREAM
- mov x2, #0
- mov x16, #97 ; int socket(int domain, int type, int protocol)
- svc #0
- ret
- _connect:
- sub sp, sp, #16
- ; sin_len
- mov w8, #0
- strb w8, [sp]
- ; sin_family
- mov w8, #2 ; AF_INET
- strb w8, [sp, #1]
- ; sin_port
- mov w8, #36895 ; htons(8080)
- strh w8, [sp, #2]
- ; sin_addr: 127.0.0.1
- mov w8, #0x007F ; 0.127
- movk w8, #0x0100, lsl #16 ; 1.0
- str w8, [sp, #4]
- ; sin_zero
- mov x8, #0
- str x8, [sp, #8]
- mov x1, sp
- mov x2, #16
- mov x16, #98 ; int connect(int s, caddr_t name, socklen_t namelen)
- svc #0
- add sp, sp, #16
- ret
- _send:
- sub sp, sp, #16
- str w0, [sp] ; store fd
- adr x0, _msg
- bl _strlen
- str x0, [sp, #4] ; store length of string
- ldr w0, [sp]
- add x1, sp, #4
- mov x2, #8 ; size_t
- mov x16, #4 ; user_ssize_t write(int fd, user_addr_t cbuf, user_size_t nbyte);
- svc #0
- tbnz x0, #31, _err_exit
- ldr w0, [sp]
- adr x1, _msg
- ldr x2, [sp, #4]
- mov x16, #4 ; user_ssize_t write(int fd, user_addr_t cbuf, user_size_t nbyte);
- svc #0
- tbnz x0, #31, _err_exit
- add sp, sp, #16
- ret
- _close:
- mov x16, #6 ; int close(int fd);
- svc #0
- ret
- _err_exit:
- mov x0, #1 ; stdout
- adr x1, _err_msg
- mov x2, #20
- mov x16, #4 ; user_ssize_t write(int fd, user_addr_t cbuf, user_size_t nbyte)
- svc #0
- mov x0, #1
- mov x16, #1 ; void exit(int rval)
- svc #0
- _exit:
- mov x0, #0
- mov x16, #1 ; void exit(int rval)
- svc #0
- _addr:
- .ascii "127.0.0.1"
- .align 2
- _msg:
- .asciz "hello"
- .align 2
- _err_msg:
- .ascii "Some error occured\n"
- .align 2
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement