[*] Binary protection state of connmand
Partial RELRO No Canary found NX disabled No PIE No RPATH No RUNPATH No Symbols
[*] Function printf 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 @ 0x24598 */
| #include <stdint.h>
|
; (fcn) fcn.00024598 () | void fcn_00024598 (int32_t arg_11ch, int32_t arg_120h, int32_t arg1) {
| int32_t var_ch_2;
| int32_t var_ch;
| char * s;
| int32_t var_114h;
| int32_t var_11ch;
| r0 = arg1;
0x00024598 str r3, [sp, -4]! | *((sp -= 4)) = r3;
0x0002459c ldr r3, [r0, 0x1f0] | r3 = *(arg_11chx1f0);
0x000245a0 push {r4, lr} |
0x000245a4 cmp r3, 0 |
0x000245a8 sub sp, sp, 0x114 |
| if (r3 != 0) {
0x000245ac beq 0x2460c |
0x000245b0 mov r4, r0 | r4 = r0;
0x000245b4 add r3, sp, 0x120 | r3 += arg_120h;
0x000245b8 str r3, [sp, 0xc] | var_ch = r3;
0x000245bc stm sp, {r2, r4} | *(sp) = r2;
| *((sp + 4)) = r4;
0x000245c0 ldr r3, [pc, 0x54] | r3 = *(0x24618);
0x000245c4 ldr r2, [pc, 0x54] | r2 = "gweb_gresolv.c";
0x000245c8 mov r1, 0x100 | r1 = 0x100;
0x000245cc add r0, sp, 0x10 | r0 += var_ch;
0x000245d0 bl 0x1c074 | r0 = snprintf (r0, r1, "gweb_gresolv.c", r3)
0x000245d4 cmp r0, 0 |
| if (r0 <= 0) {
0x000245d8 ble 0x2460c | goto label_0;
| }
0x000245dc add ip, sp, 0x10 |
0x000245e0 rsb r1, r0, 0x100 | r1 = 0x100 - r0;
0x000245e4 ldr r3, [sp, 0xc] | r3 = var_ch;
0x000245e8 ldr r2, [sp, 0x11c] | r2 = *(arg_11ch);
0x000245ec add r0, ip, r0 | r0 = ip + r0;
0x000245f0 bl 0x1bf9c | r0 = vsnprintf (r0, r1, r2, r3)
0x000245f4 cmp r0, 0 |
| if (r0 <= 0) {
0x000245f8 ble 0x2460c | goto label_0;
| }
0x000245fc ldr r3, [r4, 0x1f0] | r3 = *((r4 + 0x1f0));
0x00024600 ldr r1, [r4, 0x1f4] | r1 = *((r4 + 0x1f4));
0x00024604 add r0, sp, 0x10 | r0 += var_ch;
0x00024608 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
| }
| label_0:
0x0002460c add sp, sp, 0x114 |
0x00024610 pop {r4, lr} |
0x00024614 add sp, sp, 4 |
0x00024618 bx lr | return;
| }
; 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 @ 0x2c050 */
| #include <stdint.h>
|
; (fcn) fcn.0002c050 () | void fcn_0002c050 (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| void * s;
| int32_t var_28h;
| int32_t var_2ah;
| int32_t var_2bh;
| int32_t var_2ch;
| int32_t var_2dh;
| int32_t var_2eh;
| int32_t var_2fh;
| int32_t var_3ch;
| r0 = arg1;
| r1 = arg2;
0x0002c050 push {r4, r5, r6, r7, lr} |
0x0002c054 subs r6, r0, 0 | r6 = r0 - 0;
0x0002c058 sub sp, sp, 0x3c |
0x0002c05c bge 0x2c070 |
| while (r5 < r0) {
| label_0:
0x0002c060 mov r6, 0 | r6 = 0;
| label_1:
0x0002c064 mov r0, r6 | r0 = r6;
0x0002c068 add sp, sp, 0x3c |
0x0002c06c pop {r4, r5, r6, r7, pc} |
0x0002c070 mov r4, r1 | r4 = r1;
0x0002c074 mov r2, 0 | r2 = 0;
0x0002c078 ldr r1, [pc, 0xd0] | r1 = *(0x2c14c);
0x0002c07c mov r0, 2 | r0 = 2;
0x0002c080 bl 0x1c1e8 | r0 = socket (r0, r1, r2);
0x0002c084 subs r5, r0, 0 | r5 = r0 - 0;
0x0002c088 blt 0x2c060 |
| }
0x0002c08c mov r2, 0x20 | r2 = 0x20;
0x0002c090 mov r1, 0 | r1 = 0;
0x0002c094 add r0, sp, 0x18 | r0 += s;
0x0002c098 bl 0x1bb4c | memset (r0, r1, r2);
0x0002c09c add r2, sp, 0x18 | r2 += s;
0x0002c0a0 ldr r1, [pc, 0xac] | r1 = "___add__s";
0x0002c0a4 mov r0, r5 | r0 = r5;
0x0002c0a8 str r6, [sp, 0x28] | var_28h = r6;
0x0002c0ac bl 0x1c35c | r0 = ioctl (r0, r1);
0x0002c0b0 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 == r0) {
0x0002c0b4 bne 0x2c0cc |
0x0002c0b8 add r2, sp, 0x18 | r2 += s;
0x0002c0bc ldr r1, [pc, 0x94] | r1 = *(0x2c154);
0x0002c0c0 mov r0, r5 | r0 = r5;
0x0002c0c4 bl 0x1c35c | r0 = ioctl (r0, r1);
0x0002c0c8 mov r6, r0 | r6 = r0;
| }
0x0002c0cc mov r0, r5 | r0 = r5;
0x0002c0d0 bl 0x1b66c | close (r0);
0x0002c0d4 cmp r6, 0 |
| if (r6 < 0) {
0x0002c0d8 blt 0x2c060 | goto label_0;
| }
0x0002c0dc cmp r4, 0 |
| if (r4 != 0) {
0x0002c0e0 moveq r5, 0x12 | r5 = 0x12;
| }
| if (r4 != 0) {
0x0002c0e4 beq 0x2c0f4 |
0x0002c0e8 mov r0, r4 | r0 = r4;
0x0002c0ec bl 0x1c5d8 | r0 = strlen (r0);
0x0002c0f0 add r5, r0, 0x12 | r5 = r0 + 0x12;
| }
0x0002c0f4 mov r0, r5 | r0 = r5;
0x0002c0f8 bl 0x1b57c | r0 = g_malloc ();
0x0002c0fc subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 == r0) {
0x0002c100 beq 0x2c060 | goto label_0;
| }
0x0002c104 ldrb r3, [sp, 0x2a] | r3 = var_2ah;
0x0002c108 ldrb r2, [sp, 0x2b] | r2 = var_2bh;
0x0002c10c ldrb r1, [sp, 0x2c] | r1 = var_2ch;
0x0002c110 ldrb ip, [sp, 0x2d] | ip = var_2dh;
0x0002c114 ldrb lr, [sp, 0x2e] | lr = var_2eh;
0x0002c118 ldrb r7, [sp, 0x2f] | r7 = var_2fh;
0x0002c11c cmp r4, 0 |
0x0002c120 str r1, [sp, 8] | var_8h = r1;
0x0002c124 str r2, [sp, 4] | var_4h = r2;
0x0002c128 str r3, [sp] | *(sp) = r3;
0x0002c12c str r7, [sp, 0x14] | var_14h = r7;
0x0002c130 ldr r3, [pc, 0x24] | r3 = *(0x2c158);
0x0002c134 str lr, [sp, 0x10] | var_10h = lr;
0x0002c138 str ip, [sp, 0xc] | var_ch = ip;
| if (r4 == 0) {
0x0002c13c movne r3, r4 | r3 = r4;
| }
0x0002c140 ldr r2, [pc, 0x18] | r2 = *(0x2c15c);
0x0002c144 mov r1, r5 | r1 = r5;
0x0002c148 bl 0x1c074 | snprintf (r0, r1, r2, r3)
0x0002c14c b 0x2c064 | goto label_1;
| }
; 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 @ 0x3cd74 */
| #include <stdint.h>
|
; (fcn) fcn.0003cd74 () | void fcn_0003cd74 (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_18h;
| char * dest;
| int8_t var_12h;
| char * src;
| int32_t var_1040h;
| int32_t var_34h;
| r0 = arg1;
| r1 = arg2;
0x0003cd74 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0003cd78 subs r7, r2, 0 | r7 = r2 - 0;
0x0003cd7c sub sp, sp, 0x1040 |
0x0003cd80 sub sp, sp, 0x34 |
0x0003cd84 mov r8, r0 | r8 = r0;
0x0003cd88 mov sb, r1 | sb = r1;
| if (r7 != r2) {
0x0003cd8c bne 0x3ce9c | goto label_4;
| }
0x0003cd90 ldr r2, [pc, 0x1c0] | r2 = *(0x3cf54);
0x0003cd94 ldr r1, [pc, 0x1c0] | r1 = *(0x3cf58);
0x0003cd98 add r0, sp, 0x70 | r0 += dest;
0x0003cd9c bl 0x1c2c0 | strncpy (r0, r1, r2);
| label_1:
0x0003cda0 add r0, sp, 0x70 | r0 += dest;
0x0003cda4 bl 0x1bf48 | opendir ();
0x0003cda8 subs r6, r0, 0 | r6 -= dest;
| if (r6 != dest) {
0x0003cdac moveq r5, r6 | r5 = r6;
| }
| if (r6 == dest) {
0x0003cdb0 beq 0x3cf0c | goto label_5;
| }
0x0003cdb4 ldr sl, [pc, 0x1a4] | sl = "_usr_share_zoneinfo";
0x0003cdb8 ldr fp, [pc, 0x1a4] | fp = "posix";
| do {
| label_0:
0x0003cdbc mov r0, r6 | r0 = r6;
0x0003cdc0 bl 0x1c674 | readdir64 ();
0x0003cdc4 subs r5, r0, 0 | r5 -= dest;
| if (r5 == dest) {
0x0003cdc8 beq 0x3cf04 | goto label_6;
| }
0x0003cdcc add r4, r5, 0x13 | r4 += src;
0x0003cdd0 ldr r1, [pc, 0x190] | r1 = "posix";
0x0003cdd4 mov r0, r4 | r0 = r4;
0x0003cdd8 bl 0x1c7b8 | r0 = strcmp (r0, "posix");
0x0003cddc cmp r0, 0 |
0x0003cde0 beq 0x3cdbc |
| } while (r0 == 0);
0x0003cde4 mov r1, sl | r1 = sl;
0x0003cde8 mov r0, r4 | r0 = r4;
0x0003cdec bl 0x1c7b8 | r0 = strcmp (r0, r1);
0x0003cdf0 cmp r0, 0 |
| if (r0 == 0) {
0x0003cdf4 beq 0x3cdbc | goto label_0;
| }
0x0003cdf8 mov r1, fp | r1 = fp;
0x0003cdfc mov r0, r4 | r0 = r4;
0x0003ce00 bl 0x1c7b8 | r0 = strcmp (r0, r1);
0x0003ce04 cmp r0, 0 |
| if (r0 == 0) {
0x0003ce08 beq 0x3cdbc | goto label_0;
| }
0x0003ce0c ldr r1, [pc, 0x158] | r1 = *(0x3cf68);
0x0003ce10 mov r0, r4 | r0 = r4;
0x0003ce14 bl 0x1c7b8 | r0 = strcmp (r0, r1);
0x0003ce18 cmp r0, 0 |
| if (r0 == 0) {
0x0003ce1c beq 0x3cdbc | goto label_0;
| }
0x0003ce20 ldrb r5, [r5, 0x12] | r5 = var_12h;
0x0003ce24 cmp r5, 4 |
| if (r5 == 4) {
0x0003ce28 beq 0x3ce68 | goto label_7;
| }
0x0003ce2c cmp r5, 8 |
| if (r5 == 8) {
0x0003ce30 beq 0x3ceb8 | goto label_8;
| }
0x0003ce34 cmp r5, 0 |
| if (r5 != 0) {
0x0003ce38 bne 0x3cdbc | goto label_0;
| }
0x0003ce3c mov r0, r6 | r0 = r6;
0x0003ce40 bl 0x1c518 | dirfd ();
0x0003ce44 mov r3, r5 | r3 = r5;
0x0003ce48 add r2, sp, 8 | r2 += var_8h;
0x0003ce4c mov r1, r4 | r1 = r4;
0x0003ce50 bl 0x1be64 | r0 = fstatat64 ();
0x0003ce54 cmp r0, 0 |
| if (r0 < 0) {
0x0003ce58 blt 0x3cdbc | goto label_0;
| }
0x0003ce5c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0003ce60 tst r3, 0x4000 |
| if ((r3 & 0x4000) == 0) {
0x0003ce64 beq 0x3cdbc | goto label_0;
| }
| label_7:
0x0003ce68 cmp r7, 0 |
| if (r7 != 0) {
0x0003ce6c bne 0x3cf3c | goto label_9;
| }
0x0003ce70 mov r2, 0x1000 | r2 = 0x1000;
0x0003ce74 mov r1, r4 | r1 = r4;
0x0003ce78 add r0, sp, 0x70 | r0 += dest;
0x0003ce7c bl 0x1c2c0 | strncpy (r0, r1, r2);
| label_3:
0x0003ce80 add r2, sp, 0x70 | r2 += dest;
0x0003ce84 mov r1, sb | r1 = sb;
0x0003ce88 mov r0, r8 | r0 = r8;
0x0003ce8c bl 0x3cd74 | r0 = fcn_0003cd74 (r0, r1);
0x0003ce90 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 == r0) {
0x0003ce94 beq 0x3cdbc | goto label_0;
| }
0x0003ce98 b 0x3cf04 | goto label_6;
| label_4:
0x0003ce9c str r7, [sp] | *(sp) = r7;
0x0003cea0 ldr r3, [pc, 0xb4] | r3 = *(0x3cf58);
0x0003cea4 ldr r2, [pc, 0xc4] | r2 = "right";
0x0003cea8 mov r1, 0x1000 | r1 = 0x1000;
0x0003ceac add r0, sp, 0x70 | r0 += dest;
0x0003ceb0 bl 0x1c074 | snprintf (r0, r1, "right", r3)
0x0003ceb4 b 0x3cda0 | goto label_1;
| label_8:
0x0003ceb8 cmp r7, 0 |
| if (r7 != 0) {
0x0003cebc bne 0x3cf1c | goto label_10;
| }
0x0003cec0 str r4, [sp] | *(sp) = r4;
0x0003cec4 ldr r3, [pc, 0x90] | r3 = *(0x3cf58);
0x0003cec8 ldr r2, [pc, 0xa0] | r2 = "right";
0x0003cecc mov r1, 0x1000 | r1 = 0x1000;
0x0003ced0 add r0, sp, 0x70 | r0 += dest;
0x0003ced4 bl 0x1c074 | snprintf (r0, r1, "right", r3)
| label_2:
0x0003ced8 add r2, sp, 0x70 | r2 += dest;
0x0003cedc add r1, sb, 0x30 | r1 = sb + 0x30;
0x0003cee0 mov r0, r8 | r0 = r8;
0x0003cee4 bl 0x3cb70 | r0 = fcn_0003cb70 (r0, r1);
0x0003cee8 cmp r0, 0 |
| if (r0 != 0) {
0x0003ceec bne 0x3cdbc | goto label_0;
| }
0x0003cef0 mov r2, r4 | r2 = r4;
0x0003cef4 mov r1, r7 | r1 = r7;
0x0003cef8 ldr r0, [pc, 0x70] | r0 = "right";
0x0003cefc bl 0x1bc78 | r0 = g_strdup_printf ()
0x0003cf00 mov r5, r0 | r5 = r0;
| label_6:
0x0003cf04 mov r0, r6 | r0 = r6;
0x0003cf08 bl 0x1bac8 | closedir ();
| label_5:
0x0003cf0c mov r0, r5 | r0 = r5;
0x0003cf10 add sp, sp, 0x1040 |
0x0003cf14 add sp, sp, 0x34 |
0x0003cf18 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_10:
0x0003cf1c str r4, [sp, 4] | var_4h = r4;
0x0003cf20 str r7, [sp] | *(sp) = r7;
0x0003cf24 ldr r3, [pc, 0x30] | r3 = *(0x3cf58);
0x0003cf28 ldr r2, [pc, 0x44] | r2 = *(0x3cf70);
0x0003cf2c mov r1, 0x1000 | r1 = 0x1000;
0x0003cf30 add r0, sp, 0x70 | r0 += dest;
0x0003cf34 bl 0x1c074 | snprintf (r0, r1, r2, r3)
0x0003cf38 b 0x3ced8 | goto label_2;
| label_9:
0x0003cf3c str r4, [sp] | *(sp) = r4;
0x0003cf40 mov r3, r7 | r3 = r7;
0x0003cf44 ldr r2, [pc, 0x24] | r2 = "right";
0x0003cf48 mov r1, 0x1000 | r1 = 0x1000;
0x0003cf4c add r0, sp, 0x70 | r0 += dest;
0x0003cf50 bl 0x1c074 | snprintf (r0, r1, "right", r3)
0x0003cf54 b 0x3ce80 | goto label_3;
| }
; 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;
| }
; 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 @ 0x6cfac */
| #include <stdint.h>
|
; (fcn) fcn.0006cfac () | void fcn_0006cfac (int32_t arg1, char * dest) {
| r0 = arg1;
| r1 = dest;
0x0006cfac push {r4, r5, r6, lr} |
0x0006cfb0 mov r5, r1 | r5 = r1;
0x0006cfb4 ldr r1, [pc, 0xd0] | r1 = *(0x6d088);
0x0006cfb8 mov r6, r0 | r6 = r0;
0x0006cfbc add r1, pc, r1 | r1 = pc + r1;
0x0006cfc0 mov r0, r5 | r0 = r5;
0x0006cfc4 bl 0x1bd5c | strcpy (r0, r1);
0x0006cfc8 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0006cfcc cmp r3, 0 |
| if (r3 == 0) {
0x0006cfd0 bne 0x6cfe4 |
0x0006cfd4 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0006cfd8 cmp r3, 0 |
| if (r3 != 0) {
0x0006cfdc moveq r4, 0xd | r4 = 0xd;
| }
| if (r3 == 0) {
0x0006cfe0 beq 0x6cffc | goto label_0;
| }
| }
0x0006cfe4 ldr r2, [pc, 0xa4] | r2 = *(0x6d08c);
0x0006cfe8 ldr r1, [pc, 0xa4] | r1 = *(0x6d090);
0x0006cfec add r2, pc, r2 | r2 = pc + r2;
0x0006cff0 add r0, r5, 0xd | r0 = r5 + 0xd;
0x0006cff4 bl 0x1c074 | r0 = snprintf (r0, r1, r2, r3)
0x0006cff8 add r4, r0, 0xd | r4 = r0 + 0xd;
| label_0:
0x0006cffc ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
0x0006d000 cmp r3, 0 |
| if (r3 != 0) {
0x0006d004 beq 0x6d020 |
0x0006d008 ldr r2, [pc, 0x88] | r2 = *(0x6d094);
0x0006d00c rsb r1, r4, 0x400 | r1 = 0x400 - r4;
0x0006d010 add r0, r5, r4 | r0 = r5 + r4;
0x0006d014 add r2, pc, r2 | r2 = pc + r2;
0x0006d018 bl 0x1c074 | r0 = snprintf (r0, r1, r2, r3)
0x0006d01c add r4, r4, r0 | r4 += r0;
| }
0x0006d020 ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x0006d024 cmp r3, 0 |
| if (r3 != 0) {
0x0006d028 beq 0x6d044 |
0x0006d02c ldr r2, [pc, 0x68] | r2 = *(0x6d098);
0x0006d030 rsb r1, r4, 0x400 | r1 = 0x400 - r4;
0x0006d034 add r0, r5, r4 | r0 = r5 + r4;
0x0006d038 add r2, pc, r2 | r2 = pc + r2;
0x0006d03c bl 0x1c074 | r0 = snprintf (r0, r1, r2, r3)
0x0006d040 add r4, r4, r0 | r4 += r0;
| }
0x0006d044 ldr r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x0006d048 cmp r3, 0 |
| if (r3 != 0) {
0x0006d04c beq 0x6d068 |
0x0006d050 ldr r2, [pc, 0x48] | r2 = "_";
0x0006d054 rsb r1, r4, 0x400 | r1 = 0x400 - r4;
0x0006d058 add r0, r5, r4 | r0 = r5 + r4;
0x0006d05c add r2, pc, r2 | r2 = pc + r2;
0x0006d060 bl 0x1c074 | r0 = snprintf (r0, r1, "_", r3)
0x0006d064 add r4, r4, r0 | r4 += r0;
| }
0x0006d068 ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x0006d06c cmp r3, 0 |
0x0006d070 popeq {r4, r5, r6, pc} |
0x0006d074 ldr r2, [pc, 0x28] | r2 = *(0x6d0a0);
0x0006d078 rsb r1, r4, 0x400 | r1 = 0x400 - r4;
0x0006d07c add r0, r5, r4 | r0 = r5 + r4;
0x0006d080 add r2, pc, r2 | r2 = pc + r2;
0x0006d084 pop {r4, r5, r6, lr} |
0x0006d088 b 0x1c074 | return void (*0x1c074)() ();
| }
; 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 @ 0x2d710 */
| #include <stdint.h>
|
; (fcn) sym.connman_device_create_from_index () | void connman_device_create_from_index (int32_t arg1) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_ch;
| int32_t var_10h;
| void * s;
| int32_t var_28h;
| int32_t var_2ah;
| int32_t var_2bh;
| int32_t var_2ch;
| int32_t var_2dh;
| int32_t var_2eh;
| int32_t var_2fh;
| int32_t var_3ch;
| r0 = arg1;
0x0002d710 push {r4, r5, r6, r7, r8, sb, lr} |
0x0002d714 subs r8, r0, 0 | r8 = r0 - 0;
0x0002d718 sub sp, sp, 0x3c |
0x0002d71c bge 0x2d730 |
| while (r7 == r0) {
| label_0:
0x0002d720 mov r5, 0 | r5 = 0;
| label_3:
0x0002d724 mov r0, r5 | r0 = r5;
0x0002d728 add sp, sp, 0x3c |
0x0002d72c pop {r4, r5, r6, r7, r8, sb, pc} |
0x0002d730 bl 0x467b8 | r0 = connman_inet_ifname ();
0x0002d734 subs r7, r0, 0 | r7 = r0 - 0;
0x0002d738 beq 0x2d720 |
| }
0x0002d73c bl 0x2d560 | r0 = fcn_0002d560 (r0);
0x0002d740 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 != r0) {
0x0002d744 beq 0x2d760 |
0x0002d748 ldr r0, [pc, 0x1e0] | r0 = *(0x2d92c);
0x0002d74c mov r1, r7 | r1 = r7;
| label_1:
0x0002d750 bl 0x2ac18 | connman_info ();
0x0002d754 mov r0, r7 | r0 = r7;
0x0002d758 bl 0x1b60c | g_free ();
0x0002d75c b 0x2d720 | goto label_0;
| }
0x0002d760 mov r0, r8 | r0 = r8;
0x0002d764 bl 0x510bc | r0 = fcn_000510bc (r0);
0x0002d768 cmp r0, 5 |
0x0002d76c mov r4, r0 | r4 = r0;
| if (r0 > 5) {
0x0002d770 bhi 0x2d7b4 | goto label_4;
| }
0x0002d774 cmp r0, 3 |
| if (r0 >= 3) {
0x0002d778 bhs 0x2d8b0 | goto label_5;
| }
0x0002d77c cmp r0, 0 |
| if (r0 == 0) {
0x0002d780 beq 0x2d7d0 | goto label_6;
| }
| do {
0x0002d784 ldr r1, [pc, 0x1a8] | r1 = "Ignoring_interface__s__filtered_";
0x0002d788 mov r0, r8 | r0 = r8;
0x0002d78c bl 0x2c050 | fcn_0002c050 (r0, "Ignoring_interface__s__filtered_");
0x0002d790 mov r2, 0 | r2 = 0;
0x0002d794 ldr r1, [pc, 0x19c] | r1 = *(0x2d934);
0x0002d798 mov r6, r0 | r6 = r0;
0x0002d79c mov r0, 2 | r0 = 2;
0x0002d7a0 bl 0x1c1e8 | r0 = socket (r0, r1, r2);
0x0002d7a4 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 >= r0) {
0x0002d7a8 bge 0x2d7dc | goto label_7;
| }
| label_2:
0x0002d7ac mov sb, 0 | sb = 0;
0x0002d7b0 b 0x2d874 | goto label_8;
| label_4:
0x0002d7b4 cmp r0, 6 |
0x0002d7b8 beq 0x2d784 |
| } while (r0 == 6);
0x0002d7bc ldr r3, [pc, 0x178] | r3 = "___add__s";
0x0002d7c0 cmp r0, r3 |
| if (r0 == r3) {
0x0002d7c4 beq 0x2d8b0 | goto label_5;
| }
0x0002d7c8 mov sb, r6 | sb = r6;
0x0002d7cc b 0x2d874 | goto label_8;
| label_6:
0x0002d7d0 mov r1, r7 | r1 = r7;
0x0002d7d4 ldr r0, [pc, 0x164] | r0 = *(0x2d93c);
0x0002d7d8 b 0x2d750 | goto label_1;
| label_7:
0x0002d7dc mov r2, 0x20 | r2 = 0x20;
0x0002d7e0 mov r1, 0 | r1 = 0;
0x0002d7e4 add r0, sp, 0x18 | r0 += s;
0x0002d7e8 bl 0x1bb4c | memset (r0, r1, r2);
0x0002d7ec add r2, sp, 0x18 | r2 += s;
0x0002d7f0 ldr r1, [pc, 0x14c] | r1 = "Ignoring interface %s (type unknown)";
0x0002d7f4 mov r0, r5 | r0 = r5;
0x0002d7f8 str r8, [sp, 0x28] | var_28h = r8;
0x0002d7fc bl 0x1c35c | r0 = ioctl (r0, r1);
0x0002d800 subs sb, r0, 0 | sb = r0 - 0;
| if (sb == r0) {
0x0002d804 bne 0x2d81c |
0x0002d808 add r2, sp, 0x18 | r2 += s;
0x0002d80c ldr r1, [pc, 0x134] | r1 = *(0x2d944);
0x0002d810 mov r0, r5 | r0 = r5;
0x0002d814 bl 0x1c35c | r0 = ioctl (r0, r1);
0x0002d818 mov sb, r0 | sb = r0;
| }
0x0002d81c mov r0, r5 | r0 = r5;
0x0002d820 bl 0x1b66c | close (r0);
0x0002d824 cmp sb, 0 |
| if (sb < 0) {
0x0002d828 blt 0x2d7ac | goto label_2;
| }
0x0002d82c mov r0, 0x12 | r0 = 0x12;
0x0002d830 bl 0x1b57c | r0 = g_malloc ();
0x0002d834 subs sb, r0, 0 | sb = r0 - 0;
| if (sb != r0) {
0x0002d838 beq 0x2d874 |
0x0002d83c ldrb r2, [sp, 0x2f] | r2 = var_2fh;
0x0002d840 ldrb r3, [sp, 0x2a] | r3 = var_2ah;
0x0002d844 str r2, [sp, 0x10] | var_10h = r2;
0x0002d848 ldrb r2, [sp, 0x2e] | r2 = var_2eh;
0x0002d84c mov r1, 0x12 | r1 = 0x12;
0x0002d850 str r2, [sp, 0xc] | var_ch = r2;
0x0002d854 ldrb r2, [sp, 0x2d] | r2 = var_2dh;
0x0002d858 str r2, [sp, 8] | var_8h = r2;
0x0002d85c ldrb r2, [sp, 0x2c] | r2 = var_2ch;
0x0002d860 str r2, [sp, 4] | var_4h = r2;
0x0002d864 ldrb r2, [sp, 0x2b] | r2 = var_2bh;
0x0002d868 str r2, [sp] | *(sp) = r2;
0x0002d86c ldr r2, [pc, 0xd8] | r2 = *(0x2d948);
0x0002d870 bl 0x1c074 | snprintf (r0, r1, r2, r3)
| }
| label_8:
0x0002d874 mov r1, r4 | r1 = r4;
0x0002d878 mov r0, r6 | r0 = r6;
0x0002d87c bl 0x2c308 | r0 = connman_device_create ();
0x0002d880 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 == r0) {
0x0002d884 beq 0x2d90c | goto label_9;
| }
0x0002d888 sub r4, r4, 1 | r4--;
0x0002d88c cmp r4, 5 |
| if (r4 > 5) {
| /* switch table (6 cases) at 0x2d898 */
0x0002d890 ldrls pc, [pc, r4, lsl 2] | offset_0 = r4 << 2;
| pc = *((pc + offset_0));
| }
0x0002d894 b 0x2d928 | goto label_10;
| label_5:
0x0002d8b0 mov r0, r7 | r0 = r7;
0x0002d8b4 bl 0x1c470 | r0 = g_strdup ();
0x0002d8b8 mov r6, r0 | r6 = r0;
0x0002d8bc b 0x2d7ac | goto label_2;
0x0002d8c0 mov r1, 0 | r1 = 0;
0x0002d8c4 mov r0, r8 | r0 = r8;
0x0002d8c8 bl 0x2c050 | r0 = fcn_0002c050 (r0, r1);
0x0002d8cc mov r4, r0 | r4 = r0;
| do {
0x0002d8d0 str r8, [r5, 0x30] | *((r5 + 0x30)) = r8;
0x0002d8d4 mov r1, r7 | r1 = r7;
0x0002d8d8 mov r0, r5 | r0 = r5;
0x0002d8dc bl 0x2c5dc | connman_device_set_interface ();
0x0002d8e0 cmp r4, 0 |
| if (r4 != 0) {
0x0002d8e4 beq 0x2d8fc |
0x0002d8e8 mov r0, r5 | r0 = r5;
0x0002d8ec mov r1, r4 | r1 = r4;
0x0002d8f0 bl 0x2c64c | connman_device_set_ident ();
0x0002d8f4 mov r0, r4 | r0 = r4;
0x0002d8f8 bl 0x1b60c | g_free ();
| }
0x0002d8fc mov r2, sb | r2 = sb;
0x0002d900 ldr r1, [pc, 0x48] | r1 = "_02X:_02X:_02X:_02X:_02X:_02X";
0x0002d904 mov r0, r5 | r0 = r5;
0x0002d908 bl 0x2ccf8 | connman_device_set_string ();
| label_9:
0x0002d90c mov r0, r7 | r0 = r7;
0x0002d910 bl 0x1b60c | g_free ();
0x0002d914 mov r0, r6 | r0 = r6;
0x0002d918 bl 0x1b60c | g_free ();
0x0002d91c mov r0, sb | r0 = sb;
0x0002d920 bl 0x1b60c | g_free ();
0x0002d924 b 0x2d724 | goto label_3;
| label_10:
0x0002d928 mov r4, 0 | r4 = 0;
0x0002d92c b 0x2d8d0 |
| } while (1);
| }
[*] Function printf used 16 times connmand