Advertisement
asteroidsteam

ENTRY0 - 'echo' command MACOS

Jan 6th, 2019
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. entry0 (char *arg1, int arg2, int arg4);
  2. |           ; var char *local_38h @ rbp-0x38
  3. |           ; var int local_30h @ rbp-0x30
  4. |           ; var int local_2eh @ rbp-0x2e
  5. |           ; var int local_2ch @ rbp-0x2c
  6. |           ; arg char *arg1 @ rdi
  7. |           ; arg int arg2 @ rsi
  8. |           ; arg int arg4 @ rcx
  9. |           0x100000c3f      55             push rbp                   ; [00] -r-x section size 577 named 0.__TEXT.__text
  10. |           0x100000c40      4889e5         mov rbp, rsp
  11. |           0x100000c43      4157           push r15
  12. |           0x100000c45      4156           push r14
  13. |           0x100000c47      4155           push r13
  14. |           0x100000c49      4154           push r12
  15. |           0x100000c4b      53             push rbx
  16. |           0x100000c4c      4883ec18       sub rsp, 0x18
  17. |           0x100000c50      4889f3         mov rbx, rsi               ; arg2
  18. |           0x100000c53      4189ff         mov r15d, edi              ; arg1
  19. |           0x100000c56      66c745d02000   mov word [local_30h], 0x20 ; 32
  20. |           0x100000c5c      66c745d20a00   mov word [local_2eh], 0xa
  21. |           0x100000c62      4c8b33         mov r14, qword [rbx]
  22. |           0x100000c65      488b7b08       mov rdi, qword [rbx + 8]   ; [0x8:8]=-1 ; 8
  23. |           0x100000c69      4c8d6b08       lea r13, [rbx + 8]         ; 8
  24. |           0x100000c6d      4531e4         xor r12d, r12d
  25. |           0x100000c70      4885ff         test rdi, rdi
  26. |           0x100000c73      4c8975c8       mov qword [local_38h], r14
  27. |       ,=< 0x100000c77      7410           je 0x100000c89
  28. |       |   0x100000c79      488d35180300.  lea rsi, [0x100000f98]     ; section.4.__TEXT.__cstring ; "-n" ; const char *s2
  29. |       |   0x100000c80      e80d020000     call sym.imp.strcmp        ; int strcmp(const char *s1, const char *s2)
  30. |       |   0x100000c85      85c0           test eax, eax
  31. |      ,==< 0x100000c87      7409           je 0x100000c92
  32. |      ||   ; CODE XREF from entry0 (0x100000c77)
  33. |      |`-> 0x100000c89      c745d4000000.  mov dword [local_2ch], 0
  34. |      |,=< 0x100000c90      eb11           jmp 0x100000ca3
  35. |      ||   ; CODE XREF from entry0 (0x100000c87)
  36. |      `--> 0x100000c92      4883c310       add rbx, 0x10
  37. |       |   0x100000c96      41ffcf         dec r15d
  38. |       |   0x100000c99      c745d4010000.  mov dword [local_2ch], 1
  39. |       |   0x100000ca0      4989dd         mov r13, rbx
  40. |       |   ; CODE XREF from entry0 (0x100000c90)
  41. |       `-> 0x100000ca3      4183ff01       cmp r15d, 1                ; 1
  42. |           0x100000ca7      438d443ffd     lea eax, [r15 + r15 - 3]
  43. |           0x100000cac      440f4fe0       cmovg r12d, eax
  44. |           0x100000cb0      4963fc         movsxd rdi, r12d
  45. |           0x100000cb3      48c1e704       shl rdi, 4
  46. |           0x100000cb7      4883c710       add rdi, 0x10              ; size_t size
  47. |           0x100000cbb      e8cc010000     call sym.imp.malloc        ;  void *malloc(size_t size)
  48. |           0x100000cc0      4989c6         mov r14, rax
  49. |           0x100000cc3      4d85f6         test r14, r14
  50. |       ,=< 0x100000cc6      0f84f2000000   je 0x100000dbe
  51. |       |   0x100000ccc      498b5d00       mov rbx, qword [r13]
  52. |       |   0x100000cd0      4885db         test rbx, rbx
  53. |      ,==< 0x100000cd3      7473           je 0x100000d48
  54. |      ||   0x100000cd5      4983c508       add r13, 8
  55. |      ||   0x100000cd9      4d89f7         mov r15, r14
  56. |      ||   0x100000cdc      4983c710       add r15, 0x10
  57. |     ,===< 0x100000ce0      eb1a           jmp 0x100000cfc
  58. |     |||   ; CODE XREF from entry0 (0x100000d44)
  59. |    .----> 0x100000ce2      488d45d0       lea rax, [local_30h]
  60. |    :|||   0x100000ce6      498907         mov qword [r15], rax
  61. |    :|||   0x100000ce9      49c747080100.  mov qword [r15 + 8], 1
  62. |    :|||   0x100000cf1      4983c508       add r13, 8
  63. |    :|||   0x100000cf5      4983c720       add r15, 0x20
  64. |    :|||   0x100000cf9      4889cb         mov rbx, rcx               ; arg4
  65. |    :|||   ; CODE XREF from entry0 (0x100000ce0)
  66. |    :`---> 0x100000cfc      4889df         mov rdi, rbx               ; const char *s
  67. |    : ||   0x100000cff      e89a010000     call sym.imp.strlen        ; size_t strlen(const char *s)
  68. |    : ||   0x100000d04      498b4d00       mov rcx, qword [r13]
  69. |    : ||   0x100000d08      4883f802       cmp rax, 2                 ; 2
  70. |    :,===< 0x100000d0c      7227           jb 0x100000d35
  71. |    :|||   0x100000d0e      4885c9         test rcx, rcx
  72. |   ,=====< 0x100000d11      7522           jne 0x100000d35
  73. |   |:|||   0x100000d13      807c03fe5c     cmp byte [rbx + rax - 2], 0x5c ; '\'
  74. |  ,======< 0x100000d18      751b           jne 0x100000d35
  75. |  ||:|||   0x100000d1a      488d50fe       lea rdx, [rax - 2]
  76. |  ||:|||   0x100000d1e      807c03ff63     cmp byte [rbx + rax - 1], 0x63 ; 'c'
  77. |  ||:|||   0x100000d23      8b75d4         mov esi, dword [local_2ch]
  78. |  ||:|||   0x100000d26      bf01000000     mov edi, 1
  79. |  ||:|||   0x100000d2b      0f44f7         cmove esi, edi
  80. |  ||:|||   0x100000d2e      8975d4         mov dword [local_2ch], esi
  81. |  ||:|||   0x100000d31      480f44c2       cmove rax, rdx
  82. |  ||:|||   ; CODE XREFS from entry0 (0x100000d0c, 0x100000d11, 0x100000d18)
  83. |  ``-`---> 0x100000d35      4885c9         test rcx, rcx
  84. |    : ||   0x100000d38      498b55f8       mov rdx, qword [r13 - 8]
  85. |    : ||   0x100000d3c      498957f0       mov qword [r15 - 0x10], rdx
  86. |    : ||   0x100000d40      498947f8       mov qword [r15 - 8], rax
  87. |    `====< 0x100000d44      759c           jne 0x100000ce2
  88. |     ,===< 0x100000d46      eb03           jmp 0x100000d4b
  89. |     |||   ; CODE XREF from entry0 (0x100000cd3)
  90. |     |`--> 0x100000d48      4d89f7         mov r15, r14
  91. |     | |   ; CODE XREF from entry0 (0x100000d46)
  92. |     `---> 0x100000d4b      8b45d4         mov eax, dword [local_2ch]
  93. |       |   0x100000d4e      85c0           test eax, eax
  94. |      ,==< 0x100000d50      7512           jne 0x100000d64
  95. |      ||   0x100000d52      41ffc4         inc r12d
  96. |      ||   0x100000d55      488d45d2       lea rax, [local_2eh]
  97. |      ||   0x100000d59      498907         mov qword [r15], rax
  98. |      ||   0x100000d5c      49c747080100.  mov qword [r15 + 8], 1
  99. |      ||   ; CODE XREF from entry0 (0x100000d50)
  100. |      `--> 0x100000d64      4585e4         test r12d, r12d
  101. |      ,==< 0x100000d67      7434           je 0x100000d9d
  102. |      ||   ; CODE XREF from entry0 (0x100000d9b)
  103. |     .---> 0x100000d69      4181fc010400.  cmp r12d, 0x401            ; 1025
  104. |     :||   0x100000d70      bb00040000     mov ebx, 0x400             ; 1024
  105. |     :||   0x100000d75      410f4cdc       cmovl ebx, r12d
  106. |     :||   0x100000d79      bf01000000     mov edi, 1
  107. |     :||   0x100000d7e      4c89f6         mov rsi, r14
  108. |     :||   0x100000d81      89da           mov edx, ebx
  109. |     :||   0x100000d83      e822010000     call sym.imp.writev
  110. |     :||   0x100000d88      4883f8ff       cmp rax, 0xffffffffffffffff
  111. |    ,====< 0x100000d8c      7420           je 0x100000dae
  112. |    |:||   0x100000d8e      4863c3         movsxd rax, ebx
  113. |    |:||   0x100000d91      48c1e004       shl rax, 4
  114. |    |:||   0x100000d95      4901c6         add r14, rax               ; '#'
  115. |    |:||   0x100000d98      4129dc         sub r12d, ebx
  116. |    |`===< 0x100000d9b      75cc           jne 0x100000d69
  117. |    | ||   ; CODE XREF from entry0 (0x100000d67)
  118. |    | `--> 0x100000d9d      31c0           xor eax, eax
  119. |    |  |   0x100000d9f      4883c418       add rsp, 0x18
  120. |    |  |   0x100000da3      5b             pop rbx
  121. |    |  |   0x100000da4      415c           pop r12
  122. |    |  |   0x100000da6      415d           pop r13
  123. |    |  |   0x100000da8      415e           pop r14
  124. |    |  |   0x100000daa      415f           pop r15
  125. |    |  |   0x100000dac      5d             pop rbp
  126. |    |  |   0x100000dad      c3             ret
  127. |    |  |   ; CODE XREF from entry0 (0x100000d8c)
  128. |    `----> 0x100000dae      488d35ed0100.  lea rsi, str.write         ; 0x100000fa2 ; "write"
  129. |       |   0x100000db5      488b7dc8       mov rdi, qword [local_38h]
  130. |       |   0x100000db9      e810000000     call sym.func.100000dce
  131. |       |   ; CODE XREF from entry0 (0x100000cc6)
  132. |       `-> 0x100000dbe      488d35d60100.  lea rsi, str.malloc        ; 0x100000f9b ; "malloc"
  133. |           0x100000dc5      488b7dc8       mov rdi, qword [local_38h]
  134. |           0x100000dc9      e800000000     call sym.func.100000dce
  135. |           ;-- func.100000dce:
  136. |           ; CALL XREFS from entry0 (0x100000db9, 0x100000dc9)
  137. |           0x100000dce      55             push rbp
  138. |           0x100000dcf      4889e5         mov rbp, rsp
  139. |           0x100000dd2      4157           push r15
  140. |           0x100000dd4      4156           push r14
  141. |           0x100000dd6      53             push rbx
  142. |           0x100000dd7      50             push rax
  143. |           0x100000dd8      4989f7         mov r15, rsi
  144. |           0x100000ddb      4889fb         mov rbx, rdi
  145. |           0x100000dde      e89d000000     call sym.imp.__error
  146. |           0x100000de3      8b38           mov edi, dword [rax]       ; int errnum
  147. |           0x100000de5      e8ae000000     call sym.imp.strerror      ; char *strerror(int errnum)
  148. |           0x100000dea      4989c6         mov r14, rax
  149. |           0x100000ded      4889df         mov rdi, rbx               ; const char *s
  150. |           0x100000df0      e8a9000000     call sym.imp.strlen        ; size_t strlen(const char *s)
  151. |           0x100000df5      bf02000000     mov edi, 2                 ; int fd
  152. |           0x100000dfa      4889de         mov rsi, rbx               ; void *ptr
  153. |           0x100000dfd      4889c2         mov rdx, rax               ; size_t nbytes
  154. |           0x100000e00      e89f000000     call sym.imp.write         ; ssize_t write(int fd, void *ptr, size_t nbytes)
  155. |           0x100000e05      488d1d9c0100.  lea rbx, [0x100000fa8]     ; ": " ; 4294971304
  156. |           0x100000e0c      bf02000000     mov edi, 2                 ; int fd
  157. |           0x100000e11      ba02000000     mov edx, 2                 ; size_t nbytes
  158. |           0x100000e16      4889de         mov rsi, rbx               ; void *ptr
  159. |           0x100000e19      e886000000     call sym.imp.write         ; ssize_t write(int fd, void *ptr, size_t nbytes)
  160. |           0x100000e1e      4c89ff         mov rdi, r15               ; const char *s
  161. |           0x100000e21      e878000000     call sym.imp.strlen        ; size_t strlen(const char *s)
  162. |           0x100000e26      bf02000000     mov edi, 2                 ; int fd
  163. |           0x100000e2b      4c89fe         mov rsi, r15               ; void *ptr
  164. |           0x100000e2e      4889c2         mov rdx, rax               ; size_t nbytes
  165. |           0x100000e31      e86e000000     call sym.imp.write         ; ssize_t write(int fd, void *ptr, size_t nbytes)
  166. |           0x100000e36      bf02000000     mov edi, 2                 ; int fd
  167. |           0x100000e3b      ba02000000     mov edx, 2                 ; size_t nbytes
  168. |           0x100000e40      4889de         mov rsi, rbx               ; void *ptr
  169. |           0x100000e43      e85c000000     call sym.imp.write         ; ssize_t write(int fd, void *ptr, size_t nbytes)
  170. |           0x100000e48      4c89f7         mov rdi, r14               ; const char *s
  171. |           0x100000e4b      e84e000000     call sym.imp.strlen        ; size_t strlen(const char *s)
  172. |           0x100000e50      bf02000000     mov edi, 2                 ; int fd
  173. |           0x100000e55      4c89f6         mov rsi, r14               ; void *ptr
  174. |           0x100000e58      4889c2         mov rdx, rax               ; size_t nbytes
  175. |           0x100000e5b      e844000000     call sym.imp.write         ; ssize_t write(int fd, void *ptr, size_t nbytes)
  176. |           0x100000e60      488d35440100.  lea rsi, [0x100000fab]     ; "\n" ; 4294971307 ; void *ptr
  177. |           0x100000e67      bf02000000     mov edi, 2                 ; int fd
  178. |           0x100000e6c      ba01000000     mov edx, 1                 ; size_t nbytes
  179. |           0x100000e71      e82e000000     call sym.imp.write         ; ssize_t write(int fd, void *ptr, size_t nbytes)
  180. |           0x100000e76      bf01000000     mov edi, 1                 ; int status
  181. \           0x100000e7b      e806000000     call sym.imp.exit          ; void exit(int status)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement