[*] Binary protection state of connmand
Partial RELRO No Canary found NX disabled No PIE No RPATH No RUNPATH No Symbols
[*] Function mmap tear down of connmand
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/connmand @ 0x3cb70 */
| #include <stdint.h>
|
; (fcn) fcn.0003cb70 () | void fcn_0003cb70 (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_8h;
| int32_t var_8h_2;
| int32_t var_10h;
| size_t length;
| int32_t var_40h_2;
| int32_t var_7ch;
| r0 = arg1;
| r1 = arg2;
0x0003cb70 push {r4, r5, r6, r7, lr} |
0x0003cb74 mov r7, r0 | r7 = r0;
0x0003cb78 sub sp, sp, 0x7c |
0x0003cb7c mov r4, r1 | r4 = r1;
0x0003cb80 mov r0, r2 | r0 = r2;
0x0003cb84 mov r1, 0x80000 | r1 = 0x80000;
0x0003cb88 bl 0x1ba2c | r0 = open64 ();
0x0003cb8c subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 < r0) {
0x0003cb90 blt 0x3cbac | goto label_1;
| }
0x0003cb94 add r1, sp, 0x10 | r1 += var_10h;
0x0003cb98 bl 0x1b918 | r0 = fstat64 ();
0x0003cb9c cmp r0, 0 |
0x0003cba0 bge 0x3cbb4 |
| while (r1 != r3) {
| label_0:
0x0003cba4 mov r0, r5 | r0 = r5;
0x0003cba8 bl 0x1b66c | close (r0);
| label_1:
0x0003cbac mvn r4, 0 | r4 = ~0;
0x0003cbb0 b 0x3cc24 | goto label_2;
0x0003cbb4 ldrd r0, r1, [r4] | __asm ("ldrd r0, r1, [r4]");
0x0003cbb8 ldrd r2, r3, [sp, 0x40] | __asm ("ldrd r2, r3, [length]");
0x0003cbbc cmp r1, r3 |
0x0003cbc0 cmpeq r0, r2 | __asm ("cmpeq r0, r2");
0x0003cbc4 bne 0x3cba4 |
| }
0x0003cbc8 mov r2, 0 | r2 = 0;
0x0003cbcc mov r3, 0 | r3 = 0;
0x0003cbd0 strd r2, r3, [sp, 8] | __asm ("strd r2, r3, [var_8h]");
0x0003cbd4 mov r3, 1 | r3 = 1;
0x0003cbd8 mov r2, r3 | r2 = r3;
0x0003cbdc mov r1, r0 | r1 = r0;
0x0003cbe0 str r5, [sp] | *(sp) = r5;
0x0003cbe4 mov r0, 0 | r0 = 0;
0x0003cbe8 bl 0x1c08c | r0 = mmap64 ()
0x0003cbec sub r3, r0, 1 | r3 = r0 - 1;
0x0003cbf0 cmn r3, 3 |
0x0003cbf4 mov r6, r0 | r6 = r0;
| if (r3 > 3) {
0x0003cbf8 bhi 0x3cba4 | goto label_0;
| }
0x0003cbfc ldr r2, [r4] | r2 = *(r4);
0x0003cc00 mov r1, r0 | r1 = r0;
0x0003cc04 mov r0, r7 | r0 = r7;
0x0003cc08 bl 0x1c2cc | memcmp (r0, r1, r2);
0x0003cc0c ldr r1, [sp, 0x40] | r1 = length;
0x0003cc10 mov r4, r0 | r4 = r0;
0x0003cc14 mov r0, r6 | r0 = r6;
0x0003cc18 bl 0x1b4b0 | munmap (r0, r1);
0x0003cc1c mov r0, r5 | r0 = r5;
0x0003cc20 bl 0x1b66c | close (r0);
| label_2:
0x0003cc24 mov r0, r4 | r0 = r4;
0x0003cc28 add sp, sp, 0x7c |
0x0003cc2c pop {r4, r5, r6, r7, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/connmand @ 0x3cf78 */
| #include <stdint.h>
|
; (fcn) fcn.0003cf78 () | void fcn_0003cf78 () {
| int32_t var_0h;
| int32_t var_8h;
| int32_t var_8h_2;
| int32_t var_10h;
| int32_t var_20h;
| size_t var_40h;
| char * s;
| size_t length;
| int32_t var_a8h_2;
| int32_t var_1040h;
| int32_t var_3ch;
0x0003cf78 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0003cf7c ldr r0, [pc, 0x2d8] | r0 = *(0x3d258);
0x0003cf80 sub sp, sp, 0x1040 |
0x0003cf84 sub sp, sp, 0x3c |
0x0003cf88 mov r1, 0x80000 | r1 = 0x80000;
0x0003cf8c bl 0x1ba2c | r0 = open64 ();
0x0003cf90 subs sl, r0, 0 | sl = r0 - 0;
| if (sl < r0) {
0x0003cf94 blt 0x3cfb0 | goto label_5;
| }
0x0003cf98 add r1, sp, 0x78 | r1 += s;
0x0003cf9c bl 0x1b918 | r0 = fstat64 ();
0x0003cfa0 cmp r0, 0 |
0x0003cfa4 bge 0x3cfb8 |
| while (r3 > 3) {
0x0003cfa8 mov r0, sl | r0 = sl;
0x0003cfac bl 0x1b66c | close (r0);
| label_5:
0x0003cfb0 mov r4, 0 | r4 = 0;
0x0003cfb4 b 0x3d028 | goto label_6;
0x0003cfb8 mov r2, 0 | r2 = 0;
0x0003cfbc mov r3, 0 | r3 = 0;
0x0003cfc0 strd r2, r3, [sp, 8] | __asm ("strd r2, r3, [var_8h]");
0x0003cfc4 ldr r1, [sp, 0xa8] | r1 = length;
0x0003cfc8 mov r3, 1 | r3 = 1;
0x0003cfcc mov r2, r3 | r2 = r3;
0x0003cfd0 str sl, [sp] | *(sp) = sl;
0x0003cfd4 mov r0, 0 | r0 = 0;
0x0003cfd8 bl 0x1c08c | r0 = mmap64 ()
0x0003cfdc sub r3, r0, 1 | r3 = r0 - 1;
0x0003cfe0 cmn r3, 3 |
0x0003cfe4 mov r5, r0 | r5 = r0;
0x0003cfe8 bhi 0x3cfa8 |
| }
0x0003cfec ldrd r6, r7, [sp, 0xa8] | __asm ("ldrd r6, r7, [length]");
0x0003cff0 ldr fp, [pc, 0x268] | fp = "ZONE";
0x0003cff4 mov r8, r6 | r8 = r6;
0x0003cff8 mov sb, r7 | sb = r7;
0x0003cffc mov r4, r0 | r4 = r0;
| label_2:
0x0003d000 cmp r8, 6 |
0x0003d004 sbcs r3, sb, 0 | __asm ("sbcs r3, sb, 0");
| if (r8 >= 6) {
0x0003d008 bge 0x3d080 | goto label_7;
| }
0x0003d00c cmp r4, 0 |
0x0003d010 bne 0x3d0a4 |
| while (r4 == r0) {
| label_0:
0x0003d014 ldr r1, [sp, 0xa8] | r1 = length;
0x0003d018 mov r0, r5 | r0 = r5;
0x0003d01c bl 0x1b4b0 | munmap (r0, r1);
0x0003d020 mov r0, sl | r0 = sl;
0x0003d024 bl 0x1b66c | close (r0);
| label_6:
0x0003d028 ldr r3, [pc, 0x234] | r3 = "ZONE";
0x0003d02c ldr r2, [r3, 0x28] | r2 = *(0x3d288);
0x0003d030 mov r6, r3 | r6 = r3;
0x0003d034 tst r2, 1 |
| if ((r2 & 1) != 0) {
0x0003d038 beq 0x3d050 |
0x0003d03c mov r3, r4 | r3 = r4;
0x0003d040 ldr r2, [pc, 0x220] | r2 = *(0x3d264);
0x0003d044 ldr r1, [pc, 0x220] | r1 = "__connman_timezone_lookup";
0x0003d048 ldr r0, [pc, 0x220] | r0 = "src_timezone.c";
0x0003d04c bl 0x2acc4 | connman_debug ();
| }
0x0003d050 mov r1, 0x80000 | r1 = 0x80000;
0x0003d054 ldr r0, [pc, 0x218] | r0 = "%s:%s() sysconfig zone %s";
0x0003d058 bl 0x1ba2c | r0 = open64 ();
0x0003d05c subs r7, r0, 0 | r7 = r0 - 0;
| if (r7 >= r0) {
0x0003d060 bge 0x3d16c | goto label_8;
| }
0x0003d064 mov r0, r4 | r0 = r4;
0x0003d068 bl 0x1b60c | g_free ();
0x0003d06c mov r4, 0 | r4 = 0;
| label_4:
0x0003d070 mov r0, r4 | r0 = r4;
0x0003d074 add sp, sp, 0x1040 |
0x0003d078 add sp, sp, 0x3c |
0x0003d07c pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_7:
0x0003d080 mov r2, 4 | r2 = 4;
0x0003d084 mov r1, fp | r1 = fp;
0x0003d088 mov r0, r4 | r0 = r4;
0x0003d08c bl 0x1b6e4 | r0 = strncmp (r0, r1, r2);
0x0003d090 cmp r0, 0 |
| if (r0 != 0) {
0x0003d094 bne 0x3d138 | goto label_9;
| }
0x0003d098 cmp r5, r4 |
| if (r5 != r4) {
0x0003d09c bne 0x3d120 | goto label_10;
| }
0x0003d0a0 mov r4, r5 | r4 = r5;
| label_1:
0x0003d0a4 sub r3, r4, r5 | r3 = r4 - r5;
0x0003d0a8 subs r0, r6, r3 | r0 = r6 - r3;
0x0003d0ac mov r6, r0 | r6 = r0;
0x0003d0b0 mov r2, r0 | r2 = r0;
0x0003d0b4 mov r1, 0xa | r1 = 0xa;
0x0003d0b8 mov r0, r4 | r0 = r4;
0x0003d0bc bl 0x1c14c | memchr (r0, r1, r2);
0x0003d0c0 mov r1, 0x22 | r1 = 0x22;
0x0003d0c4 subs sb, r0, 0 | sb = r0 - 0;
| if (sb == r0) {
0x0003d0c8 subne r6, sb, r4 | r6 = sb - r4;
| }
| if (sb == r0) {
0x0003d0cc movne r2, r6 | r2 = r6;
| }
| if (sb == r0) {
0x0003d0d0 movne r6, r2 | r6 = r2;
| }
0x0003d0d4 mov r2, r6 | r2 = r6;
0x0003d0d8 mov r0, r4 | r0 = r4;
0x0003d0dc bl 0x1c14c | r0 = memchr (r0, r1, r2);
0x0003d0e0 subs r8, r0, 0 | r8 = r0 - 0;
| if (r8 == r0) {
0x0003d0e4 beq 0x3d160 | goto label_11;
| }
0x0003d0e8 add r6, r8, 1 | r6 = r8 + 1;
0x0003d0ec sub r2, sb, r8 | r2 = sb - r8;
0x0003d0f0 mov r1, 0x22 | r1 = 0x22;
0x0003d0f4 sub r2, r2, 1 | r2--;
0x0003d0f8 mov r0, r6 | r0 = r6;
0x0003d0fc bl 0x1c14c | r0 = memchr (r0, r1, r2);
0x0003d100 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x0003d104 subne r1, r4, r8 | r1 = r4 - r8;
| }
| if (r4 == r0) {
0x0003d108 subne r1, r1, 1 | r1--;
| }
| if (r4 == r0) {
0x0003d10c movne r0, r6 | r0 = r6;
| }
0x0003d110 beq 0x3d014 |
| }
| label_3:
0x0003d114 bl 0x1c6a4 | r0 = g_strndup ();
0x0003d118 mov r4, r0 | r4 = r0;
0x0003d11c b 0x3d014 | goto label_0;
| label_10:
0x0003d120 ldrb r3, [r4, -1] | r3 = *((r4 - 1));
0x0003d124 cmp r3, 0xa |
| if (r3 != 0xa) {
0x0003d128 bne 0x3d138 | goto label_9;
| }
0x0003d12c ldrb r3, [r4, 4] | r3 = *((r4 + 4));
0x0003d130 cmp r3, 0x3d |
| if (r3 == 0x3d) {
0x0003d134 beq 0x3d0a4 | goto label_1;
| }
| label_9:
0x0003d138 add r0, r4, 1 | r0 = r4 + 1;
0x0003d13c sub r2, r8, 1 | r2 = r8 - 1;
0x0003d140 mov r1, 0x5a | r1 = 0x5a;
0x0003d144 bl 0x1c14c | r0 = memchr (r0, r1, r2);
0x0003d148 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 == r0) {
0x0003d14c beq 0x3d014 | goto label_0;
| }
0x0003d150 sub r3, r4, r5 | r3 = r4 - r5;
0x0003d154 subs r8, r6, r3 | r8 = r6 - r3;
0x0003d158 sbc sb, r7, r3, asr 31 | __asm ("sbc sb, r7, r3, asr 31");
0x0003d15c b 0x3d000 | goto label_2;
| label_11:
0x0003d160 sub r1, r6, 5 | r1 = r6 - 5;
0x0003d164 add r0, r4, 5 | r0 = r4 + 5;
0x0003d168 b 0x3d114 | goto label_3;
| label_8:
0x0003d16c add r1, sp, 0x10 | r1 += var_10h;
0x0003d170 bl 0x1b918 | r0 = fstat64 ();
0x0003d174 cmp r0, 0 |
| if (r0 >= 0) {
0x0003d178 blt 0x3d230 |
0x0003d17c ldr r3, [sp, 0x20] | r3 = var_20h;
0x0003d180 and r3, r3, 0xf000 | r3 &= 0xf000;
0x0003d184 cmp r3, 0x8000 |
| if (r3 == 0x8000) {
0x0003d188 bne 0x3d1c0 |
0x0003d18c mov r2, 0 | r2 = 0;
0x0003d190 mov r3, 0 | r3 = 0;
0x0003d194 strd r2, r3, [sp, 8] | __asm ("strd r2, r3, [var_8h]");
0x0003d198 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0003d19c mov r3, 1 | r3 = 1;
0x0003d1a0 mov r2, r3 | r2 = r3;
0x0003d1a4 str r7, [sp] | *(sp) = r7;
0x0003d1a8 mov r0, 0 | r0 = 0;
0x0003d1ac bl 0x1c08c | r0 = mmap64 ()
0x0003d1b0 sub r3, r0, 1 | r3 = r0 - 1;
0x0003d1b4 cmn r3, 3 |
0x0003d1b8 mov r5, r0 | r5 = r0;
| if (r3 < 3) {
0x0003d1bc bls 0x3d1d0 | goto label_12;
| }
| }
0x0003d1c0 mov r0, r4 | r0 = r4;
0x0003d1c4 bl 0x1b60c | g_free ();
0x0003d1c8 mov r4, 0 | r4 = 0;
0x0003d1cc b 0x3d230 | goto label_13;
| label_12:
0x0003d1d0 cmp r4, 0 |
| if (r4 != 0) {
0x0003d1d4 beq 0x3d210 |
0x0003d1d8 ldr r3, [pc, 0x98] | r3 = "/etc/localtime";
0x0003d1dc ldr r2, [pc, 0x98] | r2 = "_usr_share_zoneinfo";
0x0003d1e0 mov r1, 0x1000 | r1 = 0x1000;
0x0003d1e4 str r4, [sp] | *(sp) = r4;
0x0003d1e8 add r0, sp, 0x78 | r0 += s;
0x0003d1ec bl 0x1c074 | snprintf (r0, r1, "_usr_share_zoneinfo", r3);
0x0003d1f0 add r2, sp, 0x78 | r2 += s;
0x0003d1f4 add r1, sp, 0x40 | r1 += var_40h;
0x0003d1f8 mov r0, r5 | r0 = r5;
0x0003d1fc bl 0x3cb70 | r0 = fcn_0003cb70 (r0, r1);
0x0003d200 cmp r0, 0 |
| if (r0 == 0) {
0x0003d204 beq 0x3d224 | goto label_14;
| }
0x0003d208 mov r0, r4 | r0 = r4;
0x0003d20c bl 0x1b60c | g_free ();
| }
0x0003d210 mov r2, 0 | r2 = 0;
0x0003d214 add r1, sp, 0x10 | r1 += var_10h;
0x0003d218 mov r0, r5 | r0 = r5;
0x0003d21c bl 0x3cd74 | r0 = fcn_0003cd74 (r0, r1);
0x0003d220 mov r4, r0 | r4 = r0;
| label_14:
0x0003d224 ldr r1, [sp, 0x40] | r1 = var_40h;
0x0003d228 mov r0, r5 | r0 = r5;
0x0003d22c bl 0x1b4b0 | munmap (r0, r1);
| }
| label_13:
0x0003d230 mov r0, r7 | r0 = r7;
0x0003d234 bl 0x1b66c | close (r0);
0x0003d238 ldr r3, [r6, 0x38] | r3 = *((r6 + 0x38));
0x0003d23c tst r3, 1 |
| if ((r3 & 1) == 0) {
0x0003d240 beq 0x3d070 | goto label_4;
| }
0x0003d244 mov r3, r4 | r3 = r4;
0x0003d248 ldr r2, [pc, 0x18] | r2 = *(0x3d264);
0x0003d24c ldr r1, [pc, 0x18] | r1 = "__connman_timezone_lookup";
0x0003d250 ldr r0, [pc, 0x28] | r0 = *(0x3d27c);
0x0003d254 bl 0x2acc4 | connman_debug ();
0x0003d258 b 0x3d070 | goto label_4;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/sbin/connmand @ 0x3d284 */
| #include <stdint.h>
|
; (fcn) fcn.0003d284 () | void fcn_0003d284 (int32_t arg1) {
| int32_t var_0h;
| int32_t var_8h;
| int32_t var_8h_2;
| int32_t var_10h;
| size_t length;
| int32_t var_78h;
| int32_t var_88h;
| char * fildes;
| int32_t var_10c0h;
| int32_t var_24h;
| r0 = arg1;
0x0003d284 ldr r3, [pc, 0x168] | r3 = *(0x3d3f0);
0x0003d288 push {r4, r5, r6, r7, lr} |
0x0003d28c ldr r2, [r3, 0x48] | r2 = *(0x3d438);
0x0003d290 sub sp, sp, 0x10c0 |
0x0003d294 tst r2, 1 |
0x0003d298 sub sp, sp, 0x24 |
0x0003d29c mov r5, r0 | r5 = r0;
0x0003d2a0 mov r4, r3 | r4 = r3;
| if ((r2 & 1) != 0) {
0x0003d2a4 beq 0x3d2bc |
0x0003d2a8 mov r3, r0 | r3 = r0;
0x0003d2ac ldr r2, [pc, 0x144] | r2 = *(0x3d3f4);
0x0003d2b0 ldr r1, [pc, 0x144] | r1 = "__connman_timezone_change";
0x0003d2b4 ldr r0, [pc, 0x144] | r0 = "src_timezone.c";
0x0003d2b8 bl 0x2acc4 | connman_debug ();
| }
0x0003d2bc str r5, [sp] | *(sp) = r5;
0x0003d2c0 ldr r3, [pc, 0x13c] | r3 = "_s:_s___zone__s";
0x0003d2c4 ldr r2, [pc, 0x13c] | r2 = "_usr_share_zoneinfo";
0x0003d2c8 mov r1, 0x1000 | r1 = 0x1000;
0x0003d2cc add r0, sp, 0xe0 | r0 += fildes;
0x0003d2d0 bl 0x1c074 | snprintf (r0, r1, "_usr_share_zoneinfo", "_s:_s___zone__s");
0x0003d2d4 mov r1, 0x80000 | r1 = 0x80000;
0x0003d2d8 add r0, sp, 0xe0 | r0 += fildes;
0x0003d2dc bl 0x1ba2c | open64 ();
0x0003d2e0 subs r5, r0, 0 | r5 -= fildes;
| if (r5 >= fildes) {
0x0003d2e4 mvnlt r4, 0x15 | r4 = ~0x15;
| }
| if (r5 < fildes) {
0x0003d2e8 blt 0x3d308 | goto label_0;
| }
0x0003d2ec add r1, sp, 0x10 | r1 += var_10h;
0x0003d2f0 bl 0x1b918 | r0 = fstat64 ();
0x0003d2f4 cmp r0, 0 |
0x0003d2f8 bge 0x3d318 |
| while (r3 > 3) {
0x0003d2fc mov r0, r5 | r0 = r5;
0x0003d300 bl 0x1b66c | close (r0);
0x0003d304 mvn r4, 4 | r4 = ~4;
| label_0:
0x0003d308 mov r0, r4 | r0 = r4;
0x0003d30c add sp, sp, 0x10c0 |
0x0003d310 add sp, sp, 0x24 |
0x0003d314 pop {r4, r5, r6, r7, pc} |
0x0003d318 mov r2, 0 | r2 = 0;
0x0003d31c mov r3, 0 | r3 = 0;
0x0003d320 strd r2, r3, [sp, 8] | __asm ("strd r2, r3, [var_8h]");
0x0003d324 ldr r1, [sp, 0x40] | r1 = length;
0x0003d328 mov r3, 1 | r3 = 1;
0x0003d32c mov r2, r3 | r2 = r3;
0x0003d330 str r5, [sp] | *(sp) = r5;
0x0003d334 mov r0, 0 | r0 = 0;
0x0003d338 bl 0x1c08c | r0 = mmap64 ()
0x0003d33c sub r3, r0, 1 | r3 = r0 - 1;
0x0003d340 cmn r3, 3 |
0x0003d344 mov r6, r0 | r6 = r0;
0x0003d348 bhi 0x3d2fc |
| }
0x0003d34c ldr r3, [r4, 0x58] | r3 = *((r4 + 0x58));
0x0003d350 tst r3, 1 |
| if ((r3 & 1) != 0) {
0x0003d354 beq 0x3d36c |
0x0003d358 ldr r3, [pc, 0xac] | r3 = *(0x3d408);
0x0003d35c ldr r2, [pc, 0xac] | r2 = "/etc/localtime";
0x0003d360 ldr r1, [pc, 0x94] | r1 = "__connman_timezone_change";
0x0003d364 ldr r0, [pc, 0xa8] | r0 = "write_file";
0x0003d368 bl 0x2acc4 | connman_debug ();
| }
0x0003d36c add r1, sp, 0x78 | r1 += var_78h;
0x0003d370 ldr r0, [pc, 0x94] | r0 = *(0x3d408);
0x0003d374 bl 0x1be40 | r0 = lstat64 ();
0x0003d378 cmp r0, 0 |
| if (r0 == 0) {
0x0003d37c bne 0x3d398 |
0x0003d380 ldr r3, [sp, 0x88] | r3 = var_88h;
0x0003d384 and r3, r3, 0xf000 | r3 &= 0xf000;
0x0003d388 cmp r3, 0xa000 |
| if (r3 != 0xa000) {
0x0003d38c bne 0x3d398 | goto label_2;
| }
0x0003d390 ldr r0, [pc, 0x74] | r0 = *(0x3d408);
0x0003d394 bl 0x1b834 | unlink (r0);
| }
| label_2:
0x0003d398 mov r2, 0x1a4 | r2 = 0x1a4;
0x0003d39c ldr r1, [pc, 0x74] | r1 = "_s:_s___pathname__s";
0x0003d3a0 ldr r0, [pc, 0x64] | r0 = *(0x3d408);
0x0003d3a4 bl 0x1ba2c | r0 = open64 ();
0x0003d3a8 subs r7, r0, 0 | r7 = r0 - 0;
0x0003d3ac bge 0x3d3cc |
| while (r4 < 0) {
0x0003d3b0 mvn r4, 4 | r4 = ~4;
| label_1:
0x0003d3b4 ldr r1, [sp, 0x40] | r1 = length;
0x0003d3b8 mov r0, r6 | r0 = r6;
0x0003d3bc bl 0x1b4b0 | munmap (r0, r1);
0x0003d3c0 mov r0, r5 | r0 = r5;
0x0003d3c4 bl 0x1b66c | close (r0);
0x0003d3c8 b 0x3d308 | goto label_0;
0x0003d3cc ldr r2, [sp, 0x40] | r2 = length;
0x0003d3d0 mov r1, r6 | r1 = r6;
0x0003d3d4 bl 0x1c170 | r0 = write (r0, r1, r2);
0x0003d3d8 mov r4, r0 | r4 = r0;
0x0003d3dc mov r0, r7 | r0 = r7;
0x0003d3e0 bl 0x1b66c | close (r0);
0x0003d3e4 cmp r4, 0 |
0x0003d3e8 blt 0x3d3b0 |
| }
0x0003d3ec mov r4, 0 | r4 = 0;
0x0003d3f0 b 0x3d3b4 | goto label_1;
| }
[*] Function mmap used 5 times connmand