[*] Binary protection state of libgobject-2.0.so.0.6800.4
Full RELRO No Canary found NX enabled DSO RPATH No RUNPATH No Symbols
[*] Function mmap tear down of libgobject-2.0.so.0.6800.4
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x19ba0 */
| #include <stdint.h>
|
; (fcn) fcn.00019ba0 () | void fcn_00019ba0 (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_ch;
| int16_t var_10h;
| int32_t var_10h_2;
| int32_t var_18h;
| int32_t var_18h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00019ba0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00019ba4 sub sp, 0x24 |
0x00019ba6 ldr r3, [r2, 8] | r3 = *((r2 + 8));
0x00019ba8 cbz r3, 0x19bc6 |
| while (r6 != 0) {
0x00019baa ldr r3, [pc, 0x164] |
0x00019bac movw r2, 0x30e | r2 = 0x30e;
0x00019bb0 ldr r4, [pc, 0x160] |
0x00019bb2 ldr r1, [pc, 0x164] |
0x00019bb4 ldr r0, [pc, 0x164] |
0x00019bb6 add r3, pc | r3 = "type name '%s' contains invalid characters";
0x00019bb8 add r4, pc | r4 = 0x338d0;
0x00019bba adds r3, 0x4c | r3 += 0x4c;
0x00019bbc add r1, pc | r1 = 0x338da;
0x00019bbe str r4, [sp] | *(sp) = r4;
0x00019bc0 add r0, pc | r0 = 0x338e0;
0x00019bc2 blx 0x9bf0 | g_array_new ();
0x00019bc6 ldr r6, [r2, 4] | r6 = *((r2 + 4));
0x00019bc8 mov sl, r2 | sl = r2;
0x00019bca cmp r6, 0 |
0x00019bcc bne 0x19baa |
| }
0x00019bce ldr.w sb, [pc, 0x150] |
0x00019bd2 mov r5, r0 | r5 = r0;
0x00019bd4 mov r8, r1 | r8 = r1;
0x00019bd6 add sb, pc | sb = 0x338fc;
0x00019bd8 ldr.w r0, [sb, 8] | r0 = *(0x33904);
0x00019bdc blx 0x9b94 | fcn_00009b94 ();
0x00019be0 strd r5, r6, [sp, 0x10] | __asm ("strd r5, r6, [var_10h]");
0x00019be2 ldrsb r4, [r0, r0] | r4 = *((r0 + r0));
0x00019be4 mov r4, r0 | r4 = r0;
0x00019be6 strd r6, r6, [sp, 0x18] | __asm ("strd r6, r6, [var_18h]");
0x00019bea cmp r0, 0 |
| if (r0 == 0) {
0x00019bec beq 0x19cac | goto label_2;
| }
0x00019bee ldr r1, [pc, 0x134] |
0x00019bf0 add r7, sp, 0x10 | r7 += var_10h;
0x00019bf2 mov r2, r7 | r2 = r7;
0x00019bf4 add r1, pc | r1 = 0x3391e;
0x00019bf6 bl 0x1994c | r0 = fcn_0001994c (r0, r1, r2);
0x00019bfa cmp r4, r0 |
0x00019bfc mov r6, r0 | r6 = r0;
| if (r4 != r0) {
0x00019bfe beq 0x19c0c |
0x00019c00 ldr.w r0, [sb, 8] | r0 = *((sb + 8));
0x00019c04 mov r1, r8 | r1 = r8;
0x00019c06 mov r2, r6 | r2 = r6;
0x00019c08 blx 0x9dd0 | g_variant_equal ();
| }
0x00019c0c ldr r3, [pc, 0x118] |
0x00019c0e ldr.w sb, [r6] | sb = *(r6);
0x00019c12 add r3, pc | r3 = 0x3393e;
0x00019c14 ldrd r8, r3, [r3] | __asm ("ldrd r8, r3, [r3]");
0x00019c18 str r3, [sp, 0xc] | var_ch = r3;
0x00019c1a cmp.w sb, 0 |
| if (sb == 0) {
0x00019c1e beq 0x19d0a | goto label_3;
| }
0x00019c20 mov.w fp, 0 |
0x00019c24 b 0x19c32 |
| while (r0 != 0) {
0x00019c26 ite ge |
| if (sb < 0) {
0x00019c28 addge fp, r4, 1 |
| }
| if (sb < 0) {
0x00019c2c mov sb, r4 | sb = r4;
| }
0x00019c2e cmp sb, fp |
| if (sb < fp) {
0x00019c30 bls 0x19d0a | goto label_3;
| }
0x00019c32 add.w r4, sb, fp | r4 = sb + fp;
0x00019c36 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00019c38 lsrs r4, r4, 1 | r4 >>= 1;
0x00019c3a mov r0, r7 | r0 = r7;
0x00019c3c mla r5, r4, r8, r6 | __asm ("mla r5, r4, r8, r6");
0x00019c40 adds r5, 8 | r5 += 8;
0x00019c42 mov r1, r5 | r1 = r5;
0x00019c44 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00019c46 cmp r0, 0 |
0x00019c48 bne 0x19c26 |
| }
0x00019c4a ldr r2, [r5, 4] | r2 = *((r5 + 4));
| if (r2 == 0) {
0x00019c4c cbz r2, 0x19c9e | goto label_4;
| }
0x00019c4e ldrb.w r3, [sl, 0x1a] | r3 = *((sl + 0x1a));
0x00019c52 lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 >= r3) {
0x00019c54 bpl 0x19c6c | goto label_5;
| }
0x00019c56 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00019c58 str.w r3, [sl, 8] | __asm ("str.w r3, [sl, 8]");
0x00019c5c str.w sl, [r3, 4] | __asm ("str.w sl, [r3, 4]");
| label_0:
0x00019c60 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
| if (r3 == 0) {
0x00019c64 cbz r3, 0x19c94 | goto label_6;
| }
| do {
0x00019c66 add sp, 0x24 |
0x00019c68 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x00019c6c ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x00019c6e cmp r3, 0 |
| if (r3 == 0) {
0x00019c70 beq 0x19cfc | goto label_7;
| }
0x00019c72 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00019c74 str.w r3, [sl, 4] | __asm ("str.w r3, [sl, 4]");
| if (r3 != 0) {
0x00019c78 cbz r3, 0x19c7e |
0x00019c7a str.w sl, [r3, 8] | __asm ("str.w sl, [r3, 8]");
| }
0x00019c7e ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x00019c80 str.w r3, [sl, 8] | __asm ("str.w r3, [sl, 8]");
0x00019c84 str.w sl, [r3, 4] | __asm ("str.w sl, [r3, 4]");
| label_1:
0x00019c88 str.w sl, [r5, 8] | __asm ("str.w sl, [r5, 8]");
0x00019c8c ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x00019c90 cmp r3, 0 |
0x00019c92 bne 0x19c66 |
| } while (r3 != 0);
| label_6:
0x00019c94 str.w sl, [r5, 0xc] | __asm ("str.w sl, [r5, 0xc]");
0x00019c98 add sp, 0x24 |
0x00019c9a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x00019c9e str.w sl, [r5, 4] | __asm ("str.w sl, [r5, 4]");
0x00019ca2 ldrb.w r3, [sl, 0x1a] | r3 = *((sl + 0x1a));
0x00019ca6 lsls r2, r3, 0x1f | r2 = r3 << 0x1f;
| if (r2 < r3) {
0x00019ca8 bmi 0x19c60 | goto label_0;
| }
0x00019caa b 0x19c88 | goto label_1;
| label_2:
0x00019cac ldr r2, [pc, 0x7c] |
0x00019cae add r2, pc |
0x00019cb0 ldr r3, [r2] | r3 = *(0x339de);
0x00019cb2 ldr r2, [r2, 8] | r2 = *(0x339e6);
0x00019cb4 add.w r0, r3, 8 | r0 = r3 + 8;
0x00019cb8 lsls r1, r2, 0x1f | r1 = r2 << 0x1f;
| if (r1 < r2) {
0x00019cba bpl 0x19cd4 |
| if (r0 == 0) {
0x00019cbc cbz r0, 0x19cd4 | goto label_8;
| }
0x00019cbe adds r3, 7 | r3 += 7;
0x00019cc0 ittte ne |
| if (r3 != 7) {
0x00019cc2 clzne r3, r3 | __asm ("clzne r3, r3");
| }
| if (r3 == 7) {
0x00019cc6 movne r0, 1 | r0 = 1;
| }
| if (r3 != 7) {
0x00019cc8 eoreq r3, r3, 0x1f | r3 ^= 0x1f;
| }
| if (r3 == 7) {
0x00019ccc movs r0, 2 | r0 = 2;
| }
0x00019cce itt ne |
| if (r0 == 2) {
0x00019cd0 addne r3, r3, r0 | r3 += r0;
| }
| if (r0 != 2) {
0x00019cd2 lslne r0, r3 | r0 <<= r3;
| goto label_8;
| }
| }
| label_8:
0x00019cd4 add r7, sp, 0x10 | r7 += var_10h;
0x00019cd6 blx 0x9aa0 | g_slist_find ();
0x00019cda ldr r1, [pc, 0x54] |
0x00019cdc movs r2, 0 | r2 = 0;
0x00019cde str r2, [r0] | *(r0) = r2;
0x00019ce0 str r2, [r0, 4] | *((r0 + 4)) = r2;
0x00019ce2 mov r2, r7 | r2 = r7;
0x00019ce4 add r1, pc | r1 = 0x33a1a;
0x00019ce6 bl 0x1994c | fcn_0001994c (r0, r1, r2);
0x00019cea ldr r3, [pc, 0x48] |
0x00019cec mov r6, r0 | r6 = r0;
0x00019cee mov r1, r8 | r1 = r8;
0x00019cf0 mov r2, r6 | r2 = r6;
0x00019cf2 add r3, pc | r3 = 0x33a2c;
0x00019cf4 ldr r0, [r3, 8] | r0 = *(0x33a34);
0x00019cf6 blx 0x9dd0 | g_variant_equal ();
0x00019cf8 strd lr, r7, [ip], -0x21c | __asm ("strd lr, r7, [ip], -0x21c");
| label_7:
0x00019cfc str.w r2, [sl, 4] | __asm ("str.w r2, [sl, 4]");
0x00019d00 str.w sl, [r2, 8] | __asm ("str.w sl, [r2, 8]");
0x00019d04 str.w sl, [r5, 4] | __asm ("str.w sl, [r5, 4]");
0x00019d08 b 0x19c88 | goto label_1;
| label_3:
0x00019d0a movs r3, 0 | r3 = 0;
0x00019d0c ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x00019d0e udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x200c4 */
| #include <stdint.h>
|
; (fcn) fcn.000200c4 () | void fcn_000200c4 (int16_t arg1, uint32_t arg2) {
| int16_t var_0h;
| int16_t var_8h;
| uint32_t var_ch;
| r0 = arg1;
| r1 = arg2;
0x000200c4 push.w {r4, r5, r6, r7, r8, lr} |
0x000200c8 mov r4, r1 | r4 = r1;
0x000200ca sub sp, 0x10 |
0x000200cc cmp r1, 0 |
| if (r1 == 0) {
0x000200ce beq 0x2017a | goto label_4;
| }
0x000200d0 mov r6, r0 | r6 = r0;
0x000200d2 ldr r3, [r1] | r3 = *(r1);
0x000200d4 cmp r3, 0 |
| if (r3 == 0) {
0x000200d6 beq 0x20182 | goto label_5;
| }
0x000200d8 ldr r5, [r1, 8] | r5 = *((r1 + 8));
0x000200da cmp r5, 0 |
| if (r5 == 0) {
0x000200dc beq 0x201dc | goto label_6;
| }
0x000200de ldrd r8, r3, [r1, 0x10] | __asm ("ldrd r8, r3, [r1, 0x10]");
0x000200e2 cmp.w r8, 0 |
| if (r8 == 0) {
0x000200e6 beq 0x2015e | goto label_7;
| }
0x000200e8 cmp r3, 0 |
| if (r3 == 0) {
0x000200ea beq 0x20162 | goto label_8;
| }
0x000200ec ldr r3, [pc, 0x130] |
0x000200ee mov r5, r8 | r5 = r8;
0x000200f0 add r7, sp, 8 | r7 += var_8h;
0x000200f2 add r3, pc | r3 = 0x40316;
0x000200f4 ldm.w r3, {r0, r1} | r0 = *(r3);
| r1 = *((r3 + 4));
0x000200f8 str r0, [sp, 8] | var_8h = r0;
0x000200fa strh.w r1, [sp, 0xc] | var_ch = r1;
0x000200fe b 0x20108 |
| while (r1 != 0) {
0x00020100 blx 0x9d70 | r0 = g_parse_debug_string ();
0x00020104 cmp r0, 0 |
| if (r0 == 0) {
0x00020106 beq 0x201f0 | goto label_9;
| }
0x00020108 mov r3, r5 | r3 = r5;
0x0002010a ldrb r1, [r5], 1 | r1 = *(r5);
| r5++;
0x0002010e mov r0, r7 | r0 = r7;
0x00020110 cmp r1, 0 |
0x00020112 bne 0x20100 |
| }
0x00020114 sub.w r3, r3, r8 | r3 -= r8;
0x00020118 cmp r3, 8 |
| if (r3 > 8) {
0x0002011a bgt 0x201f0 | goto label_9;
| }
| label_0:
0x0002011c ldrd r7, r3, [r4, 0x18] | __asm ("ldrd r7, r3, [r4, 0x18]");
0x00020120 cmp r7, 0 |
| if (r7 == 0) {
0x00020122 beq 0x2019e | goto label_10;
| }
0x00020124 cmp r3, 0 |
| if (r3 == 0) {
0x00020126 beq 0x201a2 | goto label_11;
| }
0x00020128 ldr r3, [pc, 0xf8] |
0x0002012a mov r4, r7 | r4 = r7;
0x0002012c add r5, sp, 8 | r5 += var_8h;
0x0002012e add r3, pc | r3 = 0x40356;
0x00020130 ldm.w r3, {r0, r1} | r0 = *(r3);
| r1 = *((r3 + 4));
0x00020134 str r0, [sp, 8] | var_8h = r0;
0x00020136 strh.w r1, [sp, 0xc] | var_ch = r1;
0x0002013a b 0x20144 |
| while (r1 != 0) {
0x0002013c blx 0x9d70 | r0 = g_parse_debug_string ();
0x00020140 cmp r0, 0 |
| if (r0 == 0) {
0x00020142 beq 0x20208 | goto label_12;
| }
0x00020144 mov r3, r4 | r3 = r4;
0x00020146 ldrb r1, [r4], 1 | r1 = *(r4);
| r4++;
0x0002014a mov r0, r5 | r0 = r5;
0x0002014c cmp r1, 0 |
0x0002014e bne 0x2013c |
| }
0x00020150 subs r3, r3, r7 | r3 -= r7;
0x00020152 cmp r3, 8 |
| if (r3 > 8) {
0x00020154 bgt 0x20208 | goto label_12;
| }
| label_1:
0x00020156 movs r0, 1 | r0 = 1;
0x00020158 add sp, 0x10 |
0x0002015a pop.w {r4, r5, r6, r7, r8, pc} |
| label_7:
0x0002015e cmp r3, 0 |
| if (r3 == 0) {
0x00020160 beq 0x2011c | goto label_0;
| }
| label_8:
0x00020162 ldr r2, [pc, 0xc4] |
0x00020164 mov r3, r6 | r3 = r6;
0x00020166 ldr r0, [pc, 0xc4] |
0x00020168 movs r1, 0x10 | r1 = 0x10;
0x0002016a add r2, pc | r2 = 0x40398;
0x0002016c add r0, pc | r0 = 0x4039e;
0x0002016e blx 0x9e0c | g_mutex_lock ();
0x00020172 movs r0, 0 | r0 = 0;
| label_2:
0x00020174 add sp, 0x10 |
0x00020176 pop.w {r4, r5, r6, r7, r8, pc} |
| label_4:
0x0002017a mov r0, r1 | r0 = r1;
0x0002017c add sp, 0x10 |
0x0002017e pop.w {r4, r5, r6, r7, r8, pc} |
0x00020180 strh r0, [r6, 0xe] | *((r6 + 0xe)) = r0;
| label_5:
0x00020182 ldr r3, [r1, 4] | r3 = *((r1 + 4));
| if (r3 == 0) {
0x00020184 cbz r3, 0x201b6 | goto label_13;
| }
| label_3:
0x00020186 ldr r2, [pc, 0xa8] |
0x00020188 mov r3, r6 | r3 = r6;
0x0002018a ldr r0, [pc, 0xa8] |
0x0002018c movs r1, 0x10 | r1 = 0x10;
0x0002018e add r2, pc | r2 = 0x403c4;
0x00020190 add r0, pc | r0 = 0x403ca;
0x00020192 blx 0x9e0c | g_mutex_lock ();
0x00020194 cdp p0, 3, c2, c12, c0, 0 | __asm ("cdp p0, 3, c2, c12, c0, 0");
0x00020198 add sp, 0x10 |
0x0002019a pop.w {r4, r5, r6, r7, r8, pc} |
| label_10:
0x0002019e cmp r3, 0 |
| if (r3 == 0) {
0x000201a0 beq 0x20156 | goto label_1;
| }
| label_11:
0x000201a2 ldr r2, [pc, 0x94] |
0x000201a4 mov r3, r6 | r3 = r6;
0x000201a6 ldr r0, [pc, 0x94] |
0x000201a8 movs r1, 0x10 | r1 = 0x10;
0x000201aa add r2, pc | r2 = 0x403e8;
0x000201ac add r0, pc | r0 = 0x403ee;
0x000201ae blx 0x9e0c | g_mutex_lock ();
0x000201b2 movs r0, 0 | r0 = 0;
0x000201b4 b 0x20174 | goto label_2;
| label_13:
0x000201b6 ldr r3, [r1, 8] | r3 = *((r1 + 8));
0x000201b8 cmp r3, 0 |
| if (r3 != 0) {
0x000201ba bne 0x20186 | goto label_3;
| }
0x000201bc ldr r3, [r1, 0xc] | r3 = *((r1 + 0xc));
0x000201be cmp r3, 0 |
| if (r3 != 0) {
0x000201c0 bne 0x20186 | goto label_3;
| }
0x000201c2 ldr r3, [r1, 0x10] | r3 = *((r1 + 0x10));
0x000201c4 cmp r3, 0 |
| if (r3 != 0) {
0x000201c6 bne 0x20186 | goto label_3;
| }
0x000201c8 ldr r3, [r1, 0x14] | r3 = *((r1 + 0x14));
0x000201ca cmp r3, 0 |
| if (r3 != 0) {
0x000201cc bne 0x20186 | goto label_3;
| }
0x000201ce ldr r3, [r1, 0x18] | r3 = *((r1 + 0x18));
0x000201d0 cmp r3, 0 |
| if (r3 != 0) {
0x000201d2 bne 0x20186 | goto label_3;
| }
0x000201d4 ldr r0, [r1, 0x1c] | r0 = *((r1 + 0x1c));
0x000201d6 cmp r0, 0 |
| if (r0 != 0) {
0x000201d8 bne 0x20186 | goto label_3;
| }
0x000201da b 0x20174 | goto label_2;
| label_6:
0x000201dc ldr r2, [pc, 0x60] |
0x000201de mov r3, r6 | r3 = r6;
0x000201e0 ldr r0, [pc, 0x60] |
0x000201e2 movs r1, 0x10 | r1 = 0x10;
0x000201e4 add r2, pc | r2 = 0x40428;
0x000201e6 add r0, pc | r0 = 0x4042e;
0x000201e8 blx 0x9e0c | g_mutex_lock ();
0x000201ec mov r0, r5 | r0 = r5;
0x000201ee b 0x20174 | goto label_2;
| label_9:
0x000201f0 ldr r3, [pc, 0x54] |
0x000201f2 movs r1, 0x10 | r1 = 0x10;
0x000201f4 ldr r2, [pc, 0x54] |
0x000201f6 ldr r0, [pc, 0x58] |
0x000201f8 add r3, pc | r3 = 0x40444;
0x000201fa str r6, [sp] | *(sp) = r6;
0x000201fc add r2, pc | r2 = 0x4044c;
0x000201fe add r0, pc | r0 = 0x40454;
0x00020200 blx 0x9e0c | g_mutex_lock ();
0x00020204 movs r0, 0 | r0 = 0;
0x00020206 b 0x20174 | goto label_2;
| label_12:
0x00020208 ldr r3, [pc, 0x48] |
0x0002020a movs r1, 0x10 | r1 = 0x10;
0x0002020c ldr r2, [pc, 0x48] |
0x0002020e ldr r0, [pc, 0x4c] |
0x00020210 add r3, pc | r3 = 0x40468;
0x00020212 str r6, [sp] | *(sp) = r6;
0x00020214 add r2, pc | r2 = 0x40470;
0x00020216 add r0, pc | r0 = 0x40478;
0x00020218 blx 0x9e0c | g_mutex_lock ();
0x0002021c movs r0, 0 | r0 = 0;
0x0002021e b 0x20174 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0xdc04 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.g_closure_add_invalidate_notifier () | void g_closure_add_invalidate_notifier (uint32_t arg1, int16_t arg2, uint32_t arg3) {
| int16_t var_0h;
| int16_t var_2h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0000dc04 cmp r0, 0 |
| if (r0 == 0) {
0x0000dc06 beq 0xdcd2 | goto label_1;
| }
0x0000dc08 push {r4, r5, r6, lr} |
0x0000dc0a mov r5, r2 | r5 = r2;
0x0000dc0c sub sp, 0x10 |
0x0000dc0e cmp r2, 0 |
| if (r2 == 0) {
0x0000dc10 beq 0xdce4 | goto label_2;
| }
0x0000dc12 mov r4, r0 | r4 = r0;
0x0000dc14 ldrsb.w r3, [r0, 3] | r3 = *((r0 + 3));
0x0000dc18 cmp r3, 0 |
| if (r3 < 0) {
0x0000dc1a blt 0xdca2 | goto label_3;
| }
0x0000dc1c ldrh r2, [r0, 2] | r2 = *((r0 + 2));
0x0000dc1e and r3, r2, 0x7f8 | r3 = r2 & 0x7f8;
0x0000dc22 cmp.w r3, 0x7f8 |
| if (r3 == 0x7f8) {
0x0000dc26 beq 0xdcba | goto label_4;
| }
0x0000dc28 ldrb r3, [r0, 2] | r3 = *((r0 + 2));
0x0000dc2a mov r6, r1 | r6 = r1;
0x0000dc2c ubfx r1, r2, 3, 8 | r1 = (r2 >> 3) & ((1 << 8) - 1);
0x0000dc30 ldr r0, [r0, 0xc] | r0 = *((r0 + 0xc));
0x0000dc32 movs r2, 8 | r2 = 8;
0x0000dc34 and ip, r3, 1 |
0x0000dc38 ubfx r3, r3, 1, 2 | r3 = (r3 >> 1) & ((1 << 2) - 1);
0x0000dc3c add.w r3, r3, ip, lsl 1 | r3 += (ip << 1);
0x0000dc40 add r1, r3 | r1 += r3;
0x0000dc42 adds r1, 1 | r1++;
0x0000dc44 blx 0x9d4c | g_datalist_unset_flags ();
0x0000dc48 ldrb r3, [r4, 2] | r3 = *((r4 + 2));
0x0000dc4a ldrh r2, [r4, 2] | r2 = *((r4 + 2));
0x0000dc4c str r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x0000dc4e and r1, r3, 1 | r1 = r3 & 1;
0x0000dc52 ubfx r3, r3, 1, 2 | r3 = (r3 >> 1) & ((1 << 2) - 1);
0x0000dc56 add.w r3, r3, r1, lsl 1 | r3 += (r1 << 1);
0x0000dc5a ubfx r2, r2, 3, 8 | r2 = (r2 >> 3) & ((1 << 8) - 1);
0x0000dc5e add r3, r2 | r3 += r2;
0x0000dc60 str.w r6, [r0, r3, lsl 3] | __asm ("str.w r6, [r0, r3, lsl 3]");
0x0000dc64 ldr r2, [r4, 0xc] | r2 = *((r4 + 0xc));
0x0000dc66 add.w r2, r2, r3, lsl 3 | r2 += (r3 << 3);
0x0000dc6a str r5, [r2, 4] | *((r2 + 4)) = r5;
| label_0:
0x0000dc6c ldr r3, [r4] | r3 = *(r4);
0x0000dc6e ubfx r2, r3, 0x13, 8 | r2 = (r3 >> 0x13) & ((1 << 8) - 1);
0x0000dc72 ubfx r1, r3, 0x10, 0x10 | r1 = (r3 >> 0x10) & ((1 << 0x10) - 1);
0x0000dc76 adds r2, 1 | r2++;
0x0000dc78 str r3, [sp] | *(sp) = r3;
0x0000dc7a bfi r1, r2, 3, 8 | value_0 = BIT_MASK (3, 8);
| value_1 = r2 & value_0;
| value_0 = ~value_0;
| r1 &= value_0;
| r1 |= value_1;
0x0000dc7e strh.w r1, [sp, 2] | var_2h = r1;
0x0000dc82 ldr r2, [sp] | r2 = *(sp);
0x0000dc84 dmb ish | __asm ("dmb ish");
| do {
0x0000dc88 ldrex r1, [r4] | __asm ("ldrex r1, [r4]");
0x0000dc8c cmp r1, r3 |
| if (r1 != r3) {
0x0000dc8e bne 0xdc98 | goto label_5;
| }
0x0000dc90 strex r0, r2, [r4] | __asm ("strex r0, r2, [r4]");
0x0000dc94 cmp r0, 0 |
0x0000dc96 bne 0xdc88 |
| } while (r0 != 0);
| label_5:
0x0000dc98 dmb ish | __asm ("dmb ish");
| if (r0 != 0) {
0x0000dc9c bne 0xdc6c | goto label_0;
| }
0x0000dc9e add sp, 0x10 |
0x0000dca0 pop {r4, r5, r6, pc} |
| label_3:
0x0000dca2 ldr r1, [pc, 0x58] |
0x0000dca4 ldr r2, [pc, 0x58] |
0x0000dca6 ldr r0, [pc, 0x5c] |
0x0000dca8 add r1, pc | r1 = 0x1b9aa;
0x0000dcaa add r2, pc | r2 = 0x1b9ae;
0x0000dcac adds r1, 0xa8 | r1 += 0xa8;
0x0000dcae add r0, pc | r0 = 0x1b9b8;
0x0000dcb0 add sp, 0x10 |
0x0000dcb2 pop.w {r4, r5, r6, lr} |
0x0000dcb6 b.w 0x9c08 | void (*0x9c08)() ();
| label_4:
0x0000dcba ldr r1, [pc, 0x4c] |
0x0000dcbc ldr r2, [pc, 0x4c] |
0x0000dcbe ldr r0, [pc, 0x50] |
0x0000dcc0 add r1, pc | r1 = 0x1b9ce;
0x0000dcc2 add r2, pc | r2 = 0x1b9d2;
0x0000dcc4 adds r1, 0xa8 | r1 += 0xa8;
0x0000dcc6 add r0, pc | r0 = 0x1b9dc;
0x0000dcc8 add sp, 0x10 |
0x0000dcca pop.w {r4, r5, r6, lr} |
0x0000dcce b.w 0x9c08 | void (*0x9c08)() ();
| label_1:
0x0000dcd2 ldr r1, [pc, 0x40] |
0x0000dcd4 ldr r2, [pc, 0x40] |
0x0000dcd6 ldr r0, [pc, 0x44] |
0x0000dcd8 add r1, pc | r1 = 0x1b9f2;
0x0000dcda add r2, pc | r2 = 0x1b9f6;
0x0000dcdc adds r1, 0xa8 | r1 += 0xa8;
0x0000dcde add r0, pc | r0 = 0x1ba00;
0x0000dce0 b.w 0x9c08 | void (*0x9c08)() ();
| label_2:
0x0000dce4 ldr r1, [pc, 0x38] |
0x0000dce6 ldr r2, [pc, 0x3c] |
0x0000dce8 ldr r0, [pc, 0x3c] |
0x0000dcea add r1, pc | r1 = 0x1ba0e;
0x0000dcec add r2, pc | r2 = 0x1ba16;
0x0000dcee adds r1, 0xa8 | r1 += 0xa8;
0x0000dcf0 add r0, pc | r0 = 0x1ba1c;
0x0000dcf2 add sp, 0x10 |
0x0000dcf4 pop.w {r4, r5, r6, lr} |
0x0000dcf8 b.w 0x9c08 | return void (*0x9c08)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0xd878 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.g_closure_add_marshal_guards () | void g_closure_add_marshal_guards (int16_t arg_28h, uint32_t arg1, int16_t arg2, uint32_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_2h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0000d878 push.w {r4, r5, r6, r7, r8, lr} |
0x0000d87c sub sp, 0x10 |
0x0000d87e ldr r6, [sp, 0x28] | r6 = *(arg_28h);
0x0000d880 cmp r0, 0 |
| if (arg_28h == ) {
0x0000d882 beq.w 0xda50 | goto label_2;
| }
0x0000d886 mov r7, r2 | r7 = r2;
0x0000d888 cmp r2, 0 |
| if (r2 == 0) {
0x0000d88a beq.w 0xda68 | goto label_3;
| }
0x0000d88e cmp r6, 0 |
| if (r6 == 0) {
0x0000d890 beq.w 0xda80 | goto label_4;
| }
0x0000d894 mov r5, r3 | r5 = r3;
0x0000d896 ldrb r3, [r0, 3] | r3 = *((r0 + 3));
0x0000d898 mov r4, r0 | r4 = r0;
0x0000d89a lsls r2, r3, 0x18 | r2 = r3 << 0x18;
| if (r2 < r3) {
0x0000d89c bmi.w 0xda00 | goto label_5;
| }
0x0000d8a0 lsls r0, r3, 0x19 | r0 = r3 << 0x19;
| if (r0 < r3) {
0x0000d8a2 bpl 0xd8bc |
0x0000d8a4 ldr r1, [pc, 0x1f0] |
0x0000d8a6 ldr r2, [pc, 0x1f4] |
0x0000d8a8 ldr r0, [pc, 0x1f4] |
0x0000d8aa add r1, pc | r1 = 0x1b346;
0x0000d8ac add r2, pc | r2 = 0x1b34e;
0x0000d8ae adds r1, 0x68 | r1 += 0x68;
0x0000d8b0 add r0, pc | r0 = 0x1b354;
0x0000d8b2 add sp, 0x10 |
0x0000d8b4 pop.w {r4, r5, r6, r7, r8, lr} |
0x0000d8b6 rors r0, r6 | __asm ("rors r0, r6");
0x0000d8b8 b.w 0x9c08 | void (*0x9c08)() ();
| }
0x0000d8bc ldrb r3, [r4, 2] | r3 = *((r4 + 2));
0x0000d8be lsls r2, r3, 0x1f | r2 = r3 << 0x1f;
| if (r2 < r3) {
0x0000d8c0 bmi.w 0xda18 | goto label_6;
| }
0x0000d8c4 ldrh r2, [r4, 2] | r2 = *((r4 + 2));
0x0000d8c6 and r0, r3, 1 | r0 = r3 & 1;
0x0000d8ca mov r8, r1 | r8 = r1;
0x0000d8cc ubfx r1, r3, 1, 2 | r1 = (r3 >> 1) & ((1 << 2) - 1);
0x0000d8d0 add.w r1, r1, r0, lsl 1 | r1 += (r0 << 1);
0x0000d8d4 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x0000d8d6 ubfx r2, r2, 3, 8 | r2 = (r2 >> 3) & ((1 << 8) - 1);
0x0000d8da add r1, r2 | r1 += r2;
0x0000d8dc movs r2, 8 | r2 = 8;
0x0000d8de adds r1, 2 | r1 += 2;
0x0000d8e0 blx 0x9d4c | g_datalist_unset_flags ();
0x0000d8e4 ldrh r3, [r4, 2] | r3 = *((r4 + 2));
0x0000d8e6 str r0, [r4, 0xc] | *((r4 + 0xc)) = r0;
0x0000d8e8 and r2, r3, 0x7f8 | r2 = r3 & 0x7f8;
| if (r2 != 0) {
0x0000d8ec cbz r2, 0xd918 |
0x0000d8ee ldrb r2, [r4, 2] | r2 = *((r4 + 2));
0x0000d8f0 ubfx r3, r3, 3, 8 | r3 = (r3 >> 3) & ((1 << 8) - 1);
0x0000d8f4 and r1, r2, 1 | r1 = r2 & 1;
0x0000d8f8 ubfx r2, r2, 1, 2 | r2 = (r2 >> 1) & ((1 << 2) - 1);
0x0000d8fc add.w r2, r2, r1, lsl 1 | r2 += (r1 << 1);
0x0000d900 add r3, r2 | r3 += r2;
0x0000d902 add.w r2, r0, r2, lsl 3 | r2 = r0 + (r2 << 3);
0x0000d906 adds r3, 1 | r3++;
0x0000d908 add.w r3, r0, r3, lsl 3 | r3 = r0 + (r3 << 3);
0x0000d90c ldm.w r2, {r0, r1} | r0 = *(r2);
| r1 = *((r2 + 4));
0x0000d910 stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
0x0000d914 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x0000d916 ldrh r3, [r4, 2] | r3 = *((r4 + 2));
| }
0x0000d918 ubfx r3, r3, 3, 8 | r3 = (r3 >> 3) & ((1 << 8) - 1);
0x0000d91c cmp r3, 1 |
| if (r3 >= 1) {
0x0000d91e bls 0xd944 |
0x0000d920 ldrb r2, [r4, 2] | r2 = *((r4 + 2));
0x0000d922 and r1, r2, 1 | r1 = r2 & 1;
0x0000d926 ubfx r2, r2, 1, 2 | r2 = (r2 >> 1) & ((1 << 2) - 1);
0x0000d92a add.w r2, r2, r1, lsl 1 | r2 += (r1 << 1);
0x0000d92e add r3, r2 | r3 += r2;
0x0000d930 adds r2, 1 | r2++;
0x0000d932 add.w r2, r0, r2, lsl 3 | r2 = r0 + (r2 << 3);
0x0000d936 add.w r3, r0, r3, lsl 3 | r3 = r0 + (r3 << 3);
0x0000d93a ldm.w r2, {r0, r1} | r0 = *(r2);
| r1 = *((r2 + 4));
0x0000d93e stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
0x0000d942 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
| }
0x0000d944 ldrb.w ip, [r4, 2] | ip = *((r4 + 2));
0x0000d948 tst.w ip, 6 |
| if ((ip & 6) != 0) {
0x0000d94c beq 0xd974 |
0x0000d94e and r3, ip, 1 | r3 = ip & 1;
0x0000d952 ubfx ip, ip, 1, 2 | ip = (ip >> 1) & ((1 << 2) - 1);
0x0000d956 add.w ip, ip, r3, lsl 1 |
0x0000d95a add.w r3, r0, r3, lsl 4 | r3 = r0 + (r3 << 4);
0x0000d95e add.w ip, ip, 1 |
0x0000d962 add.w ip, r0, ip, lsl 3 |
0x0000d966 ldm.w r3, {r0, r1} | r0 = *(r3);
| r1 = *((r3 + 4));
0x0000d96a stm.w ip, {r0, r1} | *(ip) = r0;
| *((ip + 4)) = r1;
0x0000d96e ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x0000d970 ldrb.w ip, [r4, 2] | ip = *((r4 + 2));
| }
0x0000d974 ubfx r3, ip, 1, 2 | r3 = (ip >> 1) & ((1 << 2) - 1);
0x0000d978 cmp r3, 1 |
| if (r3 >= 1) {
0x0000d97a bls 0xd9a0 |
0x0000d97c and ip, ip, 1 |
0x0000d980 lsl.w ip, ip, 1 |
0x0000d984 add r3, ip | r3 += ip;
0x0000d986 add.w ip, ip, 1 |
0x0000d98a add.w ip, r0, ip, lsl 3 |
0x0000d98e add.w r3, r0, r3, lsl 3 | r3 = r0 + (r3 << 3);
0x0000d992 ldm.w ip, {r0, r1} | r0 = *(ip);
| r1 = *((ip + 4));
0x0000d996 stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
0x0000d99a ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x0000d99c ldrb.w ip, [r4, 2] | ip = *((r4 + 2));
0x0000d99e stm r0!, {r1} | *(r0!) = r1;
| }
0x0000d9a0 tst.w ip, 1 |
| if ((ip & 1) != 0) {
0x0000d9a4 bne 0xda30 | goto label_7;
| }
| label_1:
0x0000d9a6 and ip, ip, 1 |
0x0000d9aa str.w r8, [r0, ip, lsl 3] | __asm ("str.w r8, [r0, ip, lsl 3]");
0x0000d9ae lsl.w ip, ip, 3 |
0x0000d9b2 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0000d9b4 add r3, ip | r3 += ip;
0x0000d9b6 add.w ip, ip, 8 |
0x0000d9ba str r7, [r3, 4] | *((r3 + 4)) = r7;
0x0000d9bc ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0000d9be str.w r5, [r3, ip] | __asm ("str.w r5, [r3, ip]");
0x0000d9c2 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0000d9c4 add r3, ip | r3 += ip;
0x0000d9c6 str r6, [r3, 4] | *((r3 + 4)) = r6;
| label_0:
0x0000d9c8 ldr r3, [r4] | r3 = *(r4);
0x0000d9ca ubfx r2, r3, 0x10, 1 | r2 = (r3 >> 0x10) & ((1 << 1) - 1);
0x0000d9ce ubfx r1, r3, 0x10, 8 | r1 = (r3 >> 0x10) & ((1 << 8) - 1);
0x0000d9d2 adds r2, 1 | r2++;
0x0000d9d4 str r3, [sp] | *(sp) = r3;
0x0000d9d6 bfi r1, r2, 0, 1 | value_0 = BIT_MASK (0, 1);
| value_1 = r2 & value_0;
| value_0 = ~value_0;
| r1 &= value_0;
| r1 |= value_1;
0x0000d9da strb.w r1, [sp, 2] | var_2h = r1;
0x0000d9de ldr r2, [sp] | r2 = *(sp);
0x0000d9e0 dmb ish | __asm ("dmb ish");
| do {
0x0000d9e4 ldrex r1, [r4] | __asm ("ldrex r1, [r4]");
0x0000d9e8 cmp r1, r3 |
| if (r1 != r3) {
0x0000d9ea bne 0xd9f4 | goto label_8;
| }
0x0000d9ec strex r0, r2, [r4] | __asm ("strex r0, r2, [r4]");
0x0000d9f0 cmp r0, 0 |
0x0000d9f2 bne 0xd9e4 |
| } while (r0 != 0);
| label_8:
0x0000d9f4 dmb ish | __asm ("dmb ish");
| if (r0 != 0) {
0x0000d9f8 bne 0xd9c8 | goto label_0;
| }
0x0000d9fa add sp, 0x10 |
0x0000d9fc pop.w {r4, r5, r6, r7, r8, pc} |
| label_5:
0x0000da00 ldr r1, [pc, 0xa0] |
0x0000da02 ldr r2, [pc, 0xa4] |
0x0000da04 ldr r0, [pc, 0xa4] |
0x0000da06 add r1, pc | r1 = 0x1b4ae;
0x0000da08 add r2, pc | r2 = 0x1b4b6;
0x0000da0a adds r1, 0x68 | r1 += 0x68;
0x0000da0c add r0, pc | r0 = 0x1b4bc;
0x0000da0e add sp, 0x10 |
0x0000da10 pop.w {r4, r5, r6, r7, r8, lr} |
0x0000da14 b.w 0x9c08 | void (*0x9c08)() ();
| label_6:
0x0000da18 ldr r1, [pc, 0x94] |
0x0000da1a ldr r2, [pc, 0x98] |
0x0000da1c ldr r0, [pc, 0x98] |
0x0000da1e add r1, pc | r1 = 0x1b4d2;
0x0000da20 add r2, pc | r2 = 0x1b4da;
0x0000da22 adds r1, 0x68 | r1 += 0x68;
0x0000da24 add r0, pc | r0 = 0x1b4e0;
0x0000da26 add sp, 0x10 |
0x0000da28 pop.w {r4, r5, r6, r7, r8, lr} |
0x0000da2c b.w 0x9c08 | void (*0x9c08)() ();
| label_7:
0x0000da30 and ip, ip, 1 |
0x0000da34 add.w r3, r0, ip, lsl 3 | r3 = r0 + (ip << 3);
0x0000da38 add.w ip, r0, ip, lsl 4 |
0x0000da3c ldm.w r3, {r0, r1} | r0 = *(r3);
| r1 = *((r3 + 4));
0x0000da40 add.w ip, ip, 8 |
0x0000da44 stm.w ip, {r0, r1} | *(ip) = r0;
| *((ip + 4)) = r1;
0x0000da48 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
0x0000da4a ldrb.w ip, [r4, 2] | ip = *((r4 + 2));
0x0000da4e b 0xd9a6 | goto label_1;
| label_2:
0x0000da50 ldr r1, [pc, 0x68] |
0x0000da52 ldr r2, [pc, 0x6c] |
0x0000da54 ldr r0, [pc, 0x6c] |
0x0000da56 add r1, pc | r1 = 0x1b516;
0x0000da58 add r2, pc | r2 = 0x1b51e;
0x0000da5a adds r1, 0x68 | r1 += 0x68;
0x0000da5c add r0, pc | r0 = 0x1b524;
0x0000da5e add sp, 0x10 |
0x0000da60 pop.w {r4, r5, r6, r7, r8, lr} |
0x0000da62 rors r0, r6 | __asm ("rors r0, r6");
0x0000da64 b.w 0x9c08 | void (*0x9c08)() ();
| label_3:
0x0000da68 ldr r1, [pc, 0x5c] |
0x0000da6a ldr r2, [pc, 0x60] |
0x0000da6c ldr r0, [pc, 0x60] |
0x0000da6e add r1, pc | r1 = 0x1b53a;
0x0000da70 add r2, pc | r2 = 0x1b542;
0x0000da72 adds r1, 0x68 | r1 += 0x68;
0x0000da74 add r0, pc | r0 = 0x1b548;
0x0000da76 add sp, 0x10 |
0x0000da78 pop.w {r4, r5, r6, r7, r8, lr} |
0x0000da7a rors r0, r6 | __asm ("rors r0, r6");
0x0000da7c b.w 0x9c08 | void (*0x9c08)() ();
| label_4:
0x0000da80 ldr r1, [pc, 0x50] |
0x0000da82 ldr r2, [pc, 0x54] |
0x0000da84 ldr r0, [pc, 0x54] |
0x0000da86 add r1, pc | r1 = 0x1b55e;
0x0000da88 add r2, pc | r2 = 0x1b566;
0x0000da8a adds r1, 0x68 | r1 += 0x68;
0x0000da8c add r0, pc | r0 = 0x1b56c;
0x0000da8e add sp, 0x10 |
0x0000da90 pop.w {r4, r5, r6, r7, r8, lr} |
0x0000da94 b.w 0x9c08 | return void (*0x9c08)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0xdfc8 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.g_closure_invalidate () | void g_closure_invalidate (int16_t arg1) {
| int16_t var_0h;
| int16_t var_2h;
| int16_t var_3h;
| r0 = arg1;
| if (r0 == 0) {
0x0000dfc8 cbz r0, 0xe01c | goto label_4;
| }
0x0000dfca push {r4, lr} |
0x0000dfcc mov r4, r0 | r4 = r0;
0x0000dfce ldrsb.w r3, [r0, 3] | r3 = *((r0 + 3));
0x0000dfd2 sub sp, 0x10 |
0x0000dfd4 cmp r3, 0 |
| if (r3 < 0) {
0x0000dfd6 bge 0xdfdc |
0x0000dfd8 add sp, 0x10 |
0x0000dfda pop {r4, pc} |
| }
0x0000dfdc bl 0xdd2c | g_closure_ref ();
| label_0:
0x0000dfe0 ldr r3, [r4] | r3 = *(r4);
0x0000dfe2 str r3, [sp] | *(sp) = r3;
0x0000dfe4 lsrs r2, r3, 0x18 | r2 = r3 >> 0x18;
0x0000dfe6 lsrs r1, r3, 0x1f | r1 = r3 >> 0x1f;
0x0000dfe8 orr r2, r2, 0x80 | r2 |= 0x80;
0x0000dfec strb.w r2, [sp, 3] | var_3h = r2;
0x0000dff0 ldr r2, [sp] | r2 = *(sp);
0x0000dff2 dmb ish | __asm ("dmb ish");
| do {
0x0000dff6 ldrex r0, [r4] | __asm ("ldrex r0, [r4]");
0x0000dffa cmp r0, r3 |
| if (r0 != r3) {
0x0000dffc bne 0xe008 | goto label_5;
| }
0x0000dffe strex ip, r2, [r4] | __asm ("strex ip, r2, [r4]");
0x0000e002 cmp.w ip, 0 |
0x0000e006 bne 0xdff6 |
| } while (ip != 0);
| label_5:
0x0000e008 dmb ish | __asm ("dmb ish");
| if (ip != 0) {
0x0000e00c bne 0xdfe0 | goto label_0;
| }
| if (r1 != 0) {
0x0000e00e cbz r1, 0xe02e |
0x0000e010 mov r0, r4 | r0 = r4;
0x0000e012 add sp, 0x10 |
0x0000e014 pop.w {r4, lr} |
0x0000e018 b.w 0xde14 | void (*0xde14)() ();
| label_4:
0x0000e01c ldr r1, [pc, 0xe0] |
0x0000e01e ldr r2, [pc, 0xe4] |
0x0000e020 ldr r0, [pc, 0xe4] |
0x0000e022 add r1, pc | r1 = 0x1c126;
0x0000e024 add r2, pc | r2 = 0x1c12e;
0x0000e026 adds r1, 0xec | r1 += 0xec;
0x0000e028 add r0, pc | r0 = 0x1c134;
0x0000e02a b.w 0x9c08 | void (*0x9c08)() ();
| }
| label_1:
0x0000e02e ldr r3, [r4] | r3 = *(r4);
0x0000e030 str r3, [sp] | *(sp) = r3;
0x0000e032 lsrs r2, r3, 0x18 | r2 = r3 >> 0x18;
0x0000e034 orr r2, r2, 8 | r2 |= 8;
0x0000e038 strb.w r2, [sp, 3] | var_3h = r2;
0x0000e03c ldr r2, [sp] | r2 = *(sp);
0x0000e03e dmb ish | __asm ("dmb ish");
| do {
0x0000e042 ldrex r1, [r4] | __asm ("ldrex r1, [r4]");
0x0000e046 cmp r1, r3 |
| if (r1 != r3) {
0x0000e048 bne 0xe052 | goto label_6;
| }
0x0000e04a strex r0, r2, [r4] | __asm ("strex r0, r2, [r4]");
0x0000e04e cmp r0, 0 |
0x0000e050 bne 0xe042 |
| } while (r0 != 0);
| label_6:
0x0000e052 dmb ish | __asm ("dmb ish");
| if (r0 == 0) {
0x0000e056 beq 0xe0b6 | goto label_7;
| }
0x0000e058 b 0xe02e | goto label_1;
| label_2:
0x0000e05a ldr r2, [r4] | r2 = *(r4);
0x0000e05c ubfx r3, r2, 0x13, 8 | r3 = (r2 >> 0x13) & ((1 << 8) - 1);
0x0000e060 ubfx r1, r2, 0x10, 0x10 | r1 = (r2 >> 0x10) & ((1 << 0x10) - 1);
0x0000e064 subs r3, 1 | r3--;
0x0000e066 str r2, [sp] | *(sp) = r2;
0x0000e068 uxtb r3, r3 | r3 = (int8_t) r3;
0x0000e06a bfi r1, r3, 3, 8 | value_0 = BIT_MASK (3, 8);
| value_1 = r3 & value_0;
| value_0 = ~value_0;
| r1 &= value_0;
| r1 |= value_1;
0x0000e06e strh.w r1, [sp, 2] | var_2h = r1;
0x0000e072 ldr r1, [sp] | r1 = *(sp);
0x0000e074 dmb ish | __asm ("dmb ish");
| do {
0x0000e078 ldrex r0, [r4] | __asm ("ldrex r0, [r4]");
0x0000e07c cmp r0, r2 |
| if (r0 != r2) {
0x0000e07e bne 0xe08a | goto label_8;
| }
0x0000e080 strex ip, r1, [r4] | __asm ("strex ip, r1, [r4]");
0x0000e084 cmp.w ip, 0 |
0x0000e088 bne 0xe078 |
| } while (ip != 0);
| label_8:
0x0000e08a dmb ish | __asm ("dmb ish");
| if (ip != 0) {
0x0000e08e bne 0xe05a | goto label_2;
| }
0x0000e090 ldrb r2, [r4, 2] | r2 = *((r4 + 2));
0x0000e092 ldr r1, [r4, 0xc] | r1 = *((r4 + 0xc));
0x0000e094 and r0, r2, 1 | r0 = r2 & 1;
0x0000e098 ubfx r2, r2, 1, 2 | r2 = (r2 >> 1) & ((1 << 2) - 1);
0x0000e09a lsls r1, r0, 9 | r1 = r0 << 9;
0x0000e09c add.w r3, r3, r0, lsl 1 | r3 += (r0 << 1);
0x0000e0a0 add r3, r2 | r3 += r2;
0x0000e0a2 add.w r2, r1, r3, lsl 3 | r2 = r1 + (r3 << 3);
0x0000e0a6 ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x0000e0a8 str r0, [r4, 4] | *((r4 + 4)) = r0;
0x0000e0aa ldr.w r0, [r1, r3, lsl 3] | offset_2 = r3 << 3;
| r0 = *((r1 + offset_2));
0x0000e0ae mov r1, r4 | r1 = r4;
0x0000e0b0 str r0, [r4, 8] | *((r4 + 8)) = r0;
0x0000e0b2 ldr r3, [r2, 4] | r3 = *((r2 + 4));
0x0000e0b4 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| label_7:
0x0000e0b6 ldrh r3, [r4, 2] | r3 = *((r4 + 2));
0x0000e0b8 and r3, r3, 0x7f8 | r3 &= 0x7f8;
0x0000e0bc cmp r3, 0 |
| if (r3 != 0) {
0x0000e0be bne 0xe05a | goto label_2;
| }
0x0000e0c0 movs r3, 0 | r3 = 0;
0x0000e0c2 strd r3, r3, [r4, 4] | __asm ("strd r3, r3, [r4, 4]");
| label_3:
0x0000e0c6 ldr r3, [r4] | r3 = *(r4);
0x0000e0c8 ubfx r2, r3, 0x18, 8 | r2 = (r3 >> 0x18) & ((1 << 8) - 1);
0x0000e0ca str r7, [r0, 0x20] | *((r0 + 0x20)) = r7;
0x0000e0cc str r3, [sp] | *(sp) = r3;
0x0000e0ce bfc r2, 3, 1 | value_3 = BIT_MASK (1, );
| value_3 = ~value_3;
| r2 &= value_3;
0x0000e0d0 lsls r3, r0, 0xb | r3 = r0 << 0xb;
0x0000e0d2 strb.w r2, [sp, 3] | var_3h = r2;
0x0000e0d6 ldr r2, [sp] | r2 = *(sp);
0x0000e0d8 dmb ish | __asm ("dmb ish");
| do {
0x0000e0dc ldrex r1, [r4] | __asm ("ldrex r1, [r4]");
0x0000e0e0 cmp r1, r3 |
| if (r1 != r3) {
0x0000e0e2 bne 0xe0ec | goto label_9;
| }
0x0000e0e4 strex r0, r2, [r4] | __asm ("strex r0, r2, [r4]");
0x0000e0e8 cmp r0, 0 |
0x0000e0ea bne 0xe0dc |
| } while (r0 != 0);
| label_9:
0x0000e0ec dmb ish | __asm ("dmb ish");
| if (r0 != 0) {
0x0000e0f0 bne 0xe0c6 | goto label_3;
| }
0x0000e0f2 mov r0, r4 | r0 = r4;
0x0000e0f4 add sp, 0x10 |
0x0000e0f6 pop.w {r4, lr} |
0x0000e0fa b.w 0xde14 | return void (*0xde14)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0xdd2c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.g_closure_ref () | void g_closure_ref (uint32_t arg1) {
| int16_t var_0h;
| r0 = arg1;
0x0000dd2c push {r4, lr} |
0x0000dd2e mov r4, r0 | r4 = r0;
0x0000dd30 sub sp, 0x10 |
0x0000dd32 cmp r0, 0 |
| if (r0 == 0) {
0x0000dd34 beq 0xddb6 | goto label_1;
| }
0x0000dd36 movw r2, 0x7fff | r2 = 0x7fff;
0x0000dd3a ldrh r3, [r0] | r3 = *(r0);
0x0000dd3c ubfx r3, r3, 0, 0xf | r3 = (r3 >> 0) & ((1 << 0xf) - 1);
| if (r3 == 0) {
0x0000dd40 cbz r3, 0xdd82 | goto label_2;
| }
0x0000dd42 cmp r3, r2 |
| if (r3 == r2) {
0x0000dd44 beq 0xddce | goto label_3;
| }
| label_0:
0x0000dd46 ldr r1, [r4] | r1 = *(r4);
0x0000dd48 mov r3, r1 | r3 = r1;
0x0000dd4a str r1, [sp] | *(sp) = r1;
0x0000dd4c adds r2, r3, 1 | r2 = r3 + 1;
0x0000dd4e ubfx r2, r2, 0, 0xf | r2 = (r2 >> 0) & ((1 << 0xf) - 1);
0x0000dd52 bfi r3, r2, 0, 0xf | value_0 = BIT_MASK (0, 0xf);
| value_1 = r2 & value_0;
| value_0 = ~value_0;
| r3 &= value_0;
| r3 |= value_1;
0x0000dd56 strh.w r3, [sp] | *(sp) = r3;
0x0000dd5a ldr r3, [sp] | r3 = *(sp);
0x0000dd5c dmb ish | __asm ("dmb ish");
| do {
0x0000dd60 ldrex r0, [r4] | __asm ("ldrex r0, [r4]");
0x0000dd64 cmp r0, r1 |
| if (r0 != r1) {
0x0000dd66 bne 0xdd72 | goto label_4;
| }
0x0000dd68 strex ip, r3, [r4] | __asm ("strex ip, r3, [r4]");
0x0000dd6c cmp.w ip, 0 |
0x0000dd70 bne 0xdd60 |
| } while (ip != 0);
| label_4:
0x0000dd72 dmb ish | __asm ("dmb ish");
| if (ip != 0) {
0x0000dd76 bne 0xdd46 | goto label_0;
| }
0x0000dd78 cmp r2, 1 |
| if (r2 >= 1) {
0x0000dd7a bls 0xdd9c |
0x0000dd7c mov r0, r4 | r0 = r4;
0x0000dd7e add sp, 0x10 |
0x0000dd80 pop {r4, pc} |
| label_2:
0x0000dd82 ldr r1, [pc, 0x60] |
0x0000dd84 mov r4, r3 | r4 = r3;
0x0000dd86 ldr r2, [pc, 0x60] |
0x0000dd88 ldr r0, [pc, 0x60] |
0x0000dd8a add r1, pc | r1 = 0x1bb74;
0x0000dd8c add r2, pc | r2 = 0x1bb7a;
0x0000dd8e adds r1, 0xcc | r1 += 0xcc;
0x0000dd90 add r0, pc | r0 = 0x1bb80;
0x0000dd92 blx 0x9c0c | fcn_00009c0c ();
0x0000dd96 mov r0, r4 | r0 = r4;
0x0000dd98 add sp, 0x10 |
0x0000dd9a pop {r4, pc} |
| }
0x0000dd9c ldr r1, [pc, 0x50] |
0x0000dd9e movs r4, 0 | r4 = 0;
0x0000dda0 ldr r2, [pc, 0x50] |
0x0000dda2 ldr r0, [pc, 0x54] |
0x0000dda4 add r1, pc | r1 = 0x1bb98;
0x0000dda6 add r2, pc | r2 = 0x1bb9e;
0x0000dda8 adds r1, 0xcc | r1 += 0xcc;
0x0000ddaa add r0, pc | r0 = 0x1bba8;
0x0000ddac blx 0x9c0c | fcn_00009c0c ();
0x0000ddb0 mov r0, r4 | r0 = r4;
0x0000ddb2 add sp, 0x10 |
0x0000ddb4 pop {r4, pc} |
| label_1:
0x0000ddb6 ldr r1, [pc, 0x44] |
0x0000ddb8 ldr r2, [pc, 0x44] |
0x0000ddba ldr r0, [pc, 0x48] |
0x0000ddbc add r1, pc | r1 = 0x1bbbe;
0x0000ddbe add r2, pc | r2 = 0x1bbc2;
0x0000ddc0 adds r1, 0xcc | r1 += 0xcc;
0x0000ddc2 add r0, pc | r0 = 0x1bbcc;
0x0000ddc4 blx 0x9c0c | fcn_00009c0c ();
0x0000ddc8 mov r0, r4 | r0 = r4;
0x0000ddca add sp, 0x10 |
0x0000ddcc pop {r4, pc} |
| label_3:
0x0000ddce ldr r1, [pc, 0x38] |
0x0000ddd0 movs r4, 0 | r4 = 0;
0x0000ddd2 ldr r2, [pc, 0x38] |
0x0000ddd4 ldr r0, [pc, 0x38] |
0x0000ddd6 add r1, pc | r1 = 0x1bbe4;
0x0000ddd8 add r2, pc | r2 = 0x1bbea;
0x0000ddda adds r1, 0xcc | r1 += 0xcc;
0x0000dddc add r0, pc | r0 = 0x1bbf0;
0x0000ddde blx 0x9c0c | fcn_00009c0c ();
0x0000dde0 invalid |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x13504 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.g_object_get_valist () | void g_object_get_valist (int16_t arg_10h, int16_t arg_1ch, int16_t arg_188h, int16_t arg_2c8h, int16_t arg_368h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_1h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int32_t var_0h_2;
| int32_t var_8h_2;
| int32_t var_8h_3;
| int32_t var_10h_2;
| int32_t var_10h_3;
| int16_t var_28h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x00013504 svcmi 0xf0e92d | __asm ("svcmi 0xf0e92d");
0x00013508 mov fp, r1 |
0x0001350a sub sp, 0x6c |
0x0001350c movs r1, 0x50 | r1 = 0x50;
0x0001350e mov r7, r0 | r7 = r0;
0x00013510 mov r4, r2 | r4 = r2;
0x00013512 bl 0x2493c | r0 = g_type_check_instance_is_fundamentally_a ();
| if (r0 == 0) {
0x00013516 cbnz r0, 0x13532 |
0x00013518 ldr r1, [pc, 0x210] |
0x0001351a ldr r2, [pc, 0x214] |
0x0001351c ldr r0, [pc, 0x214] |
0x0001351e add r1, pc |
0x00013520 add r2, pc | r2 = 0x26c56;
0x00013522 add.w r1, r1, 0x37c | r1 = 0x26fca;
0x00013526 add r0, pc | r0 = 0x26c5e;
0x00013528 add sp, 0x6c |
0x0001352a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001352e b.w 0x9c08 | void (*0x9c08)() ();
| }
0x00013532 mov r0, r7 | r0 = r7;
0x00013534 bl 0x11308 | g_object_ref ();
0x00013538 cmp.w fp, 0 |
| if (fp != 0) {
0x0001353c beq 0x135a4 |
0x0001353e ldr.w r8, [pc, 0x1f8] |
0x00013542 add r5, sp, 0x10 | r5 += var_10h;
0x00013544 ldr.w sl, [pc, 0x1f4] |
0x00013548 ldr r3, [pc, 0x1f4] |
0x0001354a add r8, pc | r8 = 0x26c88;
0x0001354c add sl, pc | sl = 0x26c8c;
0x0001354e add r3, pc | r3 = 0x26c92;
0x00013550 str r3, [sp, 0xc] | var_ch = r3;
| label_0:
0x00013552 ldr r2, [r7] | r2 = *(r7);
0x00013554 movs r3, 0 | r3 = 0;
0x00013556 strd r3, r3, [r5] | __asm ("strd r3, r3, [r5]");
0x0001355a mov r1, fp | r1 = fp;
0x0001355c strd r3, r3, [r5, 8] | __asm ("strd r3, r3, [var_8h_2]");
0x00013560 strd r3, r3, [r5, 0x10] | __asm ("strd r3, r3, [var_10h_2]");
0x00013562 adds r3, 4 | r3 += 4;
0x00013564 movs r3, 1 | r3 = 1;
0x00013566 ldr.w r0, [r8, 0x28] | r0 = *((r8 + 0x28));
0x0001356a ldr r2, [r2] | r2 = *(r2);
0x0001356c bl 0x1654c | r0 = g_param_spec_pool_lookup ();
0x00013570 mov r6, r0 | r6 = r0;
0x00013572 cmp r0, 0 |
| if (r0 == 0) {
0x00013574 beq.w 0x1368c | goto label_5;
| }
0x00013578 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x0001357a lsls r3, r3, 0x1f | r3 <<= 0x1f;
| if (r3 < r3) {
0x0001357c bmi 0x135b0 | goto label_6;
| }
0x0001357e ldr r3, [r7] | r3 = *(r7);
0x00013580 ldr r4, [r0, 4] | r4 = *((r0 + 4));
0x00013582 ldr r0, [r3] | r0 = *(r3);
0x00013584 bl 0x22b9c | g_type_name ();
0x00013588 ldr r3, [pc, 0x1b8] |
0x0001358a mov r5, r0 | r5 = r0;
0x0001358c ldr r2, [pc, 0x1b8] |
0x0001358e movs r1, 0x10 | r1 = 0x10;
0x00013590 ldr r0, [pc, 0x1b8] |
0x00013592 add r3, pc |
0x00013594 strd r4, r5, [sp] | __asm ("strd r4, r5, [sp]");
0x00013598 add r2, pc | r2 = 0x26ce4;
0x0001359a add.w r3, r3, 0x35c | r3 = 0x27036;
0x0001359e add r0, pc | r0 = 0x26cee;
0x000135a0 blx 0x9e0c | g_mutex_lock ();
| }
| label_1:
0x000135a4 mov r0, r7 | r0 = r7;
0x000135a6 add sp, 0x6c |
0x000135a8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000135ac b.w 0x11684 | void (*0x11684)() ();
| label_6:
0x000135b0 ldr r1, [r0, 0xc] | r1 = *((r0 + 0xc));
0x000135b2 mov r0, r5 | r0 = r5;
0x000135b4 bl 0x2698c | g_value_init ();
0x000135b8 ldr r0, [r6, 0x10] | r0 = *((r6 + 0x10));
0x000135ba bl 0x22450 | g_type_class_peek ();
0x000135be ldr.w sb, [r6, 0x24] | sb = *((r6 + 0x24));
0x000135c2 mov fp, r0 |
0x000135c4 cmp r0, 0 |
| if (r0 == 0) {
0x000135c6 beq 0x136bc | goto label_7;
| }
0x000135c8 mov r0, r6 | r0 = r6;
0x000135ca bl 0x15bb0 | g_param_spec_get_redirect_target ();
0x000135cc invalid |
0x000135d0 ite ne |
| if (r0 == 0) {
0x000135d2 movne r3, r0 | r3 = r0;
| }
| if (r0 != 0) {
0x000135d4 moveq r3, r6 | r3 = r6;
| }
0x000135d6 ldr r2, [r3, 8] | r2 = *((r3 + 8));
0x000135d8 cmp r2, 0 |
| if (r2 < 0) {
0x000135da bge 0x135e6 |
0x000135dc mov r0, r3 | r0 = r3;
0x000135de str r3, [sp, 8] | var_8h = r3;
0x000135e0 bl 0x11534 | fcn_00011534 (r0);
0x000135e4 ldr r3, [sp, 8] | r3 = var_8h;
| }
0x000135e6 ldr.w r6, [fp, 0x10] | r6 = *(arg_10h);
0x000135ea mov r2, r5 | r2 = r5;
0x000135ec mov r1, sb | r1 = sb;
0x000135ee mov r0, r7 | r0 = r7;
0x000135f0 blx r6 | uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
| label_3:
0x000135f2 ldr r0, [sp, 0x10] | r0 = var_10h;
0x000135f4 add r6, sp, 0x28 | r6 += var_28h;
0x000135f6 bl 0x25228 | g_type_value_table_peek ();
0x000135fa ldr.w sb, [r0, 0x18] | sb = *((r0 + 0x18));
0x000135fe movs r2, 0x40 | r2 = 0x40;
0x00013600 mov fp, r0 |
0x00013602 movs r1, 0 | r1 = 0;
0x00013604 mov r0, r6 | r0 = r6;
0x00013606 blx 0x9db8 | g_string_append_printf ();
0x0001360a ldrb.w r2, [sb] | r2 = *(sb);
0x0001360e cmp r2, 0 |
| if (r2 == 0) {
0x00013610 beq 0x136e4 | goto label_8;
| }
0x00013612 mov r3, sb | r3 = sb;
0x00013614 mov r0, r6 | r0 = r6;
0x00013616 rsb.w ip, sb, 1 |
| do {
0x0001361a subs r2, 0x64 | r2 -= 0x64;
0x0001361c add.w r1, ip, r3 | r1 = ip + r3;
0x00013620 cmp r2, 0xd |
| if (r2 > 0xd) {
0x00013622 bhi 0x1370e | goto label_9;
| }
| /* switch table (14 cases) at 0x13628 */
0x00013624 tbb [pc, r2] | __asm ("tbb [0x0001362c]");
0x00013636 ldr r2, [r4], 4 | r2 = *(r4);
| r4 += 4;
0x0001363a str r2, [r0] | *(r0) = r2;
| label_2:
0x0001363c ldrb r2, [r3, 1]! | r2 = *((r3 += 1));
0x00013640 adds r0, 8 | r0 += 8;
0x00013642 cmp r2, 0 |
0x00013644 bne 0x1361a |
| } while (r2 != 0);
| label_4:
0x00013646 mov r2, r6 | r2 = r6;
0x00013648 ldr.w fp, [fp, 0x1c] | fp = *(arg_1ch);
0x0001364c movs r3, 0 | r3 = 0;
0x0001364e mov r0, r5 | r0 = r5;
0x00013650 blx fp | r0 = fp (r0, r2, r3);
0x00013652 mov r6, r0 | r6 = r0;
0x00013654 cmp r0, 0 |
| if (r0 != 0) {
0x00013656 bne 0x136e8 | goto label_10;
| }
0x00013658 mov r0, r5 | r0 = r5;
0x0001365a bl 0x26ad0 | g_value_unset ();
0x0001365e ldr fp, [r4], 4 | fp = *(r4);
| r4 += 4;
0x00013662 cmp.w fp, 0 |
| if (fp != 0) {
0x00013666 bne.w 0x13552 | goto label_0;
| }
0x0001366a b 0x135a4 | goto label_1;
0x0001366c adds r4, 7 | r4 += 7;
0x0001366e bic r4, r4, 7 | r4 = BIT_MASK (r4, 7);
0x00013672 vldmia r4!, {d16} | __asm ("vldmia r4!, {d16}");
0x00013676 vstr d16, [r0] | __asm ("vstr d16, [r0]");
0x00013678 lsrs r0, r0, 0xc | r0 >>= 0xc;
0x0001367a b 0x1363c | goto label_2;
0x0001367c adds r4, 7 | r4 += 7;
0x0001367e bic r4, r4, 7 | r4 = BIT_MASK (r4, 7);
0x00013682 vldmia r4!, {d16} | __asm ("vldmia r4!, {d16}");
0x00013686 vstr d16, [r0] | __asm ("vstr d16, [r0]");
0x0001368a b 0x1363c | goto label_2;
| label_5:
0x0001368c ldr r3, [r7] | r3 = *(r7);
0x0001368e ldr r0, [r3] | r0 = *(r3);
0x00013690 bl 0x22b9c | g_type_name ();
0x00013694 ldr r3, [pc, 0xb8] |
0x00013696 mov r4, r0 | r4 = r0;
0x00013698 ldr r2, [pc, 0xb8] |
0x0001369a movs r1, 0x10 | r1 = 0x10;
0x0001369c ldr r0, [pc, 0xb8] |
0x0001369e add r3, pc |
0x000136a0 strd r4, fp, [sp] | __asm ("strd r4, fp, [sp]");
0x000136a4 add r2, pc | r2 = 0x26dfc;
0x000136a6 add.w r3, r3, 0x35c | r3 = 0x2714e;
0x000136aa add r0, pc | r0 = 0x26e06;
0x000136ac blx 0x9e0c | g_mutex_lock ();
0x000136b0 mov r0, r7 | r0 = r7;
0x000136b2 add sp, 0x6c |
0x000136b4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000136b8 b.w 0x11684 | void (*0x11684)() ();
| label_7:
0x000136bc ldr r0, [r6, 0x10] | r0 = *((r6 + 0x10));
0x000136be bl 0x22b9c | g_type_name ();
0x000136c2 ldr.w fp, [r6, 4] | fp = *((r6 + 4));
0x000136c6 mov r3, r0 | r3 = r0;
0x000136c8 ldr r0, [r6, 0x10] | r0 = *((r6 + 0x10));
0x000136ca mov r6, r3 | r6 = r3;
0x000136cc bl 0x22b9c | g_type_name ();
0x000136d0 mov r3, r6 | r3 = r6;
0x000136d2 str r0, [sp, 4] | var_4h = r0;
0x000136d4 mov r2, sl | r2 = sl;
0x000136d6 ldr r0, [sp, 0xc] | r0 = var_ch;
0x000136d8 movs r1, 0x10 | r1 = 0x10;
0x000136da str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x000136de blx 0x9e0c | g_mutex_lock ();
0x000136e2 b 0x135f2 | goto label_3;
| label_8:
0x000136e4 mov r1, r2 | r1 = r2;
0x000136e6 b 0x13646 | goto label_4;
| label_10:
0x000136e8 ldr r3, [pc, 0x70] |
0x000136ea movs r1, 0x10 | r1 = 0x10;
0x000136ec str r0, [sp] | *(sp) = r0;
0x000136ee ldr r2, [pc, 0x70] |
0x000136f0 ldr r0, [pc, 0x70] |
0x000136f2 add r3, pc |
0x000136f4 add.w r3, r3, 0x37c | r3 = 0x271ce;
0x000136f8 add r2, pc | r2 = 0x26e5e;
0x000136fa add r0, pc | r0 = 0x26e62;
0x000136fc blx 0x9e0c | g_mutex_lock ();
0x00013700 mov r0, r6 | r0 = r6;
0x00013702 blx 0x9ac8 | fcn_00009ac8 ();
0x00013706 mov r0, r5 | r0 = r5;
0x00013708 bl 0x26ad0 | g_value_unset ();
0x0001370c b 0x135a4 | goto label_1;
| label_9:
0x0001370e ldr r3, [pc, 0x58] |
0x00013710 movs r4, 0 | r4 = 0;
0x00013712 ldr r1, [pc, 0x58] |
0x00013714 movw r2, 0xa1d | r2 = 0xa1d;
0x00013718 ldr r0, [pc, 0x54] |
0x0001371a add r3, pc |
0x0001371c str r4, [sp] | *(sp) = r4;
0x0001371e add r1, pc | r1 = 0x26e90;
0x00013720 add.w r3, r3, 0x37c | r3 = 0x27204;
0x00013724 add r0, pc | r0 = 0x26e98;
0x00013726 blx 0x9bf0 | g_array_new ();
0x0001372a nop |
0x0001372c stm r5!, {r1, r2, r5, r7} | *(r5!) = r1;
| *((r5! + 4)) = r2;
| *((r5! + 8)) = r5;
| *((r5! + 12)) = r7;
0x0001372e movs r1, r0 | r1 = r0;
| if (r0 != 0) {
0x00013730 cbnz r0, 0x13790 | void (*0x13790)() ();
| }
0x00013732 movs r1, r0 | r1 = r0;
0x00013734 str r7, [sp, 0x368] | *(arg_368h) = r7;
0x00013736 movs r1, r0 | r1 = r0;
0x00013738 ldr r7, [pc, 0x78] | r7 = *(0x137b4);
0x0001373a movs r3, r0 | r3 = r0;
0x0001373c pop {r2, r5, r7} |
0x0001373e movs r1, r0 | r1 = r0;
0x00013740 str r7, [sp, 0x2c8] | *(arg_2c8h) = r7;
0x00013742 movs r1, r0 | r1 = r0;
0x00013744 stm r5!, {r1, r4, r5} | *(r5!) = r1;
| *((r5! + 4)) = r4;
| *((r5! + 8)) = r5;
0x00013746 movs r1, r0 | r1 = r0;
0x00013748 stm r1!, {r4, r5} | *(r1!) = r4;
| *((r1! + 4)) = r5;
0x0001374a movs r1, r0 | r1 = r0;
0x0001374c str r7, [sp, 0x188] | *(arg_188h) = r7;
0x0001374e movs r1, r0 | r1 = r0;
0x00013750 stm r4!, {r1, r2, r5} | *(r4!) = r1;
| *((r4! + 4)) = r2;
| *((r4! + 8)) = r5;
0x00013752 movs r1, r0 | r1 = r0;
0x00013754 bkpt 0xe8 | __asm ("bkpt 0xe8");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x1c8f8 */
| #include <stdint.h>
|
; (fcn) sym.g_signal_chain_from_overridden () | void g_signal_chain_from_overridden (int16_t arg_0h, uint32_t arg1, uint32_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| uint32_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| r0 = arg1;
| r1 = arg2;
0x0001c8f8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001c8fc sub sp, 0x2c |
0x0001c8fe strd r0, r1, [sp, 0x10] | __asm ("strd r0, r1, [var_10h]");
0x0001c902 cmp r0, 0 |
| if (arg_0h == ) {
0x0001c904 beq.w 0x1caac | goto label_5;
| }
0x0001c908 bl 0x26b78 | r0 = g_value_peek_pointer ();
0x0001c90c mov r4, r0 | r4 = r0;
0x0001c90e bl 0x24e2c | r0 = g_type_check_instance ();
0x0001c912 cmp r0, 0 |
| if (r0 == 0) {
0x0001c914 beq.w 0x1ca20 | goto label_6;
| }
0x0001c918 ldr r5, [pc, 0x2cc] |
0x0001c91a add r5, pc |
0x0001c91c mov r0, r5 | r0 = r5;
0x0001c91e blx 0x9e5c | fcn_00009e5c ();
0x0001c922 ldr r5, [r5, 0x20] | r5 = *(0x39526);
| if (r5 != 0) {
0x0001c924 cbnz r5, 0x1c930 | goto label_7;
| }
0x0001c926 b 0x1cb6e | goto label_8;
| do {
0x0001c928 ldr r5, [r5] | r5 = *(r5);
0x0001c92a cmp r5, 0 |
| if (r5 == 0) {
0x0001c92c beq.w 0x1cb6e | goto label_8;
| }
0x0001c92e strh r7, [r3, 8] | *((r3 + 8)) = r7;
| label_7:
0x0001c930 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0001c932 cmp r4, r3 |
0x0001c934 bne 0x1c928 |
| } while (r4 != r3);
0x0001c936 ldr r2, [pc, 0x2b4] |
0x0001c938 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x0001c93a add r2, pc | r2 = 0x3952c;
0x0001c93c ldr r1, [r2, 0x18] | r1 = *(0x39544);
0x0001c93e cmp r3, r1 |
| if (r3 >= r1) {
0x0001c940 bhs 0x1ca3a | goto label_9;
| }
0x0001c942 ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x0001c944 ldr.w r3, [r2, r3, lsl 2] | offset_0 = r3 << 2;
| r3 = *((r2 + offset_0));
0x0001c948 str r3, [sp, 0xc] | var_ch = r3;
0x0001c94a cmp r3, 0 |
| if (r3 == 0) {
0x0001c94c beq 0x1ca3a | goto label_9;
| }
0x0001c94e ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x0001c950 cmp r0, 4 |
| if (r0 == 4) {
0x0001c952 beq.w 0x1cac6 | goto label_10;
| }
0x0001c956 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0001c958 ldr r6, [r3, 0x18] | r6 = *((r3 + 0x18));
0x0001c95a cmp r6, 0 |
| if (r6 == 0) {
0x0001c95c beq.w 0x1cb50 | goto label_11;
| }
0x0001c960 ldr r3, [r6] | r3 = *(r6);
0x0001c962 cmp r3, 1 |
| if (r3 != 1) {
0x0001c964 bne 0x1ca58 | goto label_12;
| }
0x0001c966 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0001c968 str r3, [sp, 8] | var_8h = r3;
0x0001c96a cmp r3, 0 |
| if (r3 != 0) {
0x0001c96c bne 0x1ca58 | goto label_12;
| }
| label_0:
0x0001c96e ldr r4, [sp, 0xc] | r4 = var_ch;
0x0001c970 ldr r0, [sp, 8] | r0 = var_8h;
0x0001c972 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0001c974 ubfx r3, r3, 0xa, 8 | r3 = (r3 >> 0xa) & ((1 << 8) - 1);
0x0001c978 str r3, [sp, 0x1c] | var_1ch = r3;
0x0001c97a bl 0x231ac | g_type_parent ();
0x0001c97e ldr r6, [r4, 0x18] | r6 = *((r4 + 0x18));
0x0001c980 cmp r6, 0 |
| if (r6 == 0) {
0x0001c982 beq.w 0x1cae0 | goto label_2;
| }
0x0001c986 ldr r3, [r6] | r3 = *(r6);
0x0001c988 cmp r3, 1 |
| if (r3 == 1) {
0x0001c98a bne 0x1c994 |
0x0001c98c ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0001c98e add.w sb, r6, 8 | sb = r6 + 8;
| if (r3 == 0) {
0x0001c992 cbz r3, 0x1c9e6 | goto label_3;
| }
| }
0x0001c994 ldr r2, [pc, 0x258] |
0x0001c996 str r0, [sp, 0x20] | var_20h = r0;
0x0001c998 ldr.w sl, [r6] | sl = *(r6);
0x0001c99c add r2, pc | r2 = 0x39590;
0x0001c99e ldrd r8, r3, [r2, 0xc] | __asm ("ldrd r8, r3, [r2, 0xc]");
0x0001c9a2 cmp.w sl, 0 |
| if (sl == 0) {
0x0001c9a6 beq.w 0x1cb88 | goto label_13;
| }
0x0001c9aa add r7, sp, 0x20 | r7 += var_20h;
0x0001c9ac str r5, [sp, 0xc] | var_ch = r5;
0x0001c9ae mov.w fp, 0 |
0x0001c9b0 lsrs r0, r0, 0xc | r0 >>= 0xc;
0x0001c9b2 mov r5, sl | r5 = sl;
0x0001c9b4 mov sl, r7 | sl = r7;
0x0001c9b6 mov r7, r3 | r7 = r3;
0x0001c9b8 b 0x1c9c8 |
| while (r0 != 0) {
0x0001c9ba ite ge |
| if (r0 < r0) {
0x0001c9bc addge fp, r4, 1 |
| }
| if (r0 < r0) {
0x0001c9c0 mov r5, r4 | r5 = r4;
| }
0x0001c9c2 cmp r5, fp |
| if (r5 < fp) {
0x0001c9c4 bls.w 0x1cb84 | goto label_14;
| }
0x0001c9c8 add.w r4, fp, r5 | r4 = fp + r5;
0x0001c9cc mov r0, sl | r0 = sl;
0x0001c9ce lsrs r4, r4, 1 | r4 >>= 1;
0x0001c9d0 mla sb, r4, r8, r6 | __asm ("mla sb, r4, r8, r6");
0x0001c9d4 add.w sb, sb, 8 | sb += 8;
0x0001c9d8 mov r1, sb | r1 = sb;
0x0001c9da blx r7 | r0 = uint32_t (*r7)(uint32_t, uint32_t) (r0, r1);
0x0001c9dc cmp r0, 0 |
0x0001c9de bne 0x1c9ba |
| }
0x0001c9e0 ldr r5, [sp, 0xc] | r5 = var_ch;
0x0001c9e2 ldr.w r3, [sb] | r3 = *(sb);
| label_3:
0x0001c9e6 ldr r2, [sp, 8] | r2 = var_8h;
0x0001c9e8 cmp r2, r3 |
| if (r2 == r3) {
0x0001c9ea beq 0x1cae0 | goto label_2;
| }
0x0001c9ec ldr.w r6, [sb, 4] | r6 = *((sb + 4));
0x0001c9f0 cmp r6, 0 |
| if (r6 == 0) {
0x0001c9f2 beq 0x1cae0 | goto label_2;
| }
0x0001c9f4 ldr r4, [pc, 0x1fc] |
0x0001c9f6 str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x0001c9f8 add r4, pc | r4 = 0x395f0;
0x0001c9fa mov r0, r4 | r0 = r4;
0x0001c9fc blx 0x9ad8 | fcn_00009ad8 ();
0x0001ca00 ldr r2, [sp, 0x1c] | r2 = var_1ch;
0x0001ca02 mov r0, r6 | r0 = r6;
0x0001ca04 add.w r6, r5, 8 | r6 = r5 + 8;
0x0001ca08 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0001ca0a ldr r1, [sp, 0x14] | r1 = var_14h;
0x0001ca0c adds r2, 1 | r2++;
0x0001ca0e str r6, [sp] | *(sp) = r6;
0x0001ca10 bl 0xe400 | g_closure_invoke ();
0x0001ca14 mov r0, r4 | r0 = r4;
0x0001ca16 blx 0x9e5c | fcn_00009e5c ();
0x0001ca1a ldr r3, [sp, 8] | r3 = var_8h;
0x0001ca1c str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x0001ca1e b 0x1cae0 | goto label_2;
| label_6:
0x0001ca20 ldr r1, [pc, 0x1d4] |
0x0001ca22 ldr r2, [pc, 0x1d8] |
0x0001ca24 ldr r0, [pc, 0x1d8] |
0x0001ca26 add r1, pc |
0x0001ca28 add r2, pc | r2 = 0x3962a;
0x0001ca2a add.w r1, r1, 0x210 | r1 = 0x39832;
0x0001ca2e add r0, pc | r0 = 0x39632;
0x0001ca30 add sp, 0x2c |
0x0001ca32 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001ca36 b.w 0x9c08 | void (*0x9c08)() ();
| label_9:
0x0001ca3a ldr r3, [pc, 0x1c8] |
0x0001ca3c mov.w r2, 0x870 | r2 = 0x870;
0x0001ca40 ldr r4, [pc, 0x1c4] |
0x0001ca42 ldr r1, [pc, 0x1c8] |
0x0001ca44 ldr r0, [pc, 0x1c8] |
0x0001ca46 add r3, pc |
0x0001ca48 add r4, pc | r4 = 0x39654;
0x0001ca4a add.w r3, r3, 0x210 | r3 = 0x39860;
0x0001ca4e add r1, pc | r1 = 0x39660;
0x0001ca50 str r4, [sp] | *(sp) = r4;
0x0001ca52 add r0, pc | r0 = 0x39666;
0x0001ca54 blx 0x9bf0 | g_array_new ();
| label_12:
0x0001ca58 ldr r2, [pc, 0x1b8] |
0x0001ca5a str r0, [sp, 0x20] | var_20h = r0;
0x0001ca5c ldr.w fp, [r6] | fp = *(r6);
0x0001ca60 add r2, pc | r2 = 0x39678;
0x0001ca62 ldrd r8, r3, [r2, 0xc] | __asm ("ldrd r8, r3, [r2, 0xc]");
0x0001ca66 cmp.w fp, 0 |
| if (fp == 0) {
0x0001ca6a beq 0x1caf2 | goto label_15;
| }
0x0001ca6c mov.w sl, 0 | sl = 0;
0x0001ca70 add r7, sp, 0x20 | r7 += var_20h;
0x0001ca72 str r5, [sp, 8] | var_8h = r5;
0x0001ca74 mov r5, fp | r5 = fp;
0x0001ca76 mov fp, sl |
0x0001ca78 mov sl, r7 | sl = r7;
0x0001ca7a mov r7, r3 | r7 = r3;
0x0001ca7c b 0x1ca8a |
| while (r0 != 0) {
0x0001ca7e ite ge |
| if (fp < 0) {
0x0001ca80 addge fp, r4, 1 |
| }
| if (fp < 0) {
0x0001ca84 mov r5, r4 | r5 = r4;
| }
0x0001ca86 cmp r5, fp |
| if (r5 < fp) {
0x0001ca88 bls 0x1caee | goto label_16;
| }
0x0001ca8a add.w r4, fp, r5 | r4 = fp + r5;
0x0001ca8e mov r0, sl | r0 = sl;
0x0001ca90 lsrs r4, r4, 1 | r4 >>= 1;
0x0001ca92 mla sb, r4, r8, r6 | __asm ("mla sb, r4, r8, r6");
0x0001ca96 add.w sb, sb, 8 | sb += 8;
0x0001ca9a mov r1, sb | r1 = sb;
0x0001ca9c blx r7 | r0 = uint32_t (*r7)(uint32_t, uint32_t) (r0, r1);
0x0001ca9e cmp r0, 0 |
0x0001caa0 bne 0x1ca7e |
| }
0x0001caa2 ldr.w r3, [sb] | r3 = *(sb);
0x0001caa6 ldr r5, [sp, 8] | r5 = var_8h;
0x0001caa8 str r3, [sp, 8] | var_8h = r3;
0x0001caaa b 0x1c96e | goto label_0;
| label_5:
0x0001caac ldr r1, [pc, 0x168] |
0x0001caae ldr r2, [pc, 0x16c] |
0x0001cab0 ldr r0, [pc, 0x16c] |
0x0001cab2 add r1, pc |
0x0001cab4 add r2, pc | r2 = 0x396d6;
0x0001cab6 add.w r1, r1, 0x210 | r1 = 0x398de;
0x0001caba add r0, pc | r0 = 0x396de;
0x0001cabc add sp, 0x2c |
0x0001cabe pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001cac2 b.w 0x9c08 | void (*0x9c08)() ();
| label_10:
0x0001cac6 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0001cac8 movs r1, 0x10 | r1 = 0x10;
0x0001caca ldr r2, [pc, 0x158] |
0x0001cacc ldr r0, [pc, 0x158] |
0x0001cace str r4, [sp, 4] | var_4h = r4;
0x0001cad0 ldr r4, [r3] | r4 = *(r3);
0x0001cad2 add r2, pc | r2 = 0x396fc;
0x0001cad4 ldr r3, [pc, 0x154] |
0x0001cad6 add r0, pc | r0 = 0x39702;
0x0001cad8 str r4, [sp] | *(sp) = r4;
0x0001cada add r3, pc | r3 = 0x3970a;
0x0001cadc blx 0x9e0c | g_mutex_lock ();
| label_2:
0x0001cae0 ldr r0, [pc, 0x14c] |
0x0001cae2 add r0, pc | r0 = 0x39716;
0x0001cae4 add sp, 0x2c |
0x0001cae6 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001caea b.w 0x9ad4 | void (*0x9ad4)() ();
| label_16:
0x0001caee ldr r5, [sp, 8] | r5 = var_8h;
0x0001caf0 ldr r0, [sp, 0x20] | r0 = var_20h;
| if (r0 == 0) {
| label_15:
0x0001caf2 cbz r0, 0x1cb50 | goto label_11;
| }
0x0001caf4 ldr r3, [pc, 0x13c] |
0x0001caf6 add.w sb, sp, 0x20 | sb += var_20h;
0x0001cafa str r5, [sp, 0x18] | var_18h = r5;
0x0001cafc add r3, pc | r3 = 0x39734;
0x0001cafe str r3, [sp, 8] | var_8h = r3;
| label_1:
0x0001cb00 bl 0x231ac | g_type_parent ();
0x0001cb04 ldr r3, [sp, 8] | r3 = var_8h;
0x0001cb06 str r0, [sp, 0x20] | var_20h = r0;
0x0001cb08 ldr.w r8, [r6] | r8 = *(r6);
0x0001cb0c ldr r7, [r3, 0xc] | r7 = *((r3 + 0xc));
0x0001cb0e ldr r5, [r3, 0x10] | r5 = *((r3 + 0x10));
0x0001cb10 cmp.w r8, 0 |
| if (r8 == 0) {
0x0001cb14 beq 0x1cb4c | goto label_17;
| }
0x0001cb16 mov.w sl, 0 | sl = 0;
0x0001cb1a b 0x1cb28 |
| while (r0 != 0) {
0x0001cb1c ite ge |
| if (r8 < 0) {
0x0001cb1e addge sl, r4, 1 | sl = r4 + 1;
| }
| if (r8 < 0) {
0x0001cb22 mov r8, r4 | r8 = r4;
| }
0x0001cb24 cmp r8, sl |
| if (r8 < sl) {
0x0001cb26 bls 0x1cb4a | goto label_18;
| }
0x0001cb28 add.w r4, sl, r8 | r4 = sl + r8;
0x0001cb2c mov r0, sb | r0 = sb;
0x0001cb2e lsrs r4, r4, 1 | r4 >>= 1;
0x0001cb30 mla fp, r4, r7, r6 | __asm ("mla fp, r4, r7, r6");
0x0001cb34 add.w fp, fp, 8 |
0x0001cb38 mov r1, fp | r1 = fp;
0x0001cb3a blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t) (r0, r1);
0x0001cb3c cmp r0, 0 |
0x0001cb3e bne 0x1cb1c |
| }
0x0001cb40 ldr.w r3, [fp] | r3 = *(fp);
0x0001cb44 ldr r5, [sp, 0x18] | r5 = var_18h;
0x0001cb46 str r3, [sp, 8] | var_8h = r3;
0x0001cb48 b 0x1c96e | goto label_0;
| label_18:
0x0001cb4a ldr r0, [sp, 0x20] | r0 = var_20h;
| label_17:
0x0001cb4c cmp r0, 0 |
| if (r0 != 0) {
0x0001cb4e bne 0x1cb00 | goto label_1;
| }
| label_11:
0x0001cb50 ldr r3, [pc, 0xe4] |
0x0001cb52 movw r2, 0x878 | r2 = 0x878;
0x0001cb56 ldr r4, [pc, 0xe4] |
0x0001cb58 ldr r1, [pc, 0xe4] |
0x0001cb5a ldr r0, [pc, 0xe8] |
0x0001cb5c add r3, pc |
0x0001cb5e add r4, pc | r4 = 0x397a0;
0x0001cb60 add.w r3, r3, 0x210 | r3 = 0x399a8;
0x0001cb64 add r1, pc | r1 = 0x397a8;
0x0001cb66 str r4, [sp] | *(sp) = r4;
0x0001cb68 add r0, pc | r0 = 0x397b2;
0x0001cb6a blx 0x9bf0 | g_array_new ();
| label_8:
0x0001cb6e ldr r3, [pc, 0xd8] |
0x0001cb70 movs r1, 0x10 | r1 = 0x10;
0x0001cb72 ldr r2, [pc, 0xd8] |
0x0001cb74 ldr r0, [pc, 0xd8] |
0x0001cb76 add r3, pc | r3 = 0x397c4;
0x0001cb78 str r4, [sp] | *(sp) = r4;
0x0001cb7a add r2, pc | r2 = 0x397cc;
0x0001cb7c add r0, pc | r0 = 0x397d0;
0x0001cb7e blx 0x9e0c | g_mutex_lock ();
0x0001cb80 strd lr, r7, [r6, -0x2b4] | __asm ("strd lr, r7, [r6, -0x2b4]");
| label_14:
0x0001cb84 ldr r5, [sp, 0xc] | r5 = var_ch;
0x0001cb86 ldr r0, [sp, 0x20] | r0 = var_20h;
| label_13:
0x0001cb88 cmp r0, 0 |
| if (r0 == 0) {
0x0001cb8a beq 0x1cae0 | goto label_2;
| }
0x0001cb8c ldr r3, [pc, 0xc4] |
0x0001cb8e add.w sl, sp, 0x20 | sl += var_20h;
0x0001cb92 str r5, [sp, 0x18] | var_18h = r5;
0x0001cb94 add r3, pc | r3 = 0x397ec;
0x0001cb96 str r3, [sp, 0xc] | var_ch = r3;
| label_4:
0x0001cb98 bl 0x231ac | g_type_parent ();
0x0001cb9c ldr r3, [sp, 0xc] | r3 = var_ch;
0x0001cb9e str r0, [sp, 0x20] | var_20h = r0;
0x0001cba0 ldr.w r8, [r6] | r8 = *(r6);
0x0001cba4 ldr r7, [r3, 0xc] | r7 = *((r3 + 0xc));
0x0001cba6 ldr r5, [r3, 0x10] | r5 = *((r3 + 0x10));
0x0001cba8 cmp.w r8, 0 |
| if (r8 == 0) {
0x0001cbac beq 0x1cbe2 | goto label_19;
| }
0x0001cbae mov.w fp, 0 |
0x0001cbb2 b 0x1cbc0 |
| while (r0 != 0) {
0x0001cbb4 ite ge |
| if (r8 < 0) {
0x0001cbb6 addge fp, r4, 1 |
| }
| if (r8 < 0) {
0x0001cbba mov r8, r4 | r8 = r4;
| }
0x0001cbbc cmp fp, r8 |
| if (fp >= r8) {
0x0001cbbe bhs 0x1cbe0 | goto label_20;
| }
0x0001cbc0 add.w r4, r8, fp | r4 = r8 + fp;
0x0001cbc4 mov r0, sl | r0 = sl;
0x0001cbc6 lsrs r4, r4, 1 | r4 >>= 1;
0x0001cbc8 mla sb, r4, r7, r6 | __asm ("mla sb, r4, r7, r6");
0x0001cbcc add.w sb, sb, 8 | sb += 8;
0x0001cbce lsrs r0, r1, 4 | r0 = r1 >> 4;
0x0001cbd0 mov r1, sb | r1 = sb;
0x0001cbd2 blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t) (r0, r1);
0x0001cbd4 cmp r0, 0 |
0x0001cbd6 bne 0x1cbb4 |
| }
0x0001cbd8 ldr r5, [sp, 0x18] | r5 = var_18h;
0x0001cbda ldr.w r3, [sb] | r3 = *(sb);
0x0001cbde b 0x1c9e6 | goto label_3;
| label_20:
0x0001cbe0 ldr r0, [sp, 0x20] | r0 = var_20h;
| label_19:
0x0001cbe2 cmp r0, 0 |
| if (r0 != 0) {
0x0001cbe4 bne 0x1cb98 | goto label_4;
| }
0x0001cbe6 b 0x1cae0 | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x1cc58 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.g_signal_chain_from_overridden_handler () | void g_signal_chain_from_overridden_handler (int16_t arg_0h, int16_t arg_4h) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int32_t var_4h_2;
| int32_t var_8h_2;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_2ch;
| int32_t var_30h;
| int32_t var_34h;
| int32_t var_3ch;
| int16_t var_40h;
| int32_t var_40h_2;
| int32_t var_48h;
| int32_t var_48h_2;
| int32_t var_50h;
| int32_t var_50h_2;
| int16_t var_58h;
| int16_t var_8h_3;
| int16_t var_0h_2;
| int32_t var_c0h;
| int16_t var_c4h;
0x0001cc58 push {r0, r1, r2, r3} |
0x0001cc5a push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001cc5e sub sp, 0xa4 |
0x0001cc60 add r7, sp, 8 | r7 += var_8h;
0x0001cc62 ldr.w r0, [r7, 0xc0] | r0 = var_c0h;
0x0001cc66 bl 0x24e2c | r0 = g_type_check_instance ();
| if (r0 == 0) {
0x0001cc6a cbnz r0, 0x1cc92 |
0x0001cc6c ldr.w r1, [pc, 0x61c] |
0x0001cc70 ldr.w r2, [pc, 0x61c] |
0x0001cc74 ldr.w r0, [pc, 0x61c] |
0x0001cc78 add r1, pc |
0x0001cc7a add r2, pc | r2 = 0x39f0e;
0x0001cc7c add.w r1, r1, 0x230 | r1 = 0x3a138;
0x0001cc80 add r0, pc | r0 = 0x39f18;
0x0001cc82 blx 0x9c0c | fcn_00009c0c ();
| label_7:
0x0001cc86 adds r7, 0x9c | r7 += 0x9c;
0x0001cc88 mov sp, r7 |
0x0001cc8a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001cc8e add sp, 0x10 |
0x0001cc90 bx lr | return;
| }
0x0001cc92 ldr.w r4, [pc, 0x604] |
0x0001cc96 add r4, pc | r4 = 0x39f34;
0x0001cc98 mov r0, r4 | r0 = r4;
0x0001cc9a blx 0x9e5c | fcn_00009e5c ();
0x0001cc9e ldr r5, [r4, 0x20] | r5 = *(0x39f54);
0x0001cca0 ldr.w r2, [r7, 0xc0] | r2 = var_c0h;
| if (r5 != 0) {
0x0001cca4 cbnz r5, 0x1ccb0 | goto label_13;
| }
0x0001cca6 b 0x1d1cc | goto label_14;
| do {
0x0001cca8 ldr r5, [r5] | r5 = *(r5);
0x0001ccaa cmp r5, 0 |
| if (r5 == 0) {
0x0001ccac beq.w 0x1d1cc | goto label_14;
| }
| label_13:
0x0001ccb0 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0001ccb2 cmp r2, r3 |
0x0001ccb4 bne 0x1cca8 |
| } while (r2 != r3);
0x0001ccb6 ldr.w r2, [pc, 0x5e4] |
0x0001ccba ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x0001ccbc add r2, pc | r2 = 0x39f5e;
0x0001ccbe ldr r1, [r2, 0x18] | r1 = *(0x39f76);
0x0001ccc0 cmp r3, r1 |
| if (r3 >= r1) {
0x0001ccc2 bhs.w 0x1cf00 | goto label_15;
| }
0x0001ccc6 ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x0001ccc8 ldr.w r3, [r2, r3, lsl 2] | offset_0 = r3 << 2;
| r3 = *((r2 + offset_0));
0x0001cccc str r3, [r7, 0x24] | var_24h = r3;
0x0001ccce cmp r3, 0 |
| if (r3 == 0) {
0x0001ccd0 beq.w 0x1cf00 | goto label_15;
| }
0x0001ccd4 ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x0001ccd6 cmp r0, 4 |
| if (r0 == 4) {
0x0001ccd8 beq.w 0x1ce6c | goto label_16;
| }
0x0001ccdc ldr r3, [r7, 0x24] | r3 = var_24h;
0x0001ccde ldr r6, [r3, 0x18] | r6 = *((r3 + 0x18));
0x0001cce0 cmp r6, 0 |
| if (r6 == 0) {
0x0001cce2 beq.w 0x1d1ae | goto label_17;
| }
0x0001cce6 ldr r3, [r6] | r3 = *(r6);
0x0001cce8 cmp r3, 1 |
| if (r3 != 1) {
0x0001ccea bne.w 0x1ce9c | goto label_18;
| }
0x0001ccee ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0001ccf0 str r3, [r7, 0x28] | var_28h = r3;
0x0001ccf2 cmp r3, 0 |
| if (r3 != 0) {
0x0001ccf4 bne.w 0x1ce9c | goto label_18;
| }
| label_0:
0x0001ccf8 ldr r4, [r7, 0x24] | r4 = var_24h;
0x0001ccfa ldr r0, [r7, 0x28] | r0 = var_28h;
0x0001ccfc ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0001ccfe ubfx r3, r3, 0xa, 8 | r3 = (r3 >> 0xa) & ((1 << 8) - 1);
0x0001cd00 movs r3, 0x87 | r3 = 0x87;
0x0001cd02 str r3, [r7, 0x18] | var_18h = r3;
0x0001cd04 bl 0x231ac | g_type_parent ();
0x0001cd08 ldr r6, [r4, 0x18] | r6 = *((r4 + 0x18));
0x0001cd0a cmp r6, 0 |
| if (r6 == 0) {
0x0001cd0c beq.w 0x1ce90 | goto label_4;
| }
0x0001cd10 ldr r3, [r6] | r3 = *(r6);
0x0001cd12 cmp r3, 1 |
| if (r3 == 1) {
0x0001cd14 bne 0x1cd20 |
0x0001cd16 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0001cd18 add.w fp, r6, 8 |
0x0001cd1c str r3, [r7, 0x20] | var_20h = r3;
| if (r3 == 0) {
0x0001cd1e cbz r3, 0x1cd82 | goto label_9;
| }
| }
0x0001cd20 ldr.w r2, [pc, 0x57c] |
0x0001cd24 str r0, [r7, 0x58] | var_58h = r0;
0x0001cd26 ldr.w sb, [r6] | sb = *(r6);
0x0001cd2a add r2, pc | r2 = 0x39fce;
0x0001cd2c ldr r3, [r2, 0xc] | r3 = *(0x39fda);
0x0001cd2e str r3, [r7, 0x34] | var_34h = r3;
0x0001cd30 ldr r3, [r2, 0x10] | r3 = *(0x39fde);
0x0001cd32 cmp.w sb, 0 |
| if (sb == 0) {
0x0001cd36 beq.w 0x1d1ea | goto label_19;
| }
0x0001cd3a add.w r4, r7, 0x58 | r4 += var_58h;
0x0001cd3e mov.w sl, 0 | sl = 0;
0x0001cd42 str r5, [r7, 0x30] | var_30h = r5;
0x0001cd44 mov r5, r3 | r5 = r3;
0x0001cd46 mov r3, r4 | r3 = r4;
0x0001cd48 mov r4, sl | r4 = sl;
0x0001cd4a mov sl, sb | sl = sb;
0x0001cd4c mov sb, r3 | sb = r3;
0x0001cd4e b 0x1cd5e |
| while (r0 != 0) {
0x0001cd50 ite ge |
| if (sb < 0) {
0x0001cd52 addge r4, r8, 1 | r4 = r8 + 1;
| }
| if (sb < 0) {
0x0001cd56 mov sl, r8 | sl = r8;
| }
0x0001cd58 cmp sl, r4 |
| if (sl < r4) {
0x0001cd5a bls.w 0x1d1e6 | goto label_20;
| }
0x0001cd5e ldr r3, [r7, 0x34] | r3 = var_34h;
0x0001cd60 add.w r8, sl, r4 | r8 = sl + r4;
0x0001cd64 lsr.w r8, r8, 1 | r8 >>= 1;
0x0001cd68 mov r0, sb | r0 = sb;
0x0001cd6a mla fp, r8, r3, r6 | __asm ("mla fp, r8, r3, r6");
0x0001cd6e add.w fp, fp, 8 |
0x0001cd72 mov r1, fp | r1 = fp;
0x0001cd74 blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0001cd76 cmp r0, 0 |
0x0001cd78 bne 0x1cd50 |
| }
0x0001cd7a ldr r5, [r7, 0x30] | r5 = var_30h;
0x0001cd7c ldr.w r3, [fp] | r3 = *(fp);
0x0001cd80 str r3, [r7, 0x20] | var_20h = r3;
| label_9:
0x0001cd82 ldr r3, [r7, 0x28] | r3 = var_28h;
0x0001cd84 ldr r2, [r7, 0x20] | r2 = var_20h;
0x0001cd86 cmp r3, r2 |
| if (r3 != r2) {
0x0001cd88 beq.w 0x1ce90 |
0x0001cd8c ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x0001cd90 str r3, [r7, 4] | var_4h_2 = r3;
0x0001cd92 cmp r3, 0 |
| if (r3 == 0) {
0x0001cd94 beq 0x1ce90 | goto label_4;
| }
0x0001cd96 ldr r3, [r7, 0x18] | r3 = var_18h;
0x0001cd98 movs r1, 0 | r1 = 0;
0x0001cd9a ldr r4, [r7, 0x24] | r4 = var_24h;
0x0001cd9c adds r3, 1 | r3++;
0x0001cd9e mov r2, r3 | r2 = r3;
0x0001cda0 str r3, [r7, 0xc] | var_ch = r3;
0x0001cda2 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x0001cda6 add.w r3, r7, 0xc4 | r3 += var_c4h;
0x0001cda8 lsls r4, r0, 0xf | r4 = r0 << 0xf;
0x0001cdaa str r3, [r7, 0x3c] | var_3ch = r3;
0x0001cdac mov r3, sp | r3 = sp;
0x0001cdae sub.w r3, r3, r2, lsl 3 | r3 -= (r2 << 3);
0x0001cdb2 lsls r2, r2, 3 | r2 <<= 3;
0x0001cdb4 mov sp, r3 |
0x0001cdb6 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0001cdb8 str r3, [r7, 0x10] | var_10h = r3;
0x0001cdba add r3, sp, 8 | r3 += var_8h;
0x0001cdbc mov r0, r3 | r0 = r3;
0x0001cdbe mov r6, r3 | r6 = r3;
0x0001cdc0 str r3, [r7, 0x1c] | var_1ch = r3;
0x0001cdc2 blx 0x9db8 | g_string_append_printf ();
0x0001cdc6 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0001cdc8 mov r2, r6 | r2 = r6;
0x0001cdca adds r2, 0x18 | r2 += 0x18;
0x0001cdcc str r2, [r7, 0x14] | var_14h = r2;
0x0001cdce tst.w r3, 0x3fc00 |
| if ((r3 & 0x3fc00) == 0) {
0x0001cdd2 beq.w 0x1cf80 | goto label_21;
| }
0x0001cdd6 ldr.w r3, [pc, 0x4cc] |
0x0001cdda add.w r4, r7, 0x58 | r4 += var_58h;
0x0001cdde ldr.w r8, [r7, 0x14] | r8 = var_14h;
0x0001cde2 ldr.w sl, [r7, 0x24] | sl = var_24h;
0x0001cde6 add r3, pc | r3 = 0x3a090;
0x0001cde8 str r5, [r7, 8] | var_8h_2 = r5;
0x0001cdea str r3, [r7, 0x30] | var_30h = r3;
0x0001cdec ldr.w r3, [pc, 0x4b8] |
0x0001cdf0 add r3, pc | r3 = 0x3a09c;
0x0001cdf2 str r3, [r7, 0x2c] | var_2ch = r3;
0x0001cdf4 movs r3, 0 | r3 = 0;
0x0001cdf6 mov sb, r3 | sb = r3;
| label_2:
0x0001cdf8 ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x0001cdfc ldr r0, [r7, 0x30] | r0 = var_30h;
0x0001cdfe ldr.w r5, [r3, sb, lsl 2] | offset_1 = sb << 2;
| r5 = *((r3 + offset_1));
0x0001ce02 blx 0x9ad8 | fcn_00009ad8 ();
0x0001ce06 bic r3, r5, 1 | r3 = BIT_MASK (r5, 1);
0x0001ce0a mov r0, r3 | r0 = r3;
0x0001ce0c str r3, [r7, 0x34] | var_34h = r3;
0x0001ce0e bl 0x25228 | g_type_value_table_peek ();
0x0001ce12 movs r2, 0x40 | r2 = 0x40;
0x0001ce14 ldr.w fp, [r0, 0x10] | fp = *((r0 + 0x10));
0x0001ce18 mov r6, r0 | r6 = r0;
0x0001ce1a movs r1, 0 | r1 = 0;
0x0001ce1c mov r0, r4 | r0 = r4;
0x0001ce1e lsls r5, r5, 0x1b | r5 <<= 0x1b;
0x0001ce20 blx 0x9db8 | g_string_append_printf ();
0x0001ce24 ldr r3, [r7, 0x34] | r3 = var_34h;
0x0001ce26 and r5, r5, 0x8000000 | r5 &= 0x8000000;
0x0001ce28 str r0, [r0, 0x50] | *((r0 + 0x50)) = r0;
0x0001ce2a str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x0001ce2e ldrb.w r2, [fp] | r2 = *(fp);
0x0001ce32 cmp r2, 0 |
| if (r2 == 0) {
0x0001ce34 beq.w 0x1d0f8 | goto label_22;
| }
0x0001ce38 ldr r3, [r7, 0x3c] | r3 = var_3ch;
0x0001ce3a mov r0, fp | r0 = fp;
0x0001ce3c mov ip, r4 |
0x0001ce3e rsb.w lr, fp, 1 | lr = 1 - fp;
| label_1:
0x0001ce42 subs r2, 0x64 | r2 -= 0x64;
0x0001ce44 add.w r1, lr, r0 | r1 = lr + r0;
0x0001ce48 cmp r2, 0xd |
| if (r2 > 0xd) {
0x0001ce4a bhi 0x1cf1e | goto label_23;
| }
| /* switch table (15 cases) at 0x1ce50 */
0x0001ce4c tbh [pc, r2, lsl 1] | __asm ("tbh [pc, r2, lsl 1]");
| label_16:
0x0001ce6c ldr.w r3, [r7, 0xc0] | r3 = var_c0h;
0x0001ce70 movs r1, 0x10 | r1 = 16;
0x0001ce72 ldr.w r2, [pc, 0x438] |
0x0001ce76 ldr.w r0, [pc, 0x438] |
0x0001ce7a str r3, [sp, 4] | var_4h = r3;
0x0001ce7c ldr r3, [r7, 0x24] | r3 = var_24h;
0x0001ce7e add r2, pc | r2 = 0x3a130;
0x0001ce80 add r0, pc | r0 = 0x3a136;
0x0001ce82 ldr r4, [r3] | r4 = *(r3);
0x0001ce84 ldr.w r3, [pc, 0x42c] |
0x0001ce88 str r4, [sp] | *(sp) = r4;
0x0001ce8a add r3, pc | r3 = 0x3a142;
0x0001ce8c blx 0x9e0c | g_mutex_lock ();
| }
| label_4:
0x0001ce90 ldr.w r0, [pc, 0x424] |
0x0001ce94 add r0, pc | r0 = 0x3a150;
0x0001ce96 blx 0x9ad8 | fcn_00009ad8 ();
0x0001ce98 mcr p6, 1, lr, c0, c4, 7 | __asm ("mcr p6, 1, lr, c0, c4, 7");
| label_18:
0x0001ce9c ldr.w r2, [pc, 0x41c] |
0x0001cea0 str r0, [r7, 0x58] | var_58h = r0;
0x0001cea2 ldr.w sb, [r6] | sb = *(r6);
0x0001cea6 add r2, pc | r2 = 0x3a166;
0x0001cea8 ldr r3, [r2, 0xc] | r3 = *(0x3a172);
0x0001ceaa str r3, [r7, 0x34] | var_34h = r3;
0x0001ceac ldr r3, [r2, 0x10] | r3 = *(0x3a176);
0x0001ceae cmp.w sb, 0 |
0x0001ceb0 lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 == r0) {
0x0001ceb2 beq.w 0x1d14a | goto label_24;
| }
0x0001ceb6 add.w r4, r7, 0x58 | r4 += var_58h;
0x0001ceba mov.w fp, 0 |
0x0001cebe str r5, [r7, 0x30] | var_30h = r5;
0x0001cec0 mov r5, r3 | r5 = r3;
0x0001cec2 mov r3, r4 | r3 = r4;
0x0001cec4 mov r4, fp | r4 = fp;
0x0001cec6 mov fp, sb |
0x0001cec8 mov sb, r3 | sb = r3;
0x0001ceca b 0x1ceda |
| while (r0 != 0) {
0x0001cecc ite ge |
| if (r0 < r0) {
0x0001cece addge r4, r8, 1 | r4 = r8 + 1;
| }
| if (r0 < r0) {
0x0001ced2 mov fp, r8 |
| }
0x0001ced4 cmp fp, r4 |
| if (fp < r4) {
0x0001ced6 bls.w 0x1d146 | goto label_25;
| }
0x0001ceda ldr r3, [r7, 0x34] | r3 = var_34h;
0x0001cedc add.w r8, r4, fp | r8 = r4 + fp;
0x0001cee0 lsr.w r8, r8, 1 | r8 >>= 1;
0x0001cee4 mov r0, sb | r0 = sb;
0x0001cee6 mla sl, r8, r3, r6 | __asm ("mla sl, r8, r3, r6");
0x0001ceea add.w sl, sl, 8 | sl += 8;
0x0001ceee mov r1, sl | r1 = sl;
0x0001cef0 blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0001cef2 cmp r0, 0 |
0x0001cef4 bne 0x1cecc |
| }
0x0001cef6 ldr.w r3, [sl] | r3 = *(sl);
0x0001cefa ldr r5, [r7, 0x30] | r5 = var_30h;
0x0001cefc str r3, [r7, 0x28] | var_28h = r3;
0x0001cefe b 0x1ccf8 | goto label_0;
| label_15:
0x0001cf00 ldr r3, [pc, 0x3bc] |
0x0001cf02 movw r2, 0x8b9 | r2 = 0x8b9;
0x0001cf06 ldr r4, [pc, 0x3bc] |
0x0001cf08 ldr r1, [pc, 0x3bc] |
0x0001cf0a ldr r0, [pc, 0x3c0] |
0x0001cf0c add r3, pc |
0x0001cf0e add r4, pc | r4 = 0x3a1d8;
0x0001cf10 add.w r3, r3, 0x230 | r3 = 0x3a400;
0x0001cf14 add r1, pc | r1 = 0x3a1e0;
0x0001cf16 str r4, [sp] | *(sp) = r4;
0x0001cf18 add r0, pc | r0 = 0x3a1ea;
0x0001cf1a blx 0x9bf0 | g_array_new ();
| label_23:
0x0001cf1e ldr r3, [pc, 0x3b0] |
0x0001cf20 movs r4, 0 | r4 = 0;
0x0001cf22 ldr r1, [pc, 0x3b0] |
0x0001cf24 movw r2, 0x8e8 | r2 = 0x8e8;
0x0001cf28 ldr r0, [pc, 0x3ac] |
0x0001cf2a add r3, pc |
0x0001cf2c str r4, [sp] | *(sp) = r4;
0x0001cf2e add r1, pc | r1 = 0x3a208;
0x0001cf30 add.w r3, r3, 0x230 | r3 = 0x3a430;
0x0001cf34 add r0, pc | r0 = 0x3a210;
0x0001cf36 blx 0x9bf0 | g_array_new ();
0x0001cf3a ldr r2, [r3], 4 | r2 = *(r3);
| r3 += 4;
0x0001cf3e str.w r2, [ip] | __asm ("str.w r2, [ip]");
| label_3:
0x0001cf42 ldrb r2, [r0, 1]! | r2 = *((r0 += 1));
0x0001cf46 add.w ip, ip, 8 |
0x0001cf4a cmp r2, 0 |
| if (r2 != 0) {
0x0001cf4c bne.w 0x1ce42 | goto label_1;
| }
0x0001cf50 str r3, [r7, 0x3c] | var_3ch = r3;
0x0001cf52 mov r2, r4 | r2 = r4;
0x0001cf54 ldr r6, [r6, 0x14] | r6 = *((r6 + 0x14));
0x0001cf56 mov r3, r5 | r3 = r5;
0x0001cf58 mov r0, r8 | r0 = r8;
0x0001cf5a blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x0001cf5c cmp r0, 0 |
| if (r0 != 0) {
0x0001cf5e bne.w 0x1d10a | goto label_26;
| }
| label_6:
0x0001cf62 ldr r0, [r7, 0x2c] | r0 = var_2ch;
0x0001cf64 add.w sb, sb, 1 | sb++;
0x0001cf68 blx 0x9e5c | fcn_00009e5c ();
0x0001cf6a invalid |
0x0001cf6e adds r0, 0xc | r0 += 0xc;
0x0001cf70 add.w r8, r8, 0x18 | r8 += 0x18;
0x0001cf74 ubfx r3, r3, 0xa, 8 | r3 = (r3 >> 0xa) & ((1 << 8) - 1);
0x0001cf78 cmp r3, sb |
| if (r3 > sb) {
0x0001cf7a bhi.w 0x1cdf8 | goto label_2;
| }
0x0001cf7e ldr r5, [r7, 8] | r5 = var_8h_2;
| label_21:
0x0001cf80 ldr r6, [pc, 0x358] |
0x0001cf82 movs r4, 0 | r4 = 0;
0x0001cf84 add.w r8, r5, 8 | r8 = r5 + 8;
0x0001cf88 add r6, pc | r6 = 0x3a268;
0x0001cf8a mov r0, r6 | r0 = r6;
0x0001cf8c blx 0x9ad8 | fcn_00009ad8 ();
0x0001cf90 ldr r3, [r7, 0x1c] | r3 = var_1ch;
0x0001cf92 ldr.w r1, [r7, 0xc0] | r1 = var_c0h;
0x0001cf96 mov r0, r3 | r0 = r3;
0x0001cf98 str r4, [r3] | *(r3) = r4;
0x0001cf9a bl 0x26c00 | g_value_init_from_instance ();
0x0001cf9e mov r0, r6 | r0 = r6;
0x0001cfa0 blx 0x9e5c | fcn_00009e5c ();
0x0001cfa4 ldr r3, [r7, 0x20] | r3 = var_20h;
0x0001cfa6 mov r0, r6 | r0 = r6;
0x0001cfa8 str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x0001cfaa blx 0x9ad8 | fcn_00009ad8 ();
0x0001cfae ldr r3, [r7, 0x10] | r3 = var_10h;
0x0001cfb0 cmp r3, 4 |
| if (r3 == 4) {
0x0001cfb2 beq.w 0x1d252 | goto label_27;
| }
0x0001cfb6 ldr r3, [r7, 0x10] | r3 = var_10h;
0x0001cfb8 add.w r6, r7, 0x40 | r6 += var_40h;
0x0001cfbc mov r0, r6 | r0 = r6;
0x0001cfbe strd r4, r4, [r7, 0x40] | __asm ("strd r4, r4, [var_40h]");
0x0001cfc2 strd r4, r4, [r7, 0x48] | __asm ("strd r4, r4, [var_48h]");
0x0001cfc6 bic r1, r3, 1 | r1 = BIT_MASK (r3, 1);
0x0001cfca strd r4, r4, [r7, 0x50] | __asm ("strd r4, r4, [var_50h]");
0x0001cfce bl 0x2698c | g_value_init ();
0x0001cfd2 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0001cfd6 mov r1, r6 | r1 = r6;
0x0001cfd8 ldr r2, [r7, 0xc] | r2 = var_ch;
0x0001cfda ldr r0, [r7, 4] | r0 = var_4h_2;
0x0001cfdc ldr r3, [r7, 0x1c] | r3 = var_1ch;
0x0001cfde bl 0xe400 | g_closure_invoke ();
0x0001cfe2 ldr r3, [r7, 0x10] | r3 = var_10h;
0x0001cfe4 ldr r0, [r7, 0x40] | r0 = var_40h;
0x0001cfe6 lsls r3, r3, 0x1b | r3 <<= 0x1b;
0x0001cfe8 and sl, r3, 0x8000000 | sl = r3 & 0x8000000;
0x0001cfec bl 0x25228 | g_type_value_table_peek ();
0x0001cff0 ldr.w r8, [r0, 0x18] | r8 = *((r0 + 0x18));
0x0001cff4 mov r1, r4 | r1 = r4;
0x0001cff6 add.w r4, r7, 0x58 | r4 += var_58h;
0x0001cffa mov sb, r0 | sb = r0;
0x0001cffc movs r2, 0x40 | r2 = 0x40;
0x0001cffe mov r0, r4 | r0 = r4;
0x0001d000 blx 0x9db8 | g_string_append_printf ();
0x0001d004 ldrb.w r3, [r8] | r3 = *(r8);
0x0001d008 cmp r3, 0 |
| if (r3 == 0) {
0x0001d00a beq.w 0x1d288 | goto label_28;
| }
0x0001d00e ldr r2, [r7, 0x3c] | r2 = var_3ch;
0x0001d010 mov r0, r8 | r0 = r8;
0x0001d012 mov ip, r4 |
0x0001d014 rsb.w lr, r8, 1 | lr = 1 - r8;
| do {
0x0001d018 subs r3, 0x64 | r3 -= 0x64;
0x0001d01a add.w r1, lr, r0 | r1 = lr + r0;
0x0001d01e cmp r3, 0xd |
| if (r3 > 0xd) {
0x0001d020 bhi.w 0x1d264 | goto label_29;
| }
| /* switch table (15 cases) at 0x1d028 */
0x0001d024 tbh [pc, r3, lsl 1] | __asm ("tbh [pc, r3, lsl 1]");
0x0001d044 adds r3, 7 | r3 += 7;
0x0001d046 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x0001d04a vldmia r3!, {d16} | __asm ("vldmia r3!, {d16}");
0x0001d04e vstr d16, [ip] | __asm ("vstr d16, [ip]");
0x0001d052 b 0x1cf42 | goto label_3;
0x0001d054 adds r3, 7 | r3 += 7;
0x0001d056 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x0001d05a vldmia r3!, {d16} | __asm ("vldmia r3!, {d16}");
0x0001d05e vstr d16, [ip] | __asm ("vstr d16, [ip]");
0x0001d062 b 0x1cf42 | goto label_3;
0x0001d064 ldr r3, [r2], 4 | r3 = *(r2);
| r2 += 4;
0x0001d068 str.w r3, [ip] | __asm ("str.w r3, [ip]");
| label_5:
0x0001d06c ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x0001d070 add.w ip, ip, 8 |
0x0001d074 cmp r3, 0 |
0x0001d076 bne 0x1d018 |
| } while (r3 != 0);
0x0001d078 str r2, [r7, 0x3c] | var_3ch = r2;
| label_12:
0x0001d07a mov r2, r4 | r2 = r4;
0x0001d07c ldr.w r8, [sb, 0x1c] | r8 = *((sb + 0x1c));
0x0001d080 mov r3, sl | r3 = sl;
0x0001d082 mov r0, r6 | r0 = r6;
0x0001d084 blx r8 | r0 = uint32_t (*r8)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x0001d086 mov r4, r0 | r4 = r0;
0x0001d088 cmp r0, 0 |
| if (r0 == 0) {
0x0001d08a beq.w 0x1d280 | goto label_30;
| }
0x0001d08e str r0, [sp] | *(sp) = r0;
0x0001d090 movs r1, 0x10 | r1 = 0x10;
0x0001d092 ldr r3, [pc, 0x24c] |
0x0001d094 ldr r2, [pc, 0x24c] |
0x0001d096 ldr r0, [pc, 0x250] |
0x0001d098 add r3, pc | r3 = 0x3a37e;
0x0001d09a add r2, pc | r2 = 0x3a382;
0x0001d09c add r0, pc | r0 = 0x3a38a;
0x0001d09e blx 0x9e0c | g_mutex_lock ();
0x0001d0a2 mov r0, r4 | r0 = r4;
0x0001d0a4 blx 0x9ac8 | fcn_00009ac8 ();
0x0001d0a6 invalid |
| label_11:
0x0001d0a8 ldr r3, [r7, 0x18] | r3 = var_18h;
| if (r3 == 0) {
0x0001d0aa cbz r3, 0x1d0c4 | goto label_31;
| }
0x0001d0ac ldr r6, [r7, 0x14] | r6 = var_14h;
0x0001d0ae movs r4, 0 | r4 = 0;
0x0001d0b0 ldr.w r8, [r7, 0x18] | r8 = var_18h;
| do {
0x0001d0b4 mov r0, r6 | r0 = r6;
0x0001d0b6 adds r4, 1 | r4++;
0x0001d0b8 bl 0x26ad0 | g_value_unset ();
0x0001d0bc cmp r8, r4 |
0x0001d0be add.w r6, r6, 0x18 | r6 += 0x18;
0x0001d0c2 bne 0x1d0b4 |
| } while (r8 != r4);
| label_31:
0x0001d0c4 ldr r0, [r7, 0x1c] | r0 = var_1ch;
0x0001d0c6 bl 0x26ad0 | g_value_unset ();
0x0001d0ca ldr r0, [pc, 0x220] |
0x0001d0cc add r0, pc | r0 = 0x3a3be;
0x0001d0ce blx 0x9e5c | fcn_00009e5c ();
0x0001d0d2 ldr r3, [r7, 0x28] | r3 = var_28h;
0x0001d0d4 str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x0001d0d6 b 0x1ce90 | goto label_4;
0x0001d0d8 adds r2, 7 | r2 += 7;
0x0001d0da bic r2, r2, 7 | r2 = BIT_MASK (r2, 7);
0x0001d0de vldmia r2!, {d16} | __asm ("vldmia r2!, {d16}");
0x0001d0e2 vstr d16, [ip] | __asm ("vstr d16, [ip]");
0x0001d0e6 b 0x1d06c | goto label_5;
0x0001d0e8 adds r2, 7 | r2 += 7;
0x0001d0ea bic r2, r2, 7 | r2 = BIT_MASK (r2, 7);
0x0001d0ee vldmia r2!, {d16} | __asm ("vldmia r2!, {d16}");
0x0001d0f2 vstr d16, [ip] | __asm ("vstr d16, [ip]");
0x0001d0f6 b 0x1d06c | goto label_5;
| label_22:
0x0001d0f8 mov r1, r2 | r1 = r2;
0x0001d0fa ldr r6, [r6, 0x14] | r6 = *((r6 + 0x14));
0x0001d0fc mov r3, r5 | r3 = r5;
0x0001d0fe mov r2, r4 | r2 = r4;
0x0001d100 mov r0, r8 | r0 = r8;
0x0001d102 blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0001d104 cmp r0, 0 |
| if (r0 == 0) {
0x0001d106 beq.w 0x1cf62 | goto label_6;
| }
| label_26:
0x0001d10a mov r6, r0 | r6 = r0;
0x0001d10c str r0, [sp] | *(sp) = r0;
0x0001d10e ldr r3, [pc, 0x1e0] |
0x0001d110 movs r1, 0x10 | r1 = 0x10;
0x0001d112 ldr r2, [pc, 0x1e0] |
0x0001d114 ldr r0, [pc, 0x1e0] |
0x0001d116 add r3, pc | r3 = 0x3a40c;
0x0001d118 add r2, pc | r2 = 0x3a412;
0x0001d11a add r0, pc | r0 = 0x3a416;
0x0001d11c blx 0x9e0c | g_mutex_lock ();
0x0001d120 mov r0, r6 | r0 = r6;
0x0001d122 blx 0x9ac8 | fcn_00009ac8 ();
0x0001d126 mov r3, sb | r3 = sb;
0x0001d128 cmp r3, 0 |
| if (r3 == 0) {
0x0001d12a beq.w 0x1cc86 | goto label_7;
| }
0x0001d12e ldr r5, [r7, 0x1c] | r5 = var_1ch;
0x0001d130 add.w r4, sb, sb, lsl 1 | r4 = sb + (sb << 1);
0x0001d134 add.w r4, r5, r4, lsl 3 | r4 = r5 + (r4 << 3);
| do {
0x0001d138 mov r0, r4 | r0 = r4;
0x0001d13a subs r4, 0x18 | r4 -= 0x18;
0x0001d13c bl 0x26ad0 | g_value_unset ();
0x0001d140 cmp r4, r5 |
0x0001d142 bne 0x1d138 |
| } while (r4 != r5);
0x0001d144 b 0x1cc86 | goto label_7;
| label_25:
0x0001d146 ldr r5, [r7, 0x30] | r5 = var_30h;
0x0001d148 ldr r0, [r7, 0x58] | r0 = var_58h;
| label_24:
0x0001d14a cmp r0, 0 |
| if (r0 == 0) {
0x0001d14c beq 0x1d1ae | goto label_17;
| }
0x0001d14e ldr r3, [pc, 0x1ac] |
0x0001d150 add.w sl, r7, 0x58 | sl += var_58h;
0x0001d152 lsrs r0, r3, 9 | r0 = r3 >> 9;
0x0001d154 str r5, [r7, 0x2c] | var_2ch = r5;
0x0001d156 add r3, pc | r3 = 0x3a458;
0x0001d158 str r3, [r7, 0x30] | var_30h = r3;
| label_8:
0x0001d15a bl 0x231ac | g_type_parent ();
0x0001d15e ldr r3, [r7, 0x30] | r3 = var_30h;
0x0001d160 str r0, [r7, 0x58] | var_58h = r0;
0x0001d162 ldr.w r8, [r6] | r8 = *(r6);
0x0001d166 ldr r5, [r3, 0xc] | r5 = *((r3 + 0xc));
0x0001d168 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0001d16a str r3, [r7, 0x34] | var_34h = r3;
0x0001d16c cmp.w r8, 0 |
| if (r8 == 0) {
0x0001d170 beq 0x1d1aa | goto label_32;
| }
0x0001d172 mov.w sb, 0 | sb = 0;
0x0001d176 b 0x1d184 |
| while (r0 != 0) {
0x0001d178 ite ge |
| if (r8 < 0) {
0x0001d17a addge sb, r4, 1 | sb = r4 + 1;
| }
| if (r8 < 0) {
0x0001d17e mov r8, r4 | r8 = r4;
| }
0x0001d180 cmp r8, sb |
| if (r8 < sb) {
0x0001d182 bls 0x1d1a8 | goto label_33;
| }
0x0001d184 add.w r4, r8, sb | r4 = r8 + sb;
0x0001d188 ldr r3, [r7, 0x34] | r3 = var_34h;
0x0001d18a lsrs r4, r4, 1 | r4 >>= 1;
0x0001d18c mov r0, sl | r0 = sl;
0x0001d18e mla fp, r4, r5, r6 | __asm ("mla fp, r4, r5, r6");
0x0001d192 add.w fp, fp, 8 |
0x0001d196 mov r1, fp | r1 = fp;
0x0001d198 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0001d19a cmp r0, 0 |
0x0001d19c bne 0x1d178 |
| }
0x0001d19e ldr.w r3, [fp] | r3 = *(fp);
0x0001d1a2 ldr r5, [r7, 0x2c] | r5 = var_2ch;
0x0001d1a4 str r3, [r7, 0x28] | var_28h = r3;
0x0001d1a6 b 0x1ccf8 | goto label_0;
| label_33:
0x0001d1a8 ldr r0, [r7, 0x58] | r0 = var_58h;
| label_32:
0x0001d1aa cmp r0, 0 |
| if (r0 != 0) {
0x0001d1ac bne 0x1d15a | goto label_8;
| }
| label_17:
0x0001d1ae ldr r3, [pc, 0x150] |
0x0001d1b0 movw r2, 0x8c1 | r2 = 0x8c1;
0x0001d1b2 lsls r1, r0, 0xb | r1 = r0 << 0xb;
0x0001d1b4 ldr r4, [pc, 0x14c] |
0x0001d1b6 ldr r1, [pc, 0x150] |
0x0001d1b8 ldr r0, [pc, 0x150] |
0x0001d1ba add r3, pc |
0x0001d1bc add r4, pc | r4 = 0x3a4c4;
0x0001d1be add.w r3, r3, 0x230 | r3 = 0x3a6f0;
0x0001d1c2 add r1, pc | r1 = 0x3a4d0;
0x0001d1c4 str r4, [sp] | *(sp) = r4;
0x0001d1c6 add r0, pc | r0 = 0x3a4d6;
0x0001d1c8 blx 0x9bf0 | g_array_new ();
| label_14:
0x0001d1cc ldr.w r4, [r7, 0xc0] | r4 = var_c0h;
0x0001d1d0 movs r1, 0x10 | r1 = 0x10;
0x0001d1d2 ldr r3, [pc, 0x13c] |
0x0001d1d4 ldr r2, [pc, 0x13c] |
0x0001d1d6 ldr r0, [pc, 0x140] |
0x0001d1d8 add r3, pc | r3 = 0x3a4ee;
0x0001d1da str r4, [sp] | *(sp) = r4;
0x0001d1dc add r2, pc | r2 = 0x3a4f4;
0x0001d1de add r0, pc | r0 = 0x3a4fc;
0x0001d1e0 blx 0x9e0c | g_mutex_lock ();
0x0001d1e4 b 0x1ce90 | goto label_4;
| label_20:
0x0001d1e6 ldr r5, [r7, 0x30] | r5 = var_30h;
0x0001d1e8 ldr r0, [r7, 0x58] | r0 = var_58h;
| label_19:
0x0001d1ea cmp r0, 0 |
| if (r0 == 0) {
0x0001d1ec beq.w 0x1ce90 | goto label_4;
| }
0x0001d1f0 ldr r3, [pc, 0x128] |
0x0001d1f2 add.w sl, r7, 0x58 | sl += var_58h;
0x0001d1f6 str r5, [r7, 0x2c] | var_2ch = r5;
0x0001d1f8 add r3, pc | r3 = 0x3a518;
0x0001d1fa str r3, [r7, 0x30] | var_30h = r3;
| label_10:
0x0001d1fc bl 0x231ac | g_type_parent ();
0x0001d200 ldr r3, [r7, 0x30] | r3 = var_30h;
0x0001d202 str r0, [r7, 0x58] | var_58h = r0;
0x0001d204 ldr.w r8, [r6] | r8 = *(r6);
0x0001d208 ldr r5, [r3, 0xc] | r5 = *((r3 + 0xc));
0x0001d20a ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0001d20c str r3, [r7, 0x34] | var_34h = r3;
0x0001d20e cmp.w r8, 0 |
| if (r8 == 0) {
0x0001d212 beq 0x1d24c | goto label_34;
| }
0x0001d214 mov.w sb, 0 | sb = 0;
0x0001d218 b 0x1d226 |
| while (r0 != 0) {
0x0001d21a ite ge |
| if (r8 < 0) {
0x0001d21c addge sb, r4, 1 | sb = r4 + 1;
| }
| if (r8 < 0) {
0x0001d220 mov r8, r4 | r8 = r4;
| }
0x0001d222 cmp sb, r8 |
| if (sb >= r8) {
0x0001d224 bhs 0x1d24a | goto label_35;
| }
0x0001d226 add.w r4, r8, sb | r4 = r8 + sb;
0x0001d22a ldr r3, [r7, 0x34] | r3 = var_34h;
0x0001d22c lsrs r4, r4, 1 | r4 >>= 1;
0x0001d22e mov r0, sl | r0 = sl;
0x0001d230 mla fp, r4, r5, r6 | __asm ("mla fp, r4, r5, r6");
0x0001d234 add.w fp, fp, 8 |
0x0001d238 mov r1, fp | r1 = fp;
0x0001d23a blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0001d23c cmp r0, 0 |
0x0001d23e bne 0x1d21a |
| }
0x0001d240 ldr.w r3, [fp] | r3 = *(fp);
0x0001d244 ldr r5, [r7, 0x2c] | r5 = var_2ch;
0x0001d246 str r3, [r7, 0x20] | var_20h = r3;
0x0001d248 b 0x1cd82 | goto label_9;
| label_35:
0x0001d24a ldr r0, [r7, 0x58] | r0 = var_58h;
| label_34:
0x0001d24c cmp r0, 0 |
| if (r0 != 0) {
0x0001d24e bne 0x1d1fc | goto label_10;
| }
0x0001d250 b 0x1ce90 | goto label_4;
| label_27:
0x0001d252 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0001d256 mov r1, r4 | r1 = r4;
0x0001d258 ldr r2, [r7, 0xc] | r2 = var_ch;
0x0001d25a ldr r0, [r7, 4] | r0 = var_4h_2;
0x0001d25c ldr r3, [r7, 0x1c] | r3 = var_1ch;
0x0001d25e bl 0xe400 | g_closure_invoke ();
0x0001d262 b 0x1d0a8 | goto label_11;
| label_29:
0x0001d264 ldr r3, [pc, 0xb8] |
0x0001d266 movs r4, 0 | r4 = 0;
0x0001d268 ldr r1, [pc, 0xb8] |
0x0001d26a movw r2, 0x91c | r2 = 0x91c;
0x0001d26c asrs r4, r3, 8 | r4 = r3 >> 8;
0x0001d26e ldr r0, [pc, 0xb8] |
0x0001d270 add r3, pc |
0x0001d272 str r4, [sp] | *(sp) = r4;
0x0001d274 add r1, pc | r1 = 0x3a59c;
0x0001d276 add.w r3, r3, 0x230 | r3 = 0x3a7c4;
0x0001d27a add r0, pc | r0 = 0x3a5a8;
0x0001d27c blx 0x9bf0 | g_array_new ();
| label_30:
0x0001d280 mov r0, r6 | r0 = r6;
0x0001d282 bl 0x26ad0 | g_value_unset ();
0x0001d286 b 0x1d0a8 | goto label_11;
| label_28:
0x0001d288 mov r1, r3 | r1 = r3;
0x0001d28a b 0x1d07a | goto label_12;
| do {
0x000235e8 ldrb r3, [r4, 0xe] | r3 = *((r4 + 0xe));
0x000235ea lsls r3, r3, 0x1e | r3 <<= 0x1e;
| if (r3 >= r3) {
0x000235ec bpl 0x23642 | goto label_36;
| }
0x000235ee ldr r3, [r4, 4] | r3 = *((r4 + 4));
| if (r3 != 0) {
0x000235f0 cbnz r3, 0x23642 | goto label_36;
| }
0x000235f2 ldr r0, [pc, 0x68] |
0x000235f4 str r1, [sp, 4] | var_4h = r1;
0x000235f6 add r0, pc | r0 = 0x46c58;
0x000235f8 blx 0x9c5c | g_slist_prepend ();
0x000235fc ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
| if (r3 != 0) {
0x000235fe cbz r3, 0x23624 |
0x00023600 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x00023602 ldr r1, [sp, 4] | r1 = var_4h;
0x00023604 str r3, [r1] | *(r1) = r3;
0x00023606 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00023608 blx 0x9fd0 | fcn_00009fd0 ();
0x0002360c ldr r1, [sp, 4] | r1 = var_4h;
0x0002360e str r0, [r1, 4] | *((r1 + 4)) = r0;
0x00023610 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00023612 ldrh r3, [r3, 4] | r3 = *((r3 + 4));
0x00023614 str r3, [r1, 8] | *((r1 + 8)) = r3;
0x00023616 ldrb r3, [r4, 0xe] | r3 = *((r4 + 0xe));
0x00023618 ands r3, r3, 4 | r3 &= 4;
0x0002361c itt ne |
| if (r3 == r3) {
0x0002361e ldrne r3, [r4, 0x14] | r3 = *((r4 + 0x14));
| }
| if (r3 != r3) {
0x00023620 ldrhne r3, [r3, 0x24] | __asm ("ldrhne r3, [r3, 0x24]");
| }
0x00023622 str r3, [r1, 0xc] | *((r1 + 0xc)) = r3;
| }
0x00023624 ldr r0, [pc, 0x38] |
0x00023626 add r0, pc | r0 = 0x46c8a;
0x00023628 add sp, 8 |
0x0002362a pop.w {r4, lr} |
0x0002362e b.w 0x9ddc | void (*0x9ddc)() ();
0x00023636 movs r3, r0 | r3 = r0;
0x00023638 add r3, pc | r3 += pc;
0x0002363a add r3, r0 | r3 += r0;
0x0002363c ldr r4, [r3, 0xc] | r4 = *((r3 + 0xc));
0x0002363e cmp r4, 0 |
0x00023640 bne 0x235e8 |
| } while (r4 != 0);
| label_36:
0x00023642 add sp, 8 |
0x00023644 pop {r4, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x1cc58 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.g_signal_chain_from_overridden_handler () | void g_signal_chain_from_overridden_handler (int16_t arg_0h, int16_t arg_4h) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int32_t var_4h_2;
| int32_t var_8h_2;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int32_t var_28h;
| int32_t var_2ch;
| int32_t var_30h;
| int32_t var_34h;
| int32_t var_3ch;
| int16_t var_40h;
| int32_t var_40h_2;
| int32_t var_48h;
| int32_t var_48h_2;
| int32_t var_50h;
| int32_t var_50h_2;
| int16_t var_58h;
| int16_t var_8h_3;
| int16_t var_0h_2;
| int32_t var_c0h;
| int16_t var_c4h;
0x0001cc58 push {r0, r1, r2, r3} |
0x0001cc5a push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001cc5e sub sp, 0xa4 |
0x0001cc60 add r7, sp, 8 | r7 += var_8h;
0x0001cc62 ldr.w r0, [r7, 0xc0] | r0 = var_c0h;
0x0001cc66 bl 0x24e2c | r0 = g_type_check_instance ();
| if (r0 == 0) {
0x0001cc6a cbnz r0, 0x1cc92 |
0x0001cc6c ldr.w r1, [pc, 0x61c] |
0x0001cc70 ldr.w r2, [pc, 0x61c] |
0x0001cc74 ldr.w r0, [pc, 0x61c] |
0x0001cc78 add r1, pc |
0x0001cc7a add r2, pc | r2 = 0x39f0e;
0x0001cc7c add.w r1, r1, 0x230 | r1 = 0x3a138;
0x0001cc80 add r0, pc | r0 = 0x39f18;
0x0001cc82 blx 0x9c0c | fcn_00009c0c ();
| label_7:
0x0001cc86 adds r7, 0x9c | r7 += 0x9c;
0x0001cc88 mov sp, r7 |
0x0001cc8a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001cc8e add sp, 0x10 |
0x0001cc90 bx lr | return;
| }
0x0001cc92 ldr.w r4, [pc, 0x604] |
0x0001cc96 add r4, pc | r4 = 0x39f34;
0x0001cc98 mov r0, r4 | r0 = r4;
0x0001cc9a blx 0x9e5c | fcn_00009e5c ();
0x0001cc9e ldr r5, [r4, 0x20] | r5 = *(0x39f54);
0x0001cca0 ldr.w r2, [r7, 0xc0] | r2 = var_c0h;
| if (r5 != 0) {
0x0001cca4 cbnz r5, 0x1ccb0 | goto label_13;
| }
0x0001cca6 b 0x1d1cc | goto label_14;
| do {
0x0001cca8 ldr r5, [r5] | r5 = *(r5);
0x0001ccaa cmp r5, 0 |
| if (r5 == 0) {
0x0001ccac beq.w 0x1d1cc | goto label_14;
| }
| label_13:
0x0001ccb0 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x0001ccb2 cmp r2, r3 |
0x0001ccb4 bne 0x1cca8 |
| } while (r2 != r3);
0x0001ccb6 ldr.w r2, [pc, 0x5e4] |
0x0001ccba ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x0001ccbc add r2, pc | r2 = 0x39f5e;
0x0001ccbe ldr r1, [r2, 0x18] | r1 = *(0x39f76);
0x0001ccc0 cmp r3, r1 |
| if (r3 >= r1) {
0x0001ccc2 bhs.w 0x1cf00 | goto label_15;
| }
0x0001ccc6 ldr r2, [r2, 0x1c] | r2 = *((r2 + 0x1c));
0x0001ccc8 ldr.w r3, [r2, r3, lsl 2] | offset_0 = r3 << 2;
| r3 = *((r2 + offset_0));
0x0001cccc str r3, [r7, 0x24] | var_24h = r3;
0x0001ccce cmp r3, 0 |
| if (r3 == 0) {
0x0001ccd0 beq.w 0x1cf00 | goto label_15;
| }
0x0001ccd4 ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x0001ccd6 cmp r0, 4 |
| if (r0 == 4) {
0x0001ccd8 beq.w 0x1ce6c | goto label_16;
| }
0x0001ccdc ldr r3, [r7, 0x24] | r3 = var_24h;
0x0001ccde ldr r6, [r3, 0x18] | r6 = *((r3 + 0x18));
0x0001cce0 cmp r6, 0 |
| if (r6 == 0) {
0x0001cce2 beq.w 0x1d1ae | goto label_17;
| }
0x0001cce6 ldr r3, [r6] | r3 = *(r6);
0x0001cce8 cmp r3, 1 |
| if (r3 != 1) {
0x0001ccea bne.w 0x1ce9c | goto label_18;
| }
0x0001ccee ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0001ccf0 str r3, [r7, 0x28] | var_28h = r3;
0x0001ccf2 cmp r3, 0 |
| if (r3 != 0) {
0x0001ccf4 bne.w 0x1ce9c | goto label_18;
| }
| label_0:
0x0001ccf8 ldr r4, [r7, 0x24] | r4 = var_24h;
0x0001ccfa ldr r0, [r7, 0x28] | r0 = var_28h;
0x0001ccfc ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0001ccfe ubfx r3, r3, 0xa, 8 | r3 = (r3 >> 0xa) & ((1 << 8) - 1);
0x0001cd00 movs r3, 0x87 | r3 = 0x87;
0x0001cd02 str r3, [r7, 0x18] | var_18h = r3;
0x0001cd04 bl 0x231ac | g_type_parent ();
0x0001cd08 ldr r6, [r4, 0x18] | r6 = *((r4 + 0x18));
0x0001cd0a cmp r6, 0 |
| if (r6 == 0) {
0x0001cd0c beq.w 0x1ce90 | goto label_4;
| }
0x0001cd10 ldr r3, [r6] | r3 = *(r6);
0x0001cd12 cmp r3, 1 |
| if (r3 == 1) {
0x0001cd14 bne 0x1cd20 |
0x0001cd16 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0001cd18 add.w fp, r6, 8 |
0x0001cd1c str r3, [r7, 0x20] | var_20h = r3;
| if (r3 == 0) {
0x0001cd1e cbz r3, 0x1cd82 | goto label_9;
| }
| }
0x0001cd20 ldr.w r2, [pc, 0x57c] |
0x0001cd24 str r0, [r7, 0x58] | var_58h = r0;
0x0001cd26 ldr.w sb, [r6] | sb = *(r6);
0x0001cd2a add r2, pc | r2 = 0x39fce;
0x0001cd2c ldr r3, [r2, 0xc] | r3 = *(0x39fda);
0x0001cd2e str r3, [r7, 0x34] | var_34h = r3;
0x0001cd30 ldr r3, [r2, 0x10] | r3 = *(0x39fde);
0x0001cd32 cmp.w sb, 0 |
| if (sb == 0) {
0x0001cd36 beq.w 0x1d1ea | goto label_19;
| }
0x0001cd3a add.w r4, r7, 0x58 | r4 += var_58h;
0x0001cd3e mov.w sl, 0 | sl = 0;
0x0001cd42 str r5, [r7, 0x30] | var_30h = r5;
0x0001cd44 mov r5, r3 | r5 = r3;
0x0001cd46 mov r3, r4 | r3 = r4;
0x0001cd48 mov r4, sl | r4 = sl;
0x0001cd4a mov sl, sb | sl = sb;
0x0001cd4c mov sb, r3 | sb = r3;
0x0001cd4e b 0x1cd5e |
| while (r0 != 0) {
0x0001cd50 ite ge |
| if (sb < 0) {
0x0001cd52 addge r4, r8, 1 | r4 = r8 + 1;
| }
| if (sb < 0) {
0x0001cd56 mov sl, r8 | sl = r8;
| }
0x0001cd58 cmp sl, r4 |
| if (sl < r4) {
0x0001cd5a bls.w 0x1d1e6 | goto label_20;
| }
0x0001cd5e ldr r3, [r7, 0x34] | r3 = var_34h;
0x0001cd60 add.w r8, sl, r4 | r8 = sl + r4;
0x0001cd64 lsr.w r8, r8, 1 | r8 >>= 1;
0x0001cd68 mov r0, sb | r0 = sb;
0x0001cd6a mla fp, r8, r3, r6 | __asm ("mla fp, r8, r3, r6");
0x0001cd6e add.w fp, fp, 8 |
0x0001cd72 mov r1, fp | r1 = fp;
0x0001cd74 blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0001cd76 cmp r0, 0 |
0x0001cd78 bne 0x1cd50 |
| }
0x0001cd7a ldr r5, [r7, 0x30] | r5 = var_30h;
0x0001cd7c ldr.w r3, [fp] | r3 = *(fp);
0x0001cd80 str r3, [r7, 0x20] | var_20h = r3;
| label_9:
0x0001cd82 ldr r3, [r7, 0x28] | r3 = var_28h;
0x0001cd84 ldr r2, [r7, 0x20] | r2 = var_20h;
0x0001cd86 cmp r3, r2 |
| if (r3 != r2) {
0x0001cd88 beq.w 0x1ce90 |
0x0001cd8c ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x0001cd90 str r3, [r7, 4] | var_4h_2 = r3;
0x0001cd92 cmp r3, 0 |
| if (r3 == 0) {
0x0001cd94 beq 0x1ce90 | goto label_4;
| }
0x0001cd96 ldr r3, [r7, 0x18] | r3 = var_18h;
0x0001cd98 movs r1, 0 | r1 = 0;
0x0001cd9a ldr r4, [r7, 0x24] | r4 = var_24h;
0x0001cd9c adds r3, 1 | r3++;
0x0001cd9e mov r2, r3 | r2 = r3;
0x0001cda0 str r3, [r7, 0xc] | var_ch = r3;
0x0001cda2 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x0001cda6 add.w r3, r7, 0xc4 | r3 += var_c4h;
0x0001cda8 lsls r4, r0, 0xf | r4 = r0 << 0xf;
0x0001cdaa str r3, [r7, 0x3c] | var_3ch = r3;
0x0001cdac mov r3, sp | r3 = sp;
0x0001cdae sub.w r3, r3, r2, lsl 3 | r3 -= (r2 << 3);
0x0001cdb2 lsls r2, r2, 3 | r2 <<= 3;
0x0001cdb4 mov sp, r3 |
0x0001cdb6 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0001cdb8 str r3, [r7, 0x10] | var_10h = r3;
0x0001cdba add r3, sp, 8 | r3 += var_8h;
0x0001cdbc mov r0, r3 | r0 = r3;
0x0001cdbe mov r6, r3 | r6 = r3;
0x0001cdc0 str r3, [r7, 0x1c] | var_1ch = r3;
0x0001cdc2 blx 0x9db8 | g_string_append_printf ();
0x0001cdc6 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0001cdc8 mov r2, r6 | r2 = r6;
0x0001cdca adds r2, 0x18 | r2 += 0x18;
0x0001cdcc str r2, [r7, 0x14] | var_14h = r2;
0x0001cdce tst.w r3, 0x3fc00 |
| if ((r3 & 0x3fc00) == 0) {
0x0001cdd2 beq.w 0x1cf80 | goto label_21;
| }
0x0001cdd6 ldr.w r3, [pc, 0x4cc] |
0x0001cdda add.w r4, r7, 0x58 | r4 += var_58h;
0x0001cdde ldr.w r8, [r7, 0x14] | r8 = var_14h;
0x0001cde2 ldr.w sl, [r7, 0x24] | sl = var_24h;
0x0001cde6 add r3, pc | r3 = 0x3a090;
0x0001cde8 str r5, [r7, 8] | var_8h_2 = r5;
0x0001cdea str r3, [r7, 0x30] | var_30h = r3;
0x0001cdec ldr.w r3, [pc, 0x4b8] |
0x0001cdf0 add r3, pc | r3 = 0x3a09c;
0x0001cdf2 str r3, [r7, 0x2c] | var_2ch = r3;
0x0001cdf4 movs r3, 0 | r3 = 0;
0x0001cdf6 mov sb, r3 | sb = r3;
| label_2:
0x0001cdf8 ldr.w r3, [sl, 0x10] | r3 = *((sl + 0x10));
0x0001cdfc ldr r0, [r7, 0x30] | r0 = var_30h;
0x0001cdfe ldr.w r5, [r3, sb, lsl 2] | offset_1 = sb << 2;
| r5 = *((r3 + offset_1));
0x0001ce02 blx 0x9ad8 | fcn_00009ad8 ();
0x0001ce06 bic r3, r5, 1 | r3 = BIT_MASK (r5, 1);
0x0001ce0a mov r0, r3 | r0 = r3;
0x0001ce0c str r3, [r7, 0x34] | var_34h = r3;
0x0001ce0e bl 0x25228 | g_type_value_table_peek ();
0x0001ce12 movs r2, 0x40 | r2 = 0x40;
0x0001ce14 ldr.w fp, [r0, 0x10] | fp = *((r0 + 0x10));
0x0001ce18 mov r6, r0 | r6 = r0;
0x0001ce1a movs r1, 0 | r1 = 0;
0x0001ce1c mov r0, r4 | r0 = r4;
0x0001ce1e lsls r5, r5, 0x1b | r5 <<= 0x1b;
0x0001ce20 blx 0x9db8 | g_string_append_printf ();
0x0001ce24 ldr r3, [r7, 0x34] | r3 = var_34h;
0x0001ce26 and r5, r5, 0x8000000 | r5 &= 0x8000000;
0x0001ce28 str r0, [r0, 0x50] | *((r0 + 0x50)) = r0;
0x0001ce2a str.w r3, [r8] | __asm ("str.w r3, [r8]");
0x0001ce2e ldrb.w r2, [fp] | r2 = *(fp);
0x0001ce32 cmp r2, 0 |
| if (r2 == 0) {
0x0001ce34 beq.w 0x1d0f8 | goto label_22;
| }
0x0001ce38 ldr r3, [r7, 0x3c] | r3 = var_3ch;
0x0001ce3a mov r0, fp | r0 = fp;
0x0001ce3c mov ip, r4 |
0x0001ce3e rsb.w lr, fp, 1 | lr = 1 - fp;
| label_1:
0x0001ce42 subs r2, 0x64 | r2 -= 0x64;
0x0001ce44 add.w r1, lr, r0 | r1 = lr + r0;
0x0001ce48 cmp r2, 0xd |
| if (r2 > 0xd) {
0x0001ce4a bhi 0x1cf1e | goto label_23;
| }
| /* switch table (15 cases) at 0x1ce50 */
0x0001ce4c tbh [pc, r2, lsl 1] | __asm ("tbh [pc, r2, lsl 1]");
| label_16:
0x0001ce6c ldr.w r3, [r7, 0xc0] | r3 = var_c0h;
0x0001ce70 movs r1, 0x10 | r1 = 16;
0x0001ce72 ldr.w r2, [pc, 0x438] |
0x0001ce76 ldr.w r0, [pc, 0x438] |
0x0001ce7a str r3, [sp, 4] | var_4h = r3;
0x0001ce7c ldr r3, [r7, 0x24] | r3 = var_24h;
0x0001ce7e add r2, pc | r2 = 0x3a130;
0x0001ce80 add r0, pc | r0 = 0x3a136;
0x0001ce82 ldr r4, [r3] | r4 = *(r3);
0x0001ce84 ldr.w r3, [pc, 0x42c] |
0x0001ce88 str r4, [sp] | *(sp) = r4;
0x0001ce8a add r3, pc | r3 = 0x3a142;
0x0001ce8c blx 0x9e0c | g_mutex_lock ();
| }
| label_4:
0x0001ce90 ldr.w r0, [pc, 0x424] |
0x0001ce94 add r0, pc | r0 = 0x3a150;
0x0001ce96 blx 0x9ad8 | fcn_00009ad8 ();
0x0001ce98 mcr p6, 1, lr, c0, c4, 7 | __asm ("mcr p6, 1, lr, c0, c4, 7");
| label_18:
0x0001ce9c ldr.w r2, [pc, 0x41c] |
0x0001cea0 str r0, [r7, 0x58] | var_58h = r0;
0x0001cea2 ldr.w sb, [r6] | sb = *(r6);
0x0001cea6 add r2, pc | r2 = 0x3a166;
0x0001cea8 ldr r3, [r2, 0xc] | r3 = *(0x3a172);
0x0001ceaa str r3, [r7, 0x34] | var_34h = r3;
0x0001ceac ldr r3, [r2, 0x10] | r3 = *(0x3a176);
0x0001ceae cmp.w sb, 0 |
0x0001ceb0 lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 == r0) {
0x0001ceb2 beq.w 0x1d14a | goto label_24;
| }
0x0001ceb6 add.w r4, r7, 0x58 | r4 += var_58h;
0x0001ceba mov.w fp, 0 |
0x0001cebe str r5, [r7, 0x30] | var_30h = r5;
0x0001cec0 mov r5, r3 | r5 = r3;
0x0001cec2 mov r3, r4 | r3 = r4;
0x0001cec4 mov r4, fp | r4 = fp;
0x0001cec6 mov fp, sb |
0x0001cec8 mov sb, r3 | sb = r3;
0x0001ceca b 0x1ceda |
| while (r0 != 0) {
0x0001cecc ite ge |
| if (r0 < r0) {
0x0001cece addge r4, r8, 1 | r4 = r8 + 1;
| }
| if (r0 < r0) {
0x0001ced2 mov fp, r8 |
| }
0x0001ced4 cmp fp, r4 |
| if (fp < r4) {
0x0001ced6 bls.w 0x1d146 | goto label_25;
| }
0x0001ceda ldr r3, [r7, 0x34] | r3 = var_34h;
0x0001cedc add.w r8, r4, fp | r8 = r4 + fp;
0x0001cee0 lsr.w r8, r8, 1 | r8 >>= 1;
0x0001cee4 mov r0, sb | r0 = sb;
0x0001cee6 mla sl, r8, r3, r6 | __asm ("mla sl, r8, r3, r6");
0x0001ceea add.w sl, sl, 8 | sl += 8;
0x0001ceee mov r1, sl | r1 = sl;
0x0001cef0 blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0001cef2 cmp r0, 0 |
0x0001cef4 bne 0x1cecc |
| }
0x0001cef6 ldr.w r3, [sl] | r3 = *(sl);
0x0001cefa ldr r5, [r7, 0x30] | r5 = var_30h;
0x0001cefc str r3, [r7, 0x28] | var_28h = r3;
0x0001cefe b 0x1ccf8 | goto label_0;
| label_15:
0x0001cf00 ldr r3, [pc, 0x3bc] |
0x0001cf02 movw r2, 0x8b9 | r2 = 0x8b9;
0x0001cf06 ldr r4, [pc, 0x3bc] |
0x0001cf08 ldr r1, [pc, 0x3bc] |
0x0001cf0a ldr r0, [pc, 0x3c0] |
0x0001cf0c add r3, pc |
0x0001cf0e add r4, pc | r4 = 0x3a1d8;
0x0001cf10 add.w r3, r3, 0x230 | r3 = 0x3a400;
0x0001cf14 add r1, pc | r1 = 0x3a1e0;
0x0001cf16 str r4, [sp] | *(sp) = r4;
0x0001cf18 add r0, pc | r0 = 0x3a1ea;
0x0001cf1a blx 0x9bf0 | g_array_new ();
| label_23:
0x0001cf1e ldr r3, [pc, 0x3b0] |
0x0001cf20 movs r4, 0 | r4 = 0;
0x0001cf22 ldr r1, [pc, 0x3b0] |
0x0001cf24 movw r2, 0x8e8 | r2 = 0x8e8;
0x0001cf28 ldr r0, [pc, 0x3ac] |
0x0001cf2a add r3, pc |
0x0001cf2c str r4, [sp] | *(sp) = r4;
0x0001cf2e add r1, pc | r1 = 0x3a208;
0x0001cf30 add.w r3, r3, 0x230 | r3 = 0x3a430;
0x0001cf34 add r0, pc | r0 = 0x3a210;
0x0001cf36 blx 0x9bf0 | g_array_new ();
0x0001cf3a ldr r2, [r3], 4 | r2 = *(r3);
| r3 += 4;
0x0001cf3e str.w r2, [ip] | __asm ("str.w r2, [ip]");
| label_3:
0x0001cf42 ldrb r2, [r0, 1]! | r2 = *((r0 += 1));
0x0001cf46 add.w ip, ip, 8 |
0x0001cf4a cmp r2, 0 |
| if (r2 != 0) {
0x0001cf4c bne.w 0x1ce42 | goto label_1;
| }
0x0001cf50 str r3, [r7, 0x3c] | var_3ch = r3;
0x0001cf52 mov r2, r4 | r2 = r4;
0x0001cf54 ldr r6, [r6, 0x14] | r6 = *((r6 + 0x14));
0x0001cf56 mov r3, r5 | r3 = r5;
0x0001cf58 mov r0, r8 | r0 = r8;
0x0001cf5a blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x0001cf5c cmp r0, 0 |
| if (r0 != 0) {
0x0001cf5e bne.w 0x1d10a | goto label_26;
| }
| label_6:
0x0001cf62 ldr r0, [r7, 0x2c] | r0 = var_2ch;
0x0001cf64 add.w sb, sb, 1 | sb++;
0x0001cf68 blx 0x9e5c | fcn_00009e5c ();
0x0001cf6a invalid |
0x0001cf6e adds r0, 0xc | r0 += 0xc;
0x0001cf70 add.w r8, r8, 0x18 | r8 += 0x18;
0x0001cf74 ubfx r3, r3, 0xa, 8 | r3 = (r3 >> 0xa) & ((1 << 8) - 1);
0x0001cf78 cmp r3, sb |
| if (r3 > sb) {
0x0001cf7a bhi.w 0x1cdf8 | goto label_2;
| }
0x0001cf7e ldr r5, [r7, 8] | r5 = var_8h_2;
| label_21:
0x0001cf80 ldr r6, [pc, 0x358] |
0x0001cf82 movs r4, 0 | r4 = 0;
0x0001cf84 add.w r8, r5, 8 | r8 = r5 + 8;
0x0001cf88 add r6, pc | r6 = 0x3a268;
0x0001cf8a mov r0, r6 | r0 = r6;
0x0001cf8c blx 0x9ad8 | fcn_00009ad8 ();
0x0001cf90 ldr r3, [r7, 0x1c] | r3 = var_1ch;
0x0001cf92 ldr.w r1, [r7, 0xc0] | r1 = var_c0h;
0x0001cf96 mov r0, r3 | r0 = r3;
0x0001cf98 str r4, [r3] | *(r3) = r4;
0x0001cf9a bl 0x26c00 | g_value_init_from_instance ();
0x0001cf9e mov r0, r6 | r0 = r6;
0x0001cfa0 blx 0x9e5c | fcn_00009e5c ();
0x0001cfa4 ldr r3, [r7, 0x20] | r3 = var_20h;
0x0001cfa6 mov r0, r6 | r0 = r6;
0x0001cfa8 str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x0001cfaa blx 0x9ad8 | fcn_00009ad8 ();
0x0001cfae ldr r3, [r7, 0x10] | r3 = var_10h;
0x0001cfb0 cmp r3, 4 |
| if (r3 == 4) {
0x0001cfb2 beq.w 0x1d252 | goto label_27;
| }
0x0001cfb6 ldr r3, [r7, 0x10] | r3 = var_10h;
0x0001cfb8 add.w r6, r7, 0x40 | r6 += var_40h;
0x0001cfbc mov r0, r6 | r0 = r6;
0x0001cfbe strd r4, r4, [r7, 0x40] | __asm ("strd r4, r4, [var_40h]");
0x0001cfc2 strd r4, r4, [r7, 0x48] | __asm ("strd r4, r4, [var_48h]");
0x0001cfc6 bic r1, r3, 1 | r1 = BIT_MASK (r3, 1);
0x0001cfca strd r4, r4, [r7, 0x50] | __asm ("strd r4, r4, [var_50h]");
0x0001cfce bl 0x2698c | g_value_init ();
0x0001cfd2 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0001cfd6 mov r1, r6 | r1 = r6;
0x0001cfd8 ldr r2, [r7, 0xc] | r2 = var_ch;
0x0001cfda ldr r0, [r7, 4] | r0 = var_4h_2;
0x0001cfdc ldr r3, [r7, 0x1c] | r3 = var_1ch;
0x0001cfde bl 0xe400 | g_closure_invoke ();
0x0001cfe2 ldr r3, [r7, 0x10] | r3 = var_10h;
0x0001cfe4 ldr r0, [r7, 0x40] | r0 = var_40h;
0x0001cfe6 lsls r3, r3, 0x1b | r3 <<= 0x1b;
0x0001cfe8 and sl, r3, 0x8000000 | sl = r3 & 0x8000000;
0x0001cfec bl 0x25228 | g_type_value_table_peek ();
0x0001cff0 ldr.w r8, [r0, 0x18] | r8 = *((r0 + 0x18));
0x0001cff4 mov r1, r4 | r1 = r4;
0x0001cff6 add.w r4, r7, 0x58 | r4 += var_58h;
0x0001cffa mov sb, r0 | sb = r0;
0x0001cffc movs r2, 0x40 | r2 = 0x40;
0x0001cffe mov r0, r4 | r0 = r4;
0x0001d000 blx 0x9db8 | g_string_append_printf ();
0x0001d004 ldrb.w r3, [r8] | r3 = *(r8);
0x0001d008 cmp r3, 0 |
| if (r3 == 0) {
0x0001d00a beq.w 0x1d288 | goto label_28;
| }
0x0001d00e ldr r2, [r7, 0x3c] | r2 = var_3ch;
0x0001d010 mov r0, r8 | r0 = r8;
0x0001d012 mov ip, r4 |
0x0001d014 rsb.w lr, r8, 1 | lr = 1 - r8;
| do {
0x0001d018 subs r3, 0x64 | r3 -= 0x64;
0x0001d01a add.w r1, lr, r0 | r1 = lr + r0;
0x0001d01e cmp r3, 0xd |
| if (r3 > 0xd) {
0x0001d020 bhi.w 0x1d264 | goto label_29;
| }
| /* switch table (15 cases) at 0x1d028 */
0x0001d024 tbh [pc, r3, lsl 1] | __asm ("tbh [pc, r3, lsl 1]");
0x0001d044 adds r3, 7 | r3 += 7;
0x0001d046 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x0001d04a vldmia r3!, {d16} | __asm ("vldmia r3!, {d16}");
0x0001d04e vstr d16, [ip] | __asm ("vstr d16, [ip]");
0x0001d052 b 0x1cf42 | goto label_3;
0x0001d054 adds r3, 7 | r3 += 7;
0x0001d056 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x0001d05a vldmia r3!, {d16} | __asm ("vldmia r3!, {d16}");
0x0001d05e vstr d16, [ip] | __asm ("vstr d16, [ip]");
0x0001d062 b 0x1cf42 | goto label_3;
0x0001d064 ldr r3, [r2], 4 | r3 = *(r2);
| r2 += 4;
0x0001d068 str.w r3, [ip] | __asm ("str.w r3, [ip]");
| label_5:
0x0001d06c ldrb r3, [r0, 1]! | r3 = *((r0 += 1));
0x0001d070 add.w ip, ip, 8 |
0x0001d074 cmp r3, 0 |
0x0001d076 bne 0x1d018 |
| } while (r3 != 0);
0x0001d078 str r2, [r7, 0x3c] | var_3ch = r2;
| label_12:
0x0001d07a mov r2, r4 | r2 = r4;
0x0001d07c ldr.w r8, [sb, 0x1c] | r8 = *((sb + 0x1c));
0x0001d080 mov r3, sl | r3 = sl;
0x0001d082 mov r0, r6 | r0 = r6;
0x0001d084 blx r8 | r0 = uint32_t (*r8)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x0001d086 mov r4, r0 | r4 = r0;
0x0001d088 cmp r0, 0 |
| if (r0 == 0) {
0x0001d08a beq.w 0x1d280 | goto label_30;
| }
0x0001d08e str r0, [sp] | *(sp) = r0;
0x0001d090 movs r1, 0x10 | r1 = 0x10;
0x0001d092 ldr r3, [pc, 0x24c] |
0x0001d094 ldr r2, [pc, 0x24c] |
0x0001d096 ldr r0, [pc, 0x250] |
0x0001d098 add r3, pc | r3 = 0x3a37e;
0x0001d09a add r2, pc | r2 = 0x3a382;
0x0001d09c add r0, pc | r0 = 0x3a38a;
0x0001d09e blx 0x9e0c | g_mutex_lock ();
0x0001d0a2 mov r0, r4 | r0 = r4;
0x0001d0a4 blx 0x9ac8 | fcn_00009ac8 ();
0x0001d0a6 invalid |
| label_11:
0x0001d0a8 ldr r3, [r7, 0x18] | r3 = var_18h;
| if (r3 == 0) {
0x0001d0aa cbz r3, 0x1d0c4 | goto label_31;
| }
0x0001d0ac ldr r6, [r7, 0x14] | r6 = var_14h;
0x0001d0ae movs r4, 0 | r4 = 0;
0x0001d0b0 ldr.w r8, [r7, 0x18] | r8 = var_18h;
| do {
0x0001d0b4 mov r0, r6 | r0 = r6;
0x0001d0b6 adds r4, 1 | r4++;
0x0001d0b8 bl 0x26ad0 | g_value_unset ();
0x0001d0bc cmp r8, r4 |
0x0001d0be add.w r6, r6, 0x18 | r6 += 0x18;
0x0001d0c2 bne 0x1d0b4 |
| } while (r8 != r4);
| label_31:
0x0001d0c4 ldr r0, [r7, 0x1c] | r0 = var_1ch;
0x0001d0c6 bl 0x26ad0 | g_value_unset ();
0x0001d0ca ldr r0, [pc, 0x220] |
0x0001d0cc add r0, pc | r0 = 0x3a3be;
0x0001d0ce blx 0x9e5c | fcn_00009e5c ();
0x0001d0d2 ldr r3, [r7, 0x28] | r3 = var_28h;
0x0001d0d4 str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x0001d0d6 b 0x1ce90 | goto label_4;
0x0001d0d8 adds r2, 7 | r2 += 7;
0x0001d0da bic r2, r2, 7 | r2 = BIT_MASK (r2, 7);
0x0001d0de vldmia r2!, {d16} | __asm ("vldmia r2!, {d16}");
0x0001d0e2 vstr d16, [ip] | __asm ("vstr d16, [ip]");
0x0001d0e6 b 0x1d06c | goto label_5;
0x0001d0e8 adds r2, 7 | r2 += 7;
0x0001d0ea bic r2, r2, 7 | r2 = BIT_MASK (r2, 7);
0x0001d0ee vldmia r2!, {d16} | __asm ("vldmia r2!, {d16}");
0x0001d0f2 vstr d16, [ip] | __asm ("vstr d16, [ip]");
0x0001d0f6 b 0x1d06c | goto label_5;
| label_22:
0x0001d0f8 mov r1, r2 | r1 = r2;
0x0001d0fa ldr r6, [r6, 0x14] | r6 = *((r6 + 0x14));
0x0001d0fc mov r3, r5 | r3 = r5;
0x0001d0fe mov r2, r4 | r2 = r4;
0x0001d100 mov r0, r8 | r0 = r8;
0x0001d102 blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0001d104 cmp r0, 0 |
| if (r0 == 0) {
0x0001d106 beq.w 0x1cf62 | goto label_6;
| }
| label_26:
0x0001d10a mov r6, r0 | r6 = r0;
0x0001d10c str r0, [sp] | *(sp) = r0;
0x0001d10e ldr r3, [pc, 0x1e0] |
0x0001d110 movs r1, 0x10 | r1 = 0x10;
0x0001d112 ldr r2, [pc, 0x1e0] |
0x0001d114 ldr r0, [pc, 0x1e0] |
0x0001d116 add r3, pc | r3 = 0x3a40c;
0x0001d118 add r2, pc | r2 = 0x3a412;
0x0001d11a add r0, pc | r0 = 0x3a416;
0x0001d11c blx 0x9e0c | g_mutex_lock ();
0x0001d120 mov r0, r6 | r0 = r6;
0x0001d122 blx 0x9ac8 | fcn_00009ac8 ();
0x0001d126 mov r3, sb | r3 = sb;
0x0001d128 cmp r3, 0 |
| if (r3 == 0) {
0x0001d12a beq.w 0x1cc86 | goto label_7;
| }
0x0001d12e ldr r5, [r7, 0x1c] | r5 = var_1ch;
0x0001d130 add.w r4, sb, sb, lsl 1 | r4 = sb + (sb << 1);
0x0001d134 add.w r4, r5, r4, lsl 3 | r4 = r5 + (r4 << 3);
| do {
0x0001d138 mov r0, r4 | r0 = r4;
0x0001d13a subs r4, 0x18 | r4 -= 0x18;
0x0001d13c bl 0x26ad0 | g_value_unset ();
0x0001d140 cmp r4, r5 |
0x0001d142 bne 0x1d138 |
| } while (r4 != r5);
0x0001d144 b 0x1cc86 | goto label_7;
| label_25:
0x0001d146 ldr r5, [r7, 0x30] | r5 = var_30h;
0x0001d148 ldr r0, [r7, 0x58] | r0 = var_58h;
| label_24:
0x0001d14a cmp r0, 0 |
| if (r0 == 0) {
0x0001d14c beq 0x1d1ae | goto label_17;
| }
0x0001d14e ldr r3, [pc, 0x1ac] |
0x0001d150 add.w sl, r7, 0x58 | sl += var_58h;
0x0001d152 lsrs r0, r3, 9 | r0 = r3 >> 9;
0x0001d154 str r5, [r7, 0x2c] | var_2ch = r5;
0x0001d156 add r3, pc | r3 = 0x3a458;
0x0001d158 str r3, [r7, 0x30] | var_30h = r3;
| label_8:
0x0001d15a bl 0x231ac | g_type_parent ();
0x0001d15e ldr r3, [r7, 0x30] | r3 = var_30h;
0x0001d160 str r0, [r7, 0x58] | var_58h = r0;
0x0001d162 ldr.w r8, [r6] | r8 = *(r6);
0x0001d166 ldr r5, [r3, 0xc] | r5 = *((r3 + 0xc));
0x0001d168 ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0001d16a str r3, [r7, 0x34] | var_34h = r3;
0x0001d16c cmp.w r8, 0 |
| if (r8 == 0) {
0x0001d170 beq 0x1d1aa | goto label_32;
| }
0x0001d172 mov.w sb, 0 | sb = 0;
0x0001d176 b 0x1d184 |
| while (r0 != 0) {
0x0001d178 ite ge |
| if (r8 < 0) {
0x0001d17a addge sb, r4, 1 | sb = r4 + 1;
| }
| if (r8 < 0) {
0x0001d17e mov r8, r4 | r8 = r4;
| }
0x0001d180 cmp r8, sb |
| if (r8 < sb) {
0x0001d182 bls 0x1d1a8 | goto label_33;
| }
0x0001d184 add.w r4, r8, sb | r4 = r8 + sb;
0x0001d188 ldr r3, [r7, 0x34] | r3 = var_34h;
0x0001d18a lsrs r4, r4, 1 | r4 >>= 1;
0x0001d18c mov r0, sl | r0 = sl;
0x0001d18e mla fp, r4, r5, r6 | __asm ("mla fp, r4, r5, r6");
0x0001d192 add.w fp, fp, 8 |
0x0001d196 mov r1, fp | r1 = fp;
0x0001d198 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0001d19a cmp r0, 0 |
0x0001d19c bne 0x1d178 |
| }
0x0001d19e ldr.w r3, [fp] | r3 = *(fp);
0x0001d1a2 ldr r5, [r7, 0x2c] | r5 = var_2ch;
0x0001d1a4 str r3, [r7, 0x28] | var_28h = r3;
0x0001d1a6 b 0x1ccf8 | goto label_0;
| label_33:
0x0001d1a8 ldr r0, [r7, 0x58] | r0 = var_58h;
| label_32:
0x0001d1aa cmp r0, 0 |
| if (r0 != 0) {
0x0001d1ac bne 0x1d15a | goto label_8;
| }
| label_17:
0x0001d1ae ldr r3, [pc, 0x150] |
0x0001d1b0 movw r2, 0x8c1 | r2 = 0x8c1;
0x0001d1b2 lsls r1, r0, 0xb | r1 = r0 << 0xb;
0x0001d1b4 ldr r4, [pc, 0x14c] |
0x0001d1b6 ldr r1, [pc, 0x150] |
0x0001d1b8 ldr r0, [pc, 0x150] |
0x0001d1ba add r3, pc |
0x0001d1bc add r4, pc | r4 = 0x3a4c4;
0x0001d1be add.w r3, r3, 0x230 | r3 = 0x3a6f0;
0x0001d1c2 add r1, pc | r1 = 0x3a4d0;
0x0001d1c4 str r4, [sp] | *(sp) = r4;
0x0001d1c6 add r0, pc | r0 = 0x3a4d6;
0x0001d1c8 blx 0x9bf0 | g_array_new ();
| label_14:
0x0001d1cc ldr.w r4, [r7, 0xc0] | r4 = var_c0h;
0x0001d1d0 movs r1, 0x10 | r1 = 0x10;
0x0001d1d2 ldr r3, [pc, 0x13c] |
0x0001d1d4 ldr r2, [pc, 0x13c] |
0x0001d1d6 ldr r0, [pc, 0x140] |
0x0001d1d8 add r3, pc | r3 = 0x3a4ee;
0x0001d1da str r4, [sp] | *(sp) = r4;
0x0001d1dc add r2, pc | r2 = 0x3a4f4;
0x0001d1de add r0, pc | r0 = 0x3a4fc;
0x0001d1e0 blx 0x9e0c | g_mutex_lock ();
0x0001d1e4 b 0x1ce90 | goto label_4;
| label_20:
0x0001d1e6 ldr r5, [r7, 0x30] | r5 = var_30h;
0x0001d1e8 ldr r0, [r7, 0x58] | r0 = var_58h;
| label_19:
0x0001d1ea cmp r0, 0 |
| if (r0 == 0) {
0x0001d1ec beq.w 0x1ce90 | goto label_4;
| }
0x0001d1f0 ldr r3, [pc, 0x128] |
0x0001d1f2 add.w sl, r7, 0x58 | sl += var_58h;
0x0001d1f6 str r5, [r7, 0x2c] | var_2ch = r5;
0x0001d1f8 add r3, pc | r3 = 0x3a518;
0x0001d1fa str r3, [r7, 0x30] | var_30h = r3;
| label_10:
0x0001d1fc bl 0x231ac | g_type_parent ();
0x0001d200 ldr r3, [r7, 0x30] | r3 = var_30h;
0x0001d202 str r0, [r7, 0x58] | var_58h = r0;
0x0001d204 ldr.w r8, [r6] | r8 = *(r6);
0x0001d208 ldr r5, [r3, 0xc] | r5 = *((r3 + 0xc));
0x0001d20a ldr r3, [r3, 0x10] | r3 = *((r3 + 0x10));
0x0001d20c str r3, [r7, 0x34] | var_34h = r3;
0x0001d20e cmp.w r8, 0 |
| if (r8 == 0) {
0x0001d212 beq 0x1d24c | goto label_34;
| }
0x0001d214 mov.w sb, 0 | sb = 0;
0x0001d218 b 0x1d226 |
| while (r0 != 0) {
0x0001d21a ite ge |
| if (r8 < 0) {
0x0001d21c addge sb, r4, 1 | sb = r4 + 1;
| }
| if (r8 < 0) {
0x0001d220 mov r8, r4 | r8 = r4;
| }
0x0001d222 cmp sb, r8 |
| if (sb >= r8) {
0x0001d224 bhs 0x1d24a | goto label_35;
| }
0x0001d226 add.w r4, r8, sb | r4 = r8 + sb;
0x0001d22a ldr r3, [r7, 0x34] | r3 = var_34h;
0x0001d22c lsrs r4, r4, 1 | r4 >>= 1;
0x0001d22e mov r0, sl | r0 = sl;
0x0001d230 mla fp, r4, r5, r6 | __asm ("mla fp, r4, r5, r6");
0x0001d234 add.w fp, fp, 8 |
0x0001d238 mov r1, fp | r1 = fp;
0x0001d23a blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0001d23c cmp r0, 0 |
0x0001d23e bne 0x1d21a |
| }
0x0001d240 ldr.w r3, [fp] | r3 = *(fp);
0x0001d244 ldr r5, [r7, 0x2c] | r5 = var_2ch;
0x0001d246 str r3, [r7, 0x20] | var_20h = r3;
0x0001d248 b 0x1cd82 | goto label_9;
| label_35:
0x0001d24a ldr r0, [r7, 0x58] | r0 = var_58h;
| label_34:
0x0001d24c cmp r0, 0 |
| if (r0 != 0) {
0x0001d24e bne 0x1d1fc | goto label_10;
| }
0x0001d250 b 0x1ce90 | goto label_4;
| label_27:
0x0001d252 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0001d256 mov r1, r4 | r1 = r4;
0x0001d258 ldr r2, [r7, 0xc] | r2 = var_ch;
0x0001d25a ldr r0, [r7, 4] | r0 = var_4h_2;
0x0001d25c ldr r3, [r7, 0x1c] | r3 = var_1ch;
0x0001d25e bl 0xe400 | g_closure_invoke ();
0x0001d262 b 0x1d0a8 | goto label_11;
| label_29:
0x0001d264 ldr r3, [pc, 0xb8] |
0x0001d266 movs r4, 0 | r4 = 0;
0x0001d268 ldr r1, [pc, 0xb8] |
0x0001d26a movw r2, 0x91c | r2 = 0x91c;
0x0001d26c asrs r4, r3, 8 | r4 = r3 >> 8;
0x0001d26e ldr r0, [pc, 0xb8] |
0x0001d270 add r3, pc |
0x0001d272 str r4, [sp] | *(sp) = r4;
0x0001d274 add r1, pc | r1 = 0x3a59c;
0x0001d276 add.w r3, r3, 0x230 | r3 = 0x3a7c4;
0x0001d27a add r0, pc | r0 = 0x3a5a8;
0x0001d27c blx 0x9bf0 | g_array_new ();
| label_30:
0x0001d280 mov r0, r6 | r0 = r6;
0x0001d282 bl 0x26ad0 | g_value_unset ();
0x0001d286 b 0x1d0a8 | goto label_11;
| label_28:
0x0001d288 mov r1, r3 | r1 = r3;
0x0001d28a b 0x1d07a | goto label_12;
| do {
0x000235e8 ldrb r3, [r4, 0xe] | r3 = *((r4 + 0xe));
0x000235ea lsls r3, r3, 0x1e | r3 <<= 0x1e;
| if (r3 >= r3) {
0x000235ec bpl 0x23642 | goto label_36;
| }
0x000235ee ldr r3, [r4, 4] | r3 = *((r4 + 4));
| if (r3 != 0) {
0x000235f0 cbnz r3, 0x23642 | goto label_36;
| }
0x000235f2 ldr r0, [pc, 0x68] |
0x000235f4 str r1, [sp, 4] | var_4h = r1;
0x000235f6 add r0, pc | r0 = 0x46c58;
0x000235f8 blx 0x9c5c | g_slist_prepend ();
0x000235fc ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
| if (r3 != 0) {
0x000235fe cbz r3, 0x23624 |
0x00023600 ldr r3, [r4, 0x28] | r3 = *((r4 + 0x28));
0x00023602 ldr r1, [sp, 4] | r1 = var_4h;
0x00023604 str r3, [r1] | *(r1) = r3;
0x00023606 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00023608 blx 0x9fd0 | fcn_00009fd0 ();
0x0002360c ldr r1, [sp, 4] | r1 = var_4h;
0x0002360e str r0, [r1, 4] | *((r1 + 4)) = r0;
0x00023610 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00023612 ldrh r3, [r3, 4] | r3 = *((r3 + 4));
0x00023614 str r3, [r1, 8] | *((r1 + 8)) = r3;
0x00023616 ldrb r3, [r4, 0xe] | r3 = *((r4 + 0xe));
0x00023618 ands r3, r3, 4 | r3 &= 4;
0x0002361c itt ne |
| if (r3 == r3) {
0x0002361e ldrne r3, [r4, 0x14] | r3 = *((r4 + 0x14));
| }
| if (r3 != r3) {
0x00023620 ldrhne r3, [r3, 0x24] | __asm ("ldrhne r3, [r3, 0x24]");
| }
0x00023622 str r3, [r1, 0xc] | *((r1 + 0xc)) = r3;
| }
0x00023624 ldr r0, [pc, 0x38] |
0x00023626 add r0, pc | r0 = 0x46c8a;
0x00023628 add sp, 8 |
0x0002362a pop.w {r4, lr} |
0x0002362e b.w 0x9ddc | void (*0x9ddc)() ();
0x00023636 movs r3, r0 | r3 = r0;
0x00023638 add r3, pc | r3 += pc;
0x0002363a add r3, r0 | r3 += r0;
0x0002363c ldr r4, [r3, 0xc] | r4 = *((r3 + 0xc));
0x0002363e cmp r4, 0 |
0x00023640 bne 0x235e8 |
| } while (r4 != 0);
| label_36:
0x00023642 add sp, 8 |
0x00023644 pop {r4, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x1e598 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.g_signal_emit_valist () | void g_signal_emit_valist (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_0h_3;
| int16_t var_8h;
| int32_t var_4h;
| int32_t var_8h_2;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_24h;
| int16_t var_28h;
| int32_t var_28h_2;
| int32_t var_30h;
| int32_t var_30h_2;
| int32_t var_38h;
| int32_t var_38h_2;
| int16_t var_40h;
| int32_t var_40h_2;
| int32_t var_48h;
| int32_t var_48h_2;
| int32_t var_50h;
| int32_t var_50h_2;
| int16_t var_58h;
| int32_t var_58h_2;
| int32_t var_60h;
| int32_t var_60h_2;
| int32_t var_68h;
| int32_t var_68h_2;
| int32_t var_70h;
| int16_t var_78h;
| int16_t var_0h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0001e598 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001e59c sub sp, 0xc4 |
0x0001e59e add r7, sp, 8 | r7 += var_8h;
0x0001e5a0 mov sl, r3 | sl = r3;
0x0001e5a2 mov r5, r1 | r5 = r1;
0x0001e5a4 str r0, [r7, 0x1c] | var_1ch = r0;
0x0001e5a6 str r2, [r7, 0x18] | var_18h = r2;
0x0001e5a8 bl 0x24e2c | r0 = g_type_check_instance ();
| if (r0 == 0) {
0x0001e5ac cbnz r0, 0x1e5d0 |
0x0001e5ae ldr.w r1, [pc, 0x918] |
0x0001e5b2 ldr.w r2, [pc, 0x918] |
0x0001e5b6 ldr.w r0, [pc, 0x918] |
0x0001e5ba add r1, pc |
0x0001e5bc add r2, pc | r2 = 0x3d48e;
0x0001e5be add.w r1, r1, 0x3bc | r1 = 0x3d844;
0x0001e5c2 add r0, pc | r0 = 0x3d498;
0x0001e5c4 blx 0x9c0c | fcn_00009c0c ();
| label_6:
0x0001e5c8 adds r7, 0xbc | r7 += 0xbc;
0x0001e5ca mov sp, r7 |
0x0001e5cc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x0001e5d0 cmp r5, 0 |
| if (r5 == 0) {
0x0001e5d2 beq.w 0x1e87a | goto label_28;
| }
0x0001e5d6 ldr.w r6, [pc, 0x8fc] |
0x0001e5da add r6, pc | r6 = 0x3d4b4;
0x0001e5dc mov r0, r6 | r0 = r6;
0x0001e5de blx 0x9e5c | fcn_00009e5c ();
0x0001e5e0 ldc p9, c6, [lr], -0x2cc | __asm ("ldc p9, c6, [lr], -0x2cc");
0x0001e5e4 cmp r5, r3 |
| if (r5 >= r3) {
0x0001e5e6 bhs.w 0x1e84a | goto label_29;
| }
0x0001e5e8 strh r0, [r6, 8] | *((r6 + 8)) = r0;
0x0001e5ea ldr r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
0x0001e5ec ldr.w r8, [r3, r5, lsl 2] | offset_0 = r5 << 2;
| r8 = *((r3 + offset_0));
0x0001e5ee strh r5, [r4] | *(r4) = r5;
0x0001e5f0 cmp.w r8, 0 |
| if (r8 == 0) {
0x0001e5f4 beq.w 0x1e84a | goto label_29;
| }
0x0001e5f8 ldr r3, [r7, 0x1c] | r3 = var_1ch;
0x0001e5fa ldr.w r1, [r8, 4] | r1 = *((r8 + 4));
0x0001e5fe ldr r3, [r3] | r3 = *(r3);
0x0001e600 ldr r0, [r3] | r0 = *(r3);
0x0001e602 bl 0x23254 | r0 = g_type_is_a ();
0x0001e606 cmp r0, 0 |
| if (r0 == 0) {
0x0001e608 beq.w 0x1e84a | goto label_29;
| }
0x0001e60c ldr r3, [r7, 0x18] | r3 = var_18h;
0x0001e60e mov r4, sl | r4 = sl;
| if (r3 != 0) {
0x0001e610 cbz r3, 0x1e620 |
0x0001e612 ldrh.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x0001e616 ubfx r3, r3, 1, 9 | r3 = (r3 >> 1) & ((1 << 9) - 1);
0x0001e61a lsls r1, r3, 0x1b | r1 = r3 << 0x1b;
| if (r1 >= r3) {
0x0001e61c bpl.w 0x1ec24 | goto label_30;
| }
| }
0x0001e620 ldrb.w r3, [r8, 0xe] | r3 = *((r8 + 0xe));
0x0001e624 lsls r2, r3, 0x1d | r2 = r3 << 0x1d;
| if (r2 >= r3) {
0x0001e626 bpl.w 0x1e89c | goto label_31;
| }
0x0001e62a ldr.w r0, [r8, 0x2c] | r0 = *((r8 + 0x2c));
0x0001e62e cmp r0, 0 |
| if (r0 == 0) {
0x0001e630 beq.w 0x1e99c | goto label_22;
| }
0x0001e634 cmp r0, 1 |
| if (r0 != 1) {
0x0001e636 beq 0x1e644 |
0x0001e638 ldr r1, [r7, 0x1c] | r1 = var_1ch;
0x0001e63a bl 0xe880 | r0 = fcn_0000e880 (r0, r1);
0x0001e63e cmp r0, 0 |
| if (r0 == 0) {
0x0001e640 beq.w 0x1eda8 | goto label_32;
| }
| }
0x0001e644 ldr r0, [r7, 0x1c] | r0 = var_1ch;
0x0001e646 bl 0x124f0 | r0 = fcn_000124f0 ();
0x0001e64a cmp r0, 0 |
| if (r0 != 0) {
0x0001e64c bne.w 0x1e8a4 | goto label_33;
| }
0x0001e650 ldr.w r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x0001e654 cmp r3, 4 |
| if (r3 == 4) {
0x0001e656 beq.w 0x1ee70 | goto label_34;
| }
0x0001e65a movs r5, 1 | r5 = 1;
0x0001e65c str r0, [r7, 0x20] | var_20h = r0;
0x0001e65e str r0, [r7, 0x24] | var_24h = r0;
| label_2:
0x0001e660 ldr r6, [r7, 0x1c] | r6 = var_1ch;
0x0001e662 movs r3, 0 | r3 = 0;
0x0001e664 strd r3, r3, [r7, 0x30] | __asm ("strd r3, r3, [var_30h]");
0x0001e668 add.w ip, r7, 0x40 |
0x0001e66c strd r3, r3, [r7, 0x38] | __asm ("strd r3, r3, [var_38h]");
0x0001e670 orr r5, r5, 0x20000 | r5 |= 0x20000;
0x0001e674 ldr r2, [r6] | r2 = *(r6);
0x0001e676 add.w sb, r7, 0x28 | sb += var_28h;
0x0001e67a strd r3, r3, [r7, 0x28] | __asm ("strd r3, r3, [var_28h]");
0x0001e67e ldr.w r0, [pc, 0x858] |
0x0001e682 ldr r1, [r2] | r1 = *(r2);
0x0001e684 strd r3, r3, [r7, 0x48] | __asm ("strd r3, r3, [var_48h]");
0x0001e686 adds r3, 0x12 | r3 += 0x12;
0x0001e688 strd r3, r3, [r7, 0x50] | __asm ("strd r3, r3, [var_50h]");
0x0001e68c add r0, pc | r0 = 0x3d56a;
0x0001e68e strd r3, r3, [r7, 0x40] | __asm ("strd r3, r3, [var_40h]");
0x0001e692 ldr.w r2, [r8, 0x14] | r2 = *((r8 + 0x14));
0x0001e696 str.w ip, [r7, 0x14] | __asm ("str.w ip, [var_14h]");
0x0001e69a str r2, [r7, 8] | var_8h_2 = r2;
0x0001e69c ldr.w r2, [r8] | r2 = *(r8);
0x0001e6a0 str r2, [r7, 0xc] | var_ch = r2;
0x0001e6a2 ldr r2, [r7, 8] | r2 = var_8h_2;
0x0001e6a4 bic fp, r2, 1 | fp = BIT_MASK (r2, 1);
0x0001e6a6 lsrs r1, r0, 0xc | r1 = r0 >> 0xc;
0x0001e6a8 ldr.w r2, [r8, 0x1c] | r2 = *((r8 + 0x1c));
0x0001e6ac cmp.w fp, 4 |
0x0001e6b0 str r2, [r7, 0x10] | var_10h = r2;
0x0001e6b2 ldr r2, [r0, 0x20] | r2 = *(0x3d58a);
| if (fp == 4) {
0x0001e6b4 beq.w 0x1ec56 | goto label_35;
| }
0x0001e6b8 ldr r3, [r7, 0x18] | r3 = var_18h;
0x0001e6ba strd r2, r6, [r7, 0x58] | __asm ("strd r2, r6, [var_58h]");
0x0001e6be add.w r6, r7, 0x58 | r6 += var_58h;
0x0001e6c2 ldr r2, [r7, 0x10] | r2 = var_10h;
0x0001e6c4 strd r3, r5, [r7, 0x64] | __asm ("strd r3, r5, [var_60h_2]");
0x0001e6c8 mov r5, ip | r5 = ip;
0x0001e6ca ldr r3, [r7, 0xc] | r3 = var_ch;
0x0001e6cc cmp r2, 0 |
0x0001e6ce it ne |
| if (r2 == 0) {
0x0001e6d0 movne r5, sb | r5 = sb;
| }
0x0001e6d2 str r1, [r7, 0x70] | var_70h = r1;
0x0001e6d4 str r6, [r0, 0x20] | *((r0 + 0x20)) = r6;
0x0001e6d6 str r3, [r7, 0x60] | var_60h = r3;
0x0001e6d8 movs r3, 1 | r3 = 1;
0x0001e6da str r3, [r7, 0x6c] | var_68h_2 = r3;
0x0001e6dc ldr r3, [r7, 0x20] | r3 = var_20h;
0x0001e6de cmp r3, 0 |
| if (r3 == 0) {
0x0001e6e0 beq.w 0x1ee20 | goto label_36;
| }
| label_10:
0x0001e6e4 ldr r3, [r7, 0x20] | r3 = var_20h;
0x0001e6e6 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0001e6e8 cmp r3, 0 |
| if (r3 != 0) {
0x0001e6ea bne.w 0x1ee2e | goto label_37;
| }
0x0001e6ee ldr.w r1, [pc, 0x7ec] |
0x0001e6f2 ldr.w r2, [pc, 0x7ec] |
0x0001e6f6 ldr.w r0, [pc, 0x7ec] |
0x0001e6fa add r1, pc | r1 = 0x3d5dc;
0x0001e6fc adds r1, 0x5c | r1 += 0x5c;
0x0001e6fe add r2, pc | r2 = 0x3d5e4;
0x0001e700 add r0, pc | r0 = 0x3d5ea;
0x0001e702 blx 0x9c0c | fcn_00009c0c ();
| label_21:
0x0001e706 ldr.w r0, [pc, 0x7e0] |
0x0001e70a add r0, pc | r0 = 0x3d5f8;
0x0001e70c blx 0x9ad8 | fcn_00009ad8 ();
0x0001e710 cmp.w fp, 4 |
| if (fp != 4) {
0x0001e714 bne.w 0x1ee24 | goto label_38;
| }
| label_11:
0x0001e718 ldr r3, [r7, 0x10] | r3 = var_10h;
0x0001e71a cmp r3, 0 |
| if (r3 == 0) {
0x0001e71c beq.w 0x1edde | goto label_39;
| }
0x0001e720 mov r1, fp | r1 = fp;
0x0001e722 mov r0, sb | r0 = sb;
0x0001e724 bl 0x2698c | g_value_init ();
0x0001e728 ldr r3, [r7, 0x24] | r3 = var_24h;
| if (r3 != 0) {
0x0001e72a cbz r3, 0x1e76c |
0x0001e72c ldr r0, [r7, 0x1c] | r0 = var_1ch;
0x0001e72e bl 0x11308 | g_object_ref ();
0x0001e732 ldr.w r2, [r8, 0xc] | r2 = *((r8 + 0xc));
0x0001e736 mov r1, r5 | r1 = r5;
0x0001e738 ldr.w r0, [r8, 0x10] | r0 = *((r8 + 0x10));
0x0001e73c mov r3, sl | r3 = sl;
0x0001e73e ubfx r2, r2, 0xa, 8 | r2 = (r2 >> 0xa) & ((1 << 8) - 1);
0x0001e742 strd r2, r0, [sp] | __asm ("strd r2, r0, [sp]");
0x0001e746 ldr r2, [r7, 0x1c] | r2 = var_1ch;
0x0001e748 ldr r0, [r7, 0x24] | r0 = var_24h;
0x0001e74a bl 0xe580 | fcn_0000e580 (r0, r1, r2, r3, r4);
0x0001e74e ldr r0, [r7, 0x10] | r0 = var_10h;
0x0001e750 mov r2, sb | r2 = sb;
0x0001e752 ldr r1, [r7, 0x14] | r1 = var_14h;
0x0001e754 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x0001e756 ldr r5, [r0] | r5 = *(r0);
0x0001e758 add.w r0, r7, 0x60 | r0 += var_60h;
0x0001e75c blx r5 | uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0001e75e mov r0, sb | r0 = sb;
0x0001e760 bl 0x26a54 | g_value_reset ();
0x0001e764 ldr r3, [r7, 0x68] | r3 = var_68h;
0x0001e766 bic r3, r3, 0x20000 | r3 = BIT_MASK (r3, 0x20000);
0x0001e76a str r3, [r7, 0x68] | var_68h = r3;
| }
| label_19:
0x0001e76c ldr.w r5, [pc, 0x77c] |
0x0001e770 add r5, pc | r5 = 0x3d660;
0x0001e772 mov r0, r5 | r0 = r5;
0x0001e774 blx 0x9e5c | fcn_00009e5c ();
0x0001e778 ldr r3, [r5, 0x20] | r3 = *(0x3d680);
0x0001e77a movs r2, 4 | r2 = 4;
0x0001e77c str r2, [r7, 0x70] | var_70h = r2;
0x0001e77e cmp r3, 0 |
| if (r3 == 0) {
0x0001e780 beq.w 0x1eea2 | goto label_40;
| }
0x0001e784 cmp r3, r6 |
| if (r3 == r6) {
0x0001e786 beq.w 0x1ee62 | goto label_41;
| }
| do {
0x0001e78a mov r2, r3 | r2 = r3;
0x0001e78c ldr r3, [r3] | r3 = *(r3);
0x0001e78e cmp r3, 0 |
| if (r3 == 0) {
0x0001e790 beq.w 0x1eea2 | goto label_40;
| }
0x0001e794 cmp r3, r6 |
0x0001e796 bne 0x1e78a |
| } while (r3 != r6);
0x0001e798 ldr r3, [r7, 0x58] | r3 = var_58h;
0x0001e79a str r3, [r2] | *(r2) = r3;
| label_24:
0x0001e79c ldr r3, [r7, 0x20] | r3 = var_20h;
| if (r3 != 0) {
0x0001e79e cbz r3, 0x1e7c2 |
0x0001e7a0 ldr r3, [r7, 0x20] | r3 = var_20h;
0x0001e7a2 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x0001e7a4 cmp r3, 0 |
| if (r3 != 0) {
0x0001e7a6 bne.w 0x1ee0a | goto label_42;
| }
0x0001e7a8 strh r0, [r6, 0x18] | *((r6 + 0x18)) = r0;
0x0001e7aa ldr.w r1, [pc, 0x744] |
0x0001e7ae ldr.w r2, [pc, 0x744] |
0x0001e7b2 ldr.w r0, [pc, 0x744] |
0x0001e7b6 add r1, pc | r1 = 0x3d6ac;
0x0001e7b8 adds r1, 0x68 | r1 += 0x68;
0x0001e7ba add r2, pc | r2 = 0x3d6b4;
0x0001e7bc add r0, pc | r0 = 0x3d6ba;
0x0001e7be blx 0x9c0c | fcn_00009c0c ();
| }
| label_20:
0x0001e7c2 ldr.w r0, [pc, 0x738] |
0x0001e7c6 add r0, pc | r0 = 0x3d6c8;
0x0001e7c8 blx 0x9ad8 | fcn_00009ad8 ();
0x0001e7cc ldr r3, [r7, 0x10] | r3 = var_10h;
| if (r3 != 0) {
0x0001e7ce cbz r3, 0x1e7d6 |
0x0001e7d0 mov r0, sb | r0 = sb;
0x0001e7d2 bl 0x26ad0 | g_value_unset ();
| }
0x0001e7d6 cmp.w fp, 4 |
| if (fp == 4) {
0x0001e7da beq.w 0x1ed6e | goto label_25;
| }
0x0001e7de ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x0001e7e2 tst.w r3, 0x3fc00 |
| if ((r3 & 0x3fc00) == 0) {
0x0001e7e6 beq.w 0x1eccc | goto label_43;
| }
0x0001e7ea mov.w sb, 0 | sb = 0;
0x0001e7ee movs r5, 1 | r5 = 1;
0x0001e7f0 movw r6, 0x2001 | r6 = 0x2001;
| label_15:
0x0001e7f4 ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x0001e7f8 ldr.w r0, [r3, sb, lsl 2] | offset_1 = sb << 2;
| r0 = *((r3 + offset_1));
0x0001e7fc bic r0, r0, 1 | r0 = BIT_MASK (r0, 1);
0x0001e800 bl 0x25228 | g_type_value_table_peek ();
0x0001e804 ldr r2, [r0, 0x10] | r2 = *((r0 + 0x10));
0x0001e806 ldrb r3, [r2] | r3 = *(r2);
0x0001e808 cmp r3, 0 |
| if (r3 == 0) {
0x0001e80a beq.w 0x1ecba | goto label_44;
| }
| label_14:
0x0001e80e subs r3, 0x64 | r3 -= 0x64;
0x0001e810 uxtb r3, r3 | r3 = (int8_t) r3;
0x0001e812 cmp r3, 0xd |
| if (r3 <= 0xd) {
0x0001e814 bhi 0x1e828 |
0x0001e816 lsl.w r3, r5, r3 | r3 = r5 << r3;
0x0001e81a tst.w r3, 0x1120 |
| if ((r3 & 0x1120) != 0) {
0x0001e81e bne.w 0x1ecae | goto label_45;
| }
0x0001e822 tst r3, r6 |
| if ((r3 & r6) != 0) {
0x0001e824 bne.w 0x1ed9e | goto label_46;
| }
| }
0x0001e828 ldr.w r3, [pc, 0x6d4] |
0x0001e82c movs r4, 0 | r4 = 0;
0x0001e82e ldr.w r1, [pc, 0x6d4] |
0x0001e830 asrs r4, r2, 0x1b | r4 = r2 >> 0x1b;
0x0001e832 movw r2, 0xd6a | r2 = 0xd6a;
0x0001e834 strh r2, [r5, r1] | *((r5 + r1)) = r2;
0x0001e836 ldr.w r0, [pc, 0x6d0] |
0x0001e83a add r3, pc |
0x0001e83c str r4, [sp] | *(sp) = r4;
0x0001e83e add r1, pc | r1 = 0x3d748;
0x0001e840 add.w r3, r3, 0x3bc | r3 = 0x3dafa;
0x0001e844 add r0, pc | r0 = 0x3d752;
0x0001e846 blx 0x9bf0 | g_array_new ();
| label_29:
0x0001e84a ldr r4, [r7, 0x1c] | r4 = var_1ch;
0x0001e84c movs r1, 0x10 | r1 = 0x10;
0x0001e84e ldr.w r3, [pc, 0x6bc] |
0x0001e852 ldr.w r2, [pc, 0x6bc] |
0x0001e856 ldr.w r0, [pc, 0x6bc] |
0x0001e85a add r3, pc | r3 = 0x3d76c;
0x0001e85c strd r5, r4, [sp] | __asm ("strd r5, r4, [sp]");
0x0001e860 add r2, pc | r2 = 0x3d776;
0x0001e862 add r0, pc | r0 = 0x3d77c;
0x0001e864 blx 0x9e0c | g_mutex_lock ();
0x0001e868 ldr.w r0, [pc, 0x6ac] |
0x0001e86c add r0, pc | r0 = 0x3d788;
0x0001e86e blx 0x9ad8 | fcn_00009ad8 ();
0x0001e872 adds r7, 0xbc | r7 += 0xbc;
0x0001e874 mov sp, r7 |
0x0001e876 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_28:
0x0001e87a ldr.w r1, [pc, 0x6a0] |
0x0001e87e ldr.w r2, [pc, 0x6a0] |
0x0001e882 ldr.w r0, [pc, 0x6a0] |
0x0001e884 lsls r0, r4, 0x1a | r0 = r4 << 0x1a;
0x0001e886 add r1, pc |
0x0001e888 add r2, pc | r2 = 0x3d7ae;
0x0001e88a add.w r1, r1, 0x3bc | r1 = 0x3db64;
0x0001e88e add r0, pc | r0 = 0x3d7b8;
0x0001e890 blx 0x9c0c | fcn_00009c0c ();
0x0001e894 adds r7, 0xbc | r7 += 0xbc;
0x0001e896 mov sp, r7 |
0x0001e898 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_31:
0x0001e89c mov r0, r8 | r0 = r8;
0x0001e89e bl 0x194f8 | fcn_000194f8 (r0);
0x0001e8a0 cdp2 p6, 2, c14, c11, c2, 6 | __asm ("cdp2 p6, 2, c14, c11, c2, 6");
| label_33:
0x0001e8a4 movs r3, 1 | r3 = 1;
0x0001e8a6 movs r2, 0 | r2 = 0;
0x0001e8a8 mov r5, r3 | r5 = r3;
0x0001e8aa str r3, [r7, 0xc] | var_ch = r3;
0x0001e8ac str r2, [r7, 0x24] | var_24h = r2;
0x0001e8ae str r3, [r7, 0x10] | var_10h = r3;
| label_23:
0x0001e8b0 ldr.w r3, [pc, 0x674] |
0x0001e8b4 ldr.w r6, [r8] | r6 = *(r8);
0x0001e8b8 ldr r1, [r7, 0x1c] | r1 = var_1ch;
0x0001e8ba add r3, pc | r3 = 0x3d7e6;
0x0001e8bc ldr r0, [r3, 8] | r0 = *(0x3d7ee);
0x0001e8be blx 0x9b94 | fcn_00009b94 ();
0x0001e8c2 str r6, [r7, 0x78] | var_78h = r6;
0x0001e8c4 str r0, [r7, 0x20] | var_20h = r0;
0x0001e8c6 cmp r0, 0 |
| if (r0 == 0) {
0x0001e8c8 beq.w 0x1ec8c | goto label_47;
| }
0x0001e8ca strh r0, [r4, 0xe] | *((r4 + 0xe)) = r0;
0x0001e8cc ldr.w r3, [pc, 0x65c] |
0x0001e8d0 ldr r2, [r0] | r2 = *(r0);
0x0001e8d2 add r3, pc |
0x0001e8d4 ldr r1, [r3] | r1 = *(0x3d802);
0x0001e8d6 ldr r3, [r3, 4] | r3 = *(0x3d806);
0x0001e8d8 str r1, [r7, 0x14] | var_14h = r1;
0x0001e8da cmp r2, 0 |
| if (r2 == 0) {
0x0001e8dc beq.w 0x1ee42 | goto label_48;
| }
0x0001e8e0 str.w r8, [r7] | __asm ("str.w r8, [r7]");
0x0001e8e4 mov.w sb, 0 | sb = 0;
0x0001e8e8 ldr.w r8, [r7, 0x20] | r8 = var_20h;
0x0001e8ec add.w fp, r7, 0x78 |
0x0001e8f0 str.w sl, [r7, 0x20] | __asm ("str.w sl, [var_20h]");
0x0001e8f4 mov r6, r3 | r6 = r3;
0x0001e8f6 mov sl, r2 | sl = r2;
0x0001e8f8 strd r4, r5, [r7, 4] | __asm ("strd r4, r5, [var_8h_2]");
0x0001e8fc b 0x1e90c |
| while (r0 != 0) {
0x0001e8fe ite ge |
| if (r2 < 0) {
0x0001e900 addge sb, r4, 1 | sb = r4 + 1;
| }
| if (r2 < 0) {
0x0001e904 mov sl, r4 | sl = r4;
| }
0x0001e906 cmp sb, sl |
| if (sb >= sl) {
0x0001e908 bhs.w 0x1ee36 | goto label_49;
| }
0x0001e90c ldr r3, [r7, 0x14] | r3 = var_14h;
0x0001e90e add.w r4, sl, sb | r4 = sl + sb;
0x0001e910 lsls r1, r1, 0x10 | r1 <<= 0x10;
0x0001e912 lsrs r4, r4, 1 | r4 >>= 1;
0x0001e914 mov r0, fp | r0 = fp;
0x0001e916 mla r1, r4, r3, r8 | __asm ("mla r1, r4, r3, r8");
0x0001e91a add.w r5, r1, 8 | r5 = r1 + 8;
0x0001e91e mov r1, r5 | r1 = r5;
0x0001e920 blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0001e922 cmp r0, 0 |
0x0001e924 bne 0x1e8fe |
| }
0x0001e926 mov r1, r5 | r1 = r5;
0x0001e928 ldr r3, [r7, 0xc] | r3 = var_ch;
0x0001e92a ldr r6, [r1, 4] | r6 = *((r1 + 4));
0x0001e92c ldrd r8, r4, [r7] | __asm ("ldrd r8, r4, [r7]");
0x0001e930 ldr r5, [r7, 8] | r5 = var_8h_2;
0x0001e932 cmp r6, 0 |
0x0001e934 ite eq |
| if (r6 != 0) {
0x0001e936 moveq r3, 0 | r3 = 0;
| }
| if (r6 == 0) {
0x0001e938 andne r3, r3, 1 | r3 &= 1;
| }
0x0001e93a lsls r1, r0, 0xc | r1 = r0 << 0xc;
0x0001e93c ldr.w sl, [r7, 0x20] | sl = var_20h;
0x0001e940 mov sb, r3 | sb = r3;
0x0001e942 str r0, [r7, 0x14] | var_14h = r0;
0x0001e944 cmp r3, 0 |
| if (r3 == 0) {
0x0001e946 beq.w 0x1eebc | goto label_50;
| }
0x0001e94a ldr r2, [r7, 0x24] | r2 = var_24h;
0x0001e94c mov r1, r0 | r1 = r0;
0x0001e94e ldr.w fp, [r7, 0x18] | fp = var_18h;
0x0001e952 b 0x1e970 | goto label_51;
| label_1:
0x0001e954 ldr r0, [r6, 0x1c] | r0 = *((r6 + 0x1c));
0x0001e956 bl 0xe53c | r0 = fcn_0000e53c (r0);
| if (r0 == 0) {
0x0001e95a cbz r0, 0x1e99c | goto label_22;
| }
0x0001e95c ldrb r3, [r6, 0x1a] | r3 = *((r6 + 0x1a));
0x0001e95e mov r1, r6 | r1 = r6;
0x0001e960 ldr r2, [r6, 0x1c] | r2 = *((r6 + 0x1c));
0x0001e962 and r3, r3, 1 | r3 &= 1;
0x0001e966 adds r5, r3, 1 | r5 = r3 + 1;
| do {
| label_0:
0x0001e968 ldr r6, [r6, 4] | r6 = *((r6 + 4));
0x0001e96a cmp r6, 0 |
| if (r6 == 0) {
0x0001e96c beq.w 0x1ec84 | goto label_52;
| }
| label_51:
0x0001e970 ldrh r3, [r6, 0x18] | r3 = *((r6 + 0x18));
0x0001e972 cmp r3, 0 |
0x0001e974 bne 0x1e968 |
| } while (r3 != 0);
0x0001e976 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0001e978 cmp r3, 0 |
0x0001e97a it ne |
| if (r3 == 0) {
0x0001e97c cmpne r3, fp | __asm ("cmpne r3, fp");
| goto label_53;
| }
| if (r3 != 0) {
| label_53:
0x0001e97e bne 0x1e968 | goto label_0;
| }
0x0001e980 cmp r2, 0 |
| if (r2 == 0) {
0x0001e982 beq 0x1e954 | goto label_1;
| }
0x0001e984 strd r1, r2, [r7, 0x20] | __asm ("strd r1, r2, [var_20h]");
| label_12:
0x0001e988 ldrh.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x0001e98c ubfx r3, r3, 1, 9 | r3 = (r3 >> 1) & ((1 << 9) - 1);
0x0001e990 lsls r3, r3, 0x1c | r3 <<= 0x1c;
| if (r3 < r3) {
0x0001e992 bmi 0x1e99c | goto label_22;
| }
| label_13:
0x0001e994 ldr r3, [r7, 0x14] | r3 = var_14h;
0x0001e996 cmp r3, 0 |
| if (r3 != 0) {
0x0001e998 bne.w 0x1e660 | goto label_2;
| }
| label_22:
0x0001e99c ldr.w r0, [pc, 0x590] |
0x0001e9a0 add r0, pc | r0 = 0x3d8d4;
0x0001e9a2 blx 0x9ad8 | fcn_00009ad8 ();
0x0001e9a6 ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x0001e9aa movs r1, 0 | r1 = 0;
0x0001e9ac ldr.w r2, [r8, 0x14] | r2 = *((r8 + 0x14));
0x0001e9b0 ubfx r3, r3, 0xa, 8 | r3 = (r3 >> 0xa) & ((1 << 8) - 1);
0x0001e9b4 str r2, [r7, 0x10] | var_10h = r2;
0x0001e9b6 adds r2, r3, 1 | r2 = r3 + 1;
0x0001e9b8 add.w r2, r2, r2, lsl 1 | r2 += (r2 << 1);
0x0001e9bc str r3, [r7, 0xc] | var_ch = r3;
0x0001e9be mov r3, sp | r3 = sp;
0x0001e9c0 sub.w r3, r3, r2, lsl 3 | r3 -= (r2 << 3);
0x0001e9c4 lsls r2, r2, 3 | r2 <<= 3;
0x0001e9c6 mov sp, r3 |
0x0001e9c8 add r3, sp, 8 | r3 += var_8h;
0x0001e9ca mov r0, r3 | r0 = r3;
0x0001e9cc mov r5, r3 | r5 = r3;
0x0001e9ce str r3, [r7, 0x14] | var_14h = r3;
0x0001e9d0 blx 0x9db8 | g_string_append_printf ();
0x0001e9d4 ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x0001e9d8 mov r2, r5 | r2 = r5;
0x0001e9da adds r2, 0x18 | r2 += 0x18;
0x0001e9dc str r2, [r7, 8] | var_8h_2 = r2;
0x0001e9de tst.w r3, 0x3fc00 |
| if ((r3 & 0x3fc00) == 0) {
0x0001e9e2 beq 0x1ea78 | goto label_54;
| }
0x0001e9e4 mov sl, r2 | sl = r2;
0x0001e9e6 mov.w sb, 0 | sb = 0;
0x0001e9ea add.w fp, r7, 0x78 |
| label_3:
0x0001e9ee ldr.w r3, [r8, 0x10] | r3 = *((r8 + 0x10));
0x0001e9f2 ldr.w r2, [r3, sb, lsl 2] | offset_2 = sb << 2;
| r2 = *((r3 + offset_2));
0x0001e9f6 bic r3, r2, 1 | r3 = BIT_MASK (r2, 1);
0x0001e9fa lsls r2, r2, 0x1b | r2 <<= 0x1b;
0x0001e9fc mov r0, r3 | r0 = r3;
0x0001e9fe str r3, [r7, 0x20] | var_20h = r3;
0x0001ea00 and r2, r2, 0x8000000 | r2 &= 0x8000000;
0x0001ea04 str r2, [r7, 0x24] | var_24h = r2;
0x0001ea06 bl 0x25228 | g_type_value_table_peek ();
0x0001ea0a movs r2, 0x40 | r2 = 0x40;
0x0001ea0c ldr r5, [r0, 0x10] | r5 = *((r0 + 0x10));
0x0001ea0e mov r6, r0 | r6 = r0;
0x0001ea10 movs r1, 0 | r1 = 0;
0x0001ea12 mov r0, fp | r0 = fp;
0x0001ea14 blx 0x9db8 | g_string_append_printf ();
0x0001ea18 ldr r3, [r7, 0x20] | r3 = var_20h;
0x0001ea1a str.w r3, [sl] | __asm ("str.w r3, [sl]");
0x0001ea1e ldrb r3, [r5] | r3 = *(r5);
0x0001ea20 cmp r3, 0 |
| if (r3 == 0) {
0x0001ea22 beq 0x1eb24 | goto label_55;
| }
0x0001ea24 mov r2, fp | r2 = fp;
0x0001ea26 rsb.w r0, r5, 1 | r0 = 1 - r5;
| do {
0x0001ea2a subs r3, 0x64 | r3 -= 0x64;
0x0001ea2c adds r1, r0, r5 | r1 = r0 + r5;
0x0001ea2e cmp r3, 0xd |
| if (r3 > 0xd) {
0x0001ea30 bhi.w 0x1eb6c | goto label_56;
| }
| /* switch table (14 cases) at 0x1ea38 */
0x0001ea34 tbb [pc, r3] | __asm ("tbb [0x0001ea3c]");
0x0001ea46 ldr r3, [r4], 4 | r3 = *(r4);
| r4 += 4;
0x0001ea4a str r3, [r2] | *(r2) = r3;
| label_4:
0x0001ea4c ldrb r3, [r5, 1]! | r3 = *((r5 += 1));
0x0001ea50 adds r2, 8 | r2 += 8;
0x0001ea52 cmp r3, 0 |
0x0001ea54 bne 0x1ea2a |
| } while (r3 != 0);
| label_5:
0x0001ea56 ldr r5, [r6, 0x14] | r5 = *((r6 + 0x14));
0x0001ea58 mov r2, fp | r2 = fp;
0x0001ea5a ldr r3, [r7, 0x24] | r3 = var_24h;
0x0001ea5c mov r0, sl | r0 = sl;
0x0001ea5e blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x0001ea60 cmp r0, 0 |
| if (r0 != 0) {
0x0001ea62 bne 0x1eb28 | goto label_57;
| }
0x0001ea64 ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x0001ea68 add.w sb, sb, 1 | sb++;
0x0001ea6c add.w sl, sl, 0x18 | sl += 0x18;
0x0001ea70 ubfx r3, r3, 0xa, 8 | r3 = (r3 >> 0xa) & ((1 << 8) - 1);
0x0001ea74 cmp r3, sb |
| if (r3 > sb) {
0x0001ea76 bhi 0x1e9ee | goto label_3;
| }
| label_54:
0x0001ea78 ldr r3, [r7, 0x14] | r3 = var_14h;
0x0001ea7a movs r5, 0 | r5 = 0;
0x0001ea7c ldr r1, [r7, 0x1c] | r1 = var_1ch;
0x0001ea7e mov r0, r3 | r0 = r3;
0x0001ea80 str r5, [r3] | *(r3) = r5;
0x0001ea82 bl 0x26c00 | g_value_init_from_instance ();
0x0001ea86 ldr r3, [r7, 0x10] | r3 = var_10h;
0x0001ea88 cmp r3, 4 |
| if (r3 == 4) {
0x0001ea8a beq.w 0x1ec44 | goto label_58;
| }
0x0001ea8e ldr r3, [r7, 0x10] | r3 = var_10h;
0x0001ea90 add.w r6, r7, 0x58 | r6 += var_58h;
0x0001ea94 mov r0, r6 | r0 = r6;
0x0001ea96 strd r5, r5, [r7, 0x58] | __asm ("strd r5, r5, [var_58h]");
0x0001ea9a strd r5, r5, [r7, 0x60] | __asm ("strd r5, r5, [var_60h]");
0x0001ea9e add.w fp, r7, 0x78 |
0x0001eaa0 lsrs r0, r7, 0xd | r0 = r7 >> 0xd;
0x0001eaa2 bic r1, r3, 1 | r1 = BIT_MASK (r3, 1);
0x0001eaa6 strd r5, r5, [r7, 0x68] | __asm ("strd r5, r5, [var_68h]");
0x0001eaaa bl 0x2698c | g_value_init ();
0x0001eaae ldr r3, [r7, 0x14] | r3 = var_14h;
0x0001eab0 mov r0, r8 | r0 = r8;
0x0001eab2 ldrd r1, r2, [r7, 0x18] | __asm ("ldrd r1, r2, [var_1ch]");
0x0001eab6 str r3, [sp] | *(sp) = r3;
0x0001eab8 mov r3, r6 | r3 = r6;
0x0001eaba bl 0x1a51c | fcn_0001a51c (r0, r1, r2, r3, r4, r5);
0x0001eabe ldr r3, [r7, 0x10] | r3 = var_10h;
0x0001eac0 ldr r0, [r7, 0x58] | r0 = var_58h;
0x0001eac2 lsl.w r8, r3, 0x1b | r8 = r3 << 0x1b;
0x0001eac6 bl 0x25228 | g_type_value_table_peek ();
0x0001eaca mov r1, r5 | r1 = r5;
0x0001eacc ldr r5, [r0, 0x18] | r5 = *((r0 + 0x18));
0x0001eace mov sb, r0 | sb = r0;
0x0001ead0 movs r2, 0x40 | r2 = 0x40;
0x0001ead2 mov r0, fp | r0 = fp;
0x0001ead4 and r8, r8, 0x8000000 | r8 &= 0x8000000;
0x0001ead8 blx 0x9db8 | g_string_append_printf ();
0x0001eadc ldrb r3, [r5] | r3 = *(r5);
0x0001eade cmp r3, 0 |
| if (r3 == 0) {
0x0001eae0 beq.w 0x1ee84 | goto label_59;
| }
0x0001eae4 mov r2, fp | r2 = fp;
0x0001eae6 rsb.w r0, r5, 1 | r0 = 1 - r5;
| label_7:
0x0001eaea subs r3, 0x64 | r3 -= 0x64;
0x0001eaec adds r1, r0, r5 | r1 = r0 + r5;
0x0001eaee cmp r3, 0xd |
| if (r3 > 0xd) {
0x0001eaf0 bhi 0x1eb88 | goto label_60;
| }
| /* switch table (13 cases) at 0x1eaf6 */
0x0001eaf2 tbb [pc, r3] | __asm ("tbb [0x0001eaf8]");
0x0001eb04 adds r4, 7 | r4 += 7;
0x0001eb06 bic r4, r4, 7 | r4 = BIT_MASK (r4, 7);
0x0001eb0a vldmia r4!, {d16} | __asm ("vldmia r4!, {d16}");
0x0001eb0e vstr d16, [r2] | __asm ("vstr d16, [r2]");
0x0001eb12 b 0x1ea4c | goto label_4;
0x0001eb14 adds r4, 7 | r4 += 7;
0x0001eb16 bic r4, r4, 7 | r4 = BIT_MASK (r4, 7);
0x0001eb1a vldmia r4!, {d16} | __asm ("vldmia r4!, {d16}");
0x0001eb1e vstr d16, [r2] | __asm ("vstr d16, [r2]");
0x0001eb22 b 0x1ea4c | goto label_4;
| label_55:
0x0001eb24 mov r1, r3 | r1 = r3;
0x0001eb26 b 0x1ea56 | goto label_5;
| label_57:
0x0001eb28 mov r5, r0 | r5 = r0;
0x0001eb2a str r0, [sp] | *(sp) = r0;
0x0001eb2c ldr.w r3, [pc, 0x404] |
0x0001eb30 movs r1, 0x10 | r1 = 0x10;
0x0001eb32 ldr.w r2, [pc, 0x404] |
0x0001eb36 ldr.w r0, [pc, 0x404] |
0x0001eb38 lsls r4, r0, 0x10 | r4 = r0 << 0x10;
0x0001eb3a add r3, pc | r3 = 0x3da72;
0x0001eb3c add r2, pc | r2 = 0x3da7a;
0x0001eb3e add r0, pc | r0 = 0x3da80;
0x0001eb40 blx 0x9e0c | g_mutex_lock ();
0x0001eb44 mov r0, r5 | r0 = r5;
0x0001eb46 blx 0x9ac8 | fcn_00009ac8 ();
0x0001eb4a cmp.w sb, 0 |
| if (sb == 0) {
0x0001eb4e beq.w 0x1e5c8 | goto label_6;
| }
0x0001eb52 ldr r4, [r7, 0x14] | r4 = var_14h;
0x0001eb54 add.w r8, sb, sb, lsl 1 | r8 = sb + (sb << 1);
0x0001eb56 lsrs r1, r1, 1 | r1 >>= 1;
0x0001eb58 add.w r8, r4, r8, lsl 3 | r8 = r4 + (r8 << 3);
| do {
0x0001eb5c mov r0, r8 | r0 = r8;
0x0001eb5e sub.w r8, r8, 0x18 | r8 -= 0x18;
0x0001eb62 bl 0x26ad0 | g_value_unset ();
0x0001eb66 cmp r4, r8 |
0x0001eb68 bne 0x1eb5c |
| } while (r4 != r8);
0x0001eb6a b 0x1e5c8 | goto label_6;
| label_56:
0x0001eb6c ldr r3, [pc, 0x3d0] |
0x0001eb6e movs r4, 0 | r4 = 0;
0x0001eb70 ldr r1, [pc, 0x3d0] |
0x0001eb72 movw r2, 0xd93 | r2 = 0xd93;
0x0001eb74 strh r3, [r2, r2] | *((r2 + r2)) = r3;
0x0001eb76 ldr r0, [pc, 0x3d0] |
0x0001eb78 add r3, pc |
0x0001eb7a str r4, [sp] | *(sp) = r4;
0x0001eb7c add r1, pc | r1 = 0x3dac4;
0x0001eb7e add.w r3, r3, 0x3bc | r3 = 0x3de78;
0x0001eb82 add r0, pc | r0 = 0x3dad0;
0x0001eb84 blx 0x9bf0 | g_array_new ();
| label_60:
0x0001eb88 ldr r3, [pc, 0x3c0] |
0x0001eb8a movs r4, 0 | r4 = 0;
0x0001eb8c ldr r1, [pc, 0x3c0] |
0x0001eb8e movw r2, 0xdb5 | r2 = 0xdb5;
0x0001eb92 ldr r0, [pc, 0x3c0] |
0x0001eb94 add r3, pc |
0x0001eb96 str r4, [sp] | *(sp) = r4;
0x0001eb98 add r1, pc | r1 = 0x3daec;
0x0001eb9a add.w r3, r3, 0x3bc | r3 = 0x3dea0;
0x0001eb9e add r0, pc | r0 = 0x3daf8;
0x0001eba0 blx 0x9bf0 | g_array_new ();
0x0001eba4 ldr r3, [r4], 4 | r3 = *(r4);
| r4 += 4;
0x0001eba8 str r3, [r2] | *(r2) = r3;
| label_8:
0x0001ebaa ldrb r3, [r5, 1]! | r3 = *((r5 += 1));
0x0001ebae adds r2, 8 | r2 += 8;
0x0001ebb0 cmp r3, 0 |
| if (r3 != 0) {
0x0001ebb2 bne 0x1eaea | goto label_7;
| }
| label_26:
0x0001ebb4 ldr.w r4, [sb, 0x1c] | r4 = *((sb + 0x1c));
0x0001ebb8 mov r3, r8 | r3 = r8;
0x0001ebba mov r2, fp | r2 = fp;
0x0001ebbc mov r0, r6 | r0 = r6;
0x0001ebbe blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x0001ebc0 mov r4, r0 | r4 = r0;
0x0001ebc2 cmp r0, 0 |
| if (r0 == 0) {
0x0001ebc4 beq.w 0x1ee68 | goto label_61;
| }
0x0001ebc8 str r0, [sp] | *(sp) = r0;
0x0001ebca movs r1, 0x10 | r1 = 0x10;
0x0001ebcc ldr r3, [pc, 0x388] |
0x0001ebce ldr r2, [pc, 0x38c] |
0x0001ebd0 ldr r0, [pc, 0x38c] |
0x0001ebd2 add r3, pc | r3 = 0x3db2e;
0x0001ebd4 add r2, pc | r2 = 0x3db36;
0x0001ebd6 add r0, pc | r0 = 0x3db3a;
0x0001ebd8 blx 0x9e0c | g_mutex_lock ();
0x0001ebdc mov r0, r4 | r0 = r4;
0x0001ebde blx 0x9ac8 | fcn_00009ac8 ();
| label_9:
0x0001ebe2 ldr r3, [r7, 0xc] | r3 = var_ch;
| if (r3 == 0) {
0x0001ebe4 cbz r3, 0x1ebfc | goto label_62;
| }
0x0001ebe6 ldr r5, [r7, 8] | r5 = var_8h_2;
0x0001ebe8 movs r4, 0 | r4 = 0;
0x0001ebea ldr r6, [r7, 0xc] | r6 = var_ch;
| do {
0x0001ebec mov r0, r5 | r0 = r5;
0x0001ebee adds r4, 1 | r4++;
0x0001ebf0 bl 0x26ad0 | g_value_unset ();
0x0001ebf4 cmp r6, r4 |
0x0001ebf6 add.w r5, r5, 0x18 | r5 += 0x18;
0x0001ebfa bne 0x1ebec |
| } while (r6 != r4);
| label_62:
0x0001ebfc ldr r0, [r7, 0x14] | r0 = var_14h;
0x0001ebfe bl 0x26ad0 | g_value_unset ();
0x0001ec02 b 0x1e5c8 | goto label_6;
0x0001ec14 adds r4, 7 | r4 += 7;
0x0001ec16 bic r4, r4, 7 | r4 = BIT_MASK (r4, 7);
0x0001ec1a vldmia r4!, {d16} | __asm ("vldmia r4!, {d16}");
0x0001ec1e vstr d16, [r2] | __asm ("vstr d16, [r2]");
0x0001ec22 b 0x1ebaa | goto label_8;
| label_30:
0x0001ec24 ldr r0, [r7, 0x18] | r0 = var_18h;
0x0001ec26 movs r1, 0x10 | r1 = 0x10;
0x0001ec28 ldr r3, [pc, 0x338] |
0x0001ec2a ldr r2, [pc, 0x33c] |
0x0001ec2c strd r5, r0, [sp] | __asm ("strd r5, r0, [sp]");
0x0001ec30 ldr r0, [pc, 0x338] |
0x0001ec32 add r3, pc | r3 = 0x3db9a;
0x0001ec34 add r2, pc | r2 = 0x3dba2;
0x0001ec36 add r0, pc | r0 = 0x3dba6;
0x0001ec38 blx 0x9e0c | g_mutex_lock ();
0x0001ec3c mov r0, r6 | r0 = r6;
0x0001ec3e blx 0x9ad8 | fcn_00009ad8 ();
0x0001ec42 b 0x1e5c8 | goto label_6;
| label_58:
0x0001ec44 ldr r4, [r7, 0x14] | r4 = var_14h;
0x0001ec46 mov r3, r5 | r3 = r5;
0x0001ec48 ldrd r1, r2, [r7, 0x18] | __asm ("ldrd r1, r2, [var_1ch]");
0x0001ec4c mov r0, r8 | r0 = r8;
0x0001ec4e str r4, [sp] | *(sp) = r4;
0x0001ec50 bl 0x1a51c | fcn_0001a51c (r0, r1, r2, r3, r4, r5);
0x0001ec54 b 0x1ebe2 | goto label_9;
| label_35:
0x0001ec56 str r2, [r7, 0x58] | var_58h = r2;
0x0001ec58 ldr r2, [r7, 0x1c] | r2 = var_1ch;
0x0001ec5a ldr r6, [r7, 0x18] | r6 = var_18h;
0x0001ec5c str r1, [r7, 0x70] | var_70h = r1;
0x0001ec5e str r2, [r7, 0x5c] | var_58h_2 = r2;
0x0001ec60 ldr r2, [r7, 0xc] | r2 = var_ch;
0x0001ec62 strd r6, r5, [r7, 0x64] | __asm ("strd r6, r5, [var_60h_2]");
0x0001ec66 add.w r6, r7, 0x58 | r6 += var_58h;
0x0001ec6a mov r5, r3 | r5 = r3;
0x0001ec6c str r6, [r0, 0x20] | *((r0 + 0x20)) = r6;
0x0001ec6e str r2, [r7, 0x60] | var_60h = r2;
0x0001ec70 movs r2, 1 | r2 = 1;
0x0001ec72 str r2, [r7, 0x6c] | var_68h_2 = r2;
0x0001ec74 ldr r2, [r7, 0x20] | r2 = var_20h;
0x0001ec76 cmp r2, 0 |
| if (r2 != 0) {
0x0001ec78 bne.w 0x1e6e4 | goto label_10;
| }
0x0001ec7c blx 0x9ad8 | fcn_00009ad8 ();
0x0001ec80 ldr r5, [r7, 0x20] | r5 = var_20h;
0x0001ec82 b 0x1e718 | goto label_11;
| label_52:
0x0001ec84 strd r1, r2, [r7, 0x20] | __asm ("strd r1, r2, [var_20h]");
0x0001ec88 str.w sb, [r7, 0xc] | __asm ("str.w sb, [var_ch]");
| label_47:
0x0001ec8c ldr r3, [r7, 0x10] | r3 = var_10h;
0x0001ec8e str r3, [r7, 0x14] | var_14h = r3;
| label_18:
0x0001ec90 ldr r3, [r7, 0xc] | r3 = var_ch;
0x0001ec92 ldr r2, [r7, 0x24] | r2 = var_24h;
0x0001ec94 cmp r2, 0 |
0x0001ec96 ite ne |
| if (r2 == 0) {
0x0001ec98 movne r3, 0 | r3 = 0;
| }
| if (r2 != 0) {
0x0001ec9a andeq r3, r3, 1 | r3 &= 1;
| }
0x0001ec9e cmp r3, 0 |
| if (r3 != 0) {
0x0001eca0 bne.w 0x1ee94 | goto label_63;
| }
0x0001eca2 strh r0, [r7, 6] | *((r7 + 6)) = r0;
0x0001eca4 ldr r3, [r7, 0x24] | r3 = var_24h;
0x0001eca6 cmp r3, 0 |
| if (r3 != 0) {
0x0001eca8 bne.w 0x1e988 | goto label_12;
| }
0x0001ecac b 0x1e994 | goto label_13;
| label_45:
0x0001ecae adds r4, 4 | r4 += 4;
| label_17:
0x0001ecb0 ldrb r3, [r2, 1]! | r3 = *((r2 += 1));
0x0001ecb4 cmp r3, 0 |
| if (r3 != 0) {
0x0001ecb6 bne.w 0x1e80e | goto label_14;
| }
| label_44:
0x0001ecba ldr.w r3, [r8, 0xc] | r3 = *((r8 + 0xc));
0x0001ecbe add.w sb, sb, 1 | sb++;
0x0001ecc2 ubfx r3, r3, 0xa, 8 | r3 = (r3 >> 0xa) & ((1 << 8) - 1);
0x0001ecc6 cmp r3, sb |
| if (r3 > sb) {
0x0001ecc8 bhi.w 0x1e7f4 | goto label_15;
| }
| label_43:
0x0001eccc ldr r3, [r7, 8] | r3 = var_8h_2;
0x0001ecce add.w fp, r7, 0x78 |
0x0001ecd2 ldr r0, [r7, 0x40] | r0 = var_40h;
0x0001ecd4 lsl.w sb, r3, 0x1b | sb = r3 << 0x1b;
0x0001ecd6 ldr r3, [r0, 0x1c] | r3 = *((r0 + 0x1c));
0x0001ecd8 bl 0x25228 | g_type_value_table_peek ();
0x0001ecdc ldr r5, [r0, 0x18] | r5 = *((r0 + 0x18));
0x0001ecde mov r6, r0 | r6 = r0;
0x0001ece0 movs r2, 0x40 | r2 = 0x40;
0x0001ece2 movs r1, 0 | r1 = 0;
0x0001ece4 mov r0, fp | r0 = fp;
0x0001ece6 and sb, sb, 0x8000000 | sb &= 0x8000000;
0x0001ece8 ldr r0, [r0, 0x10] | r0 = *((r0 + 0x10));
0x0001ecea blx 0x9db8 | g_string_append_printf ();
0x0001ecee ldrb r3, [r5] | r3 = *(r5);
0x0001ecf0 cmp r3, 0 |
| if (r3 == 0) {
0x0001ecf2 beq.w 0x1ee88 | goto label_64;
| }
0x0001ecf6 mov r2, fp | r2 = fp;
0x0001ecf8 rsb.w r0, r5, 1 | r0 = 1 - r5;
| do {
0x0001ecfc subs r3, 0x64 | r3 -= 0x64;
0x0001ecfe adds r1, r0, r5 | r1 = r0 + r5;
0x0001ed00 cmp r3, 0xd |
| if (r3 <= 0xd) {
0x0001ed02 bhi 0x1ed16 |
| /* switch table (13 cases) at 0x1ed08 */
0x0001ed04 tbb [pc, r3] | __asm ("tbb [0x0001ed0c]");
| }
0x0001ed16 ldr r3, [pc, 0x258] |
0x0001ed18 movs r4, 0 | r4 = 0;
0x0001ed1a ldr r1, [pc, 0x258] |
0x0001ed1c movw r2, 0xd6d | r2 = 0xd6d;
0x0001ed1e strh r5, [r5, r1] | *((r5 + r1)) = r5;
0x0001ed20 ldr r0, [pc, 0x254] |
0x0001ed22 add r3, pc |
0x0001ed24 str r4, [sp] | *(sp) = r4;
0x0001ed26 add r1, pc | r1 = 0x3dca0;
0x0001ed28 add.w r3, r3, 0x3bc | r3 = 0x3e054;
0x0001ed2c add r0, pc | r0 = 0x3dca8;
0x0001ed2e blx 0x9bf0 | g_array_new ();
0x0001ed32 ldr r3, [r4], 4 | r3 = *(r4);
| r4 += 4;
0x0001ed36 str r3, [r2] | *(r2) = r3;
| label_16:
0x0001ed38 ldrb r3, [r5, 1]! | r3 = *((r5 += 1));
0x0001ed3c adds r2, 8 | r2 += 8;
0x0001ed3e cmp r3, 0 |
0x0001ed40 bne 0x1ecfc |
| } while (r3 != 0);
| label_27:
0x0001ed42 ldr r4, [r6, 0x1c] | r4 = *((r6 + 0x1c));
0x0001ed44 mov r3, sb | r3 = sb;
0x0001ed46 ldr r0, [r7, 0x14] | r0 = var_14h;
0x0001ed48 mov r2, fp | r2 = fp;
0x0001ed4a blx r4 | r0 = uint32_t (*r4)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x0001ed4c mov r4, r0 | r4 = r0;
0x0001ed4e cmp r0, 0 |
| if (r0 == 0) {
0x0001ed50 beq.w 0x1ee7c | goto label_65;
| }
0x0001ed54 str r0, [sp] | *(sp) = r0;
0x0001ed56 movs r1, 0x10 | r1 = 0x10;
0x0001ed58 ldr r3, [pc, 0x220] |
0x0001ed5a ldr r2, [pc, 0x224] |
0x0001ed5c ldr r0, [pc, 0x224] |
0x0001ed5e add r3, pc | r3 = 0x3dcde;
0x0001ed60 add r2, pc | r2 = 0x3dce6;
0x0001ed62 add r0, pc | r0 = 0x3dcea;
0x0001ed64 blx 0x9e0c | g_mutex_lock ();
0x0001ed66 invalid |
0x0001ed6a blx 0x9ac8 | fcn_00009ac8 ();
0x0001ed6c invalid |
| label_25:
0x0001ed6e ldr r3, [r7, 0x24] | r3 = var_24h;
0x0001ed70 cmp r3, 0 |
| if (r3 == 0) {
0x0001ed72 beq.w 0x1e5c8 | goto label_6;
| }
0x0001ed76 ldr r0, [r7, 0x1c] | r0 = var_1ch;
0x0001ed78 bl 0x11684 | g_object_unref ();
0x0001ed7c b 0x1e5c8 | goto label_6;
0x0001ed8e adds r4, 7 | r4 += 7;
0x0001ed90 bic r4, r4, 7 | r4 = BIT_MASK (r4, 7);
0x0001ed94 vldmia r4!, {d16} | __asm ("vldmia r4!, {d16}");
0x0001ed98 vstr d16, [r2] | __asm ("vstr d16, [r2]");
0x0001ed9c b 0x1ed38 | goto label_16;
| label_46:
0x0001ed9e adds r4, 7 | r4 += 7;
0x0001eda0 bic r4, r4, 7 | r4 = BIT_MASK (r4, 7);
0x0001eda4 adds r4, 8 | r4 += 8;
0x0001eda6 b 0x1ecb0 | goto label_17;
| label_32:
0x0001eda8 ldr.w r0, [r8, 0x2c] | r0 = *((r8 + 0x2c));
0x0001edac bl 0xe53c | fcn_0000e53c (r0);
0x0001edb0 str r0, [r7, 0x10] | var_10h = r0;
0x0001edb2 cmp r0, 0 |
| if (r0 == 0) {
0x0001edb4 beq 0x1ee4c | goto label_66;
| }
0x0001edb6 ldr.w r3, [r8, 0x2c] | r3 = *((r8 + 0x2c));
0x0001edba ldr r0, [r7, 0x1c] | r0 = var_1ch;
0x0001edbc str r3, [r7, 0x24] | var_24h = r3;
0x0001edbe ldrb.w r3, [r8, 0xe] | r3 = *((r8 + 0xe));
0x0001edc2 tst.w r3, 8 |
0x0001edc6 ite ne |
| if ((r3 & 8) == 0) {
0x0001edc8 movne r5, 2 | r5 = 2;
| }
| if ((r3 & 8) != 0) {
0x0001edca moveq r5, 1 | r5 = 1;
| }
0x0001edcc bl 0x124f0 | r0 = fcn_000124f0 ();
0x0001edd0 cmp r0, 0 |
| if (r0 != 0) {
0x0001edd2 bne 0x1ee8c | goto label_67;
| }
0x0001edd4 movs r3, 1 | r3 = 1;
0x0001edd6 str r0, [r7, 0x20] | var_20h = r0;
0x0001edd8 str r3, [r7, 0xc] | var_ch = r3;
0x0001edda str r3, [r7, 0x14] | var_14h = r3;
0x0001eddc b 0x1ec90 | goto label_18;
| label_39:
0x0001edde ldr r3, [r7, 0x24] | r3 = var_24h;
0x0001ede0 cmp r3, 0 |
| if (r3 == 0) {
0x0001ede2 beq.w 0x1e76c | goto label_19;
| }
0x0001ede6 ldr r0, [r7, 0x1c] | r0 = var_1ch;
0x0001ede8 bl 0x11308 | g_object_ref ();
0x0001edec ldr.w r2, [r8, 0xc] | r2 = *((r8 + 0xc));
0x0001edf0 mov r3, sl | r3 = sl;
0x0001edf2 ldr.w r0, [r8, 0x10] | r0 = *((r8 + 0x10));
0x0001edf6 mov r1, r5 | r1 = r5;
0x0001edf8 ubfx r2, r2, 0xa, 8 | r2 = (r2 >> 0xa) & ((1 << 8) - 1);
0x0001edfc strd r2, r0, [sp] | __asm ("strd r2, r0, [sp]");
0x0001ee00 ldr r2, [r7, 0x1c] | r2 = var_1ch;
0x0001ee02 ldr r0, [r7, 0x24] | r0 = var_24h;
0x0001ee04 bl 0xe580 | fcn_0000e580 (r0, r1, r2, r3, r4);
0x0001ee06 invalid |
| label_42:
0x0001ee0a ldr r2, [r7, 0x20] | r2 = var_20h;
0x0001ee0c subs r3, 1 | r3--;
0x0001ee0e str r3, [r2, 0x14] | *((r2 + 0x14)) = r3;
0x0001ee10 cmp r3, 0 |
| if (r3 != 0) {
0x0001ee12 bne.w 0x1e7c2 | goto label_20;
| }
0x0001ee16 ldr r0, [r7, 0xc] | r0 = var_ch;
0x0001ee18 ldr r1, [r7, 0x1c] | r1 = var_1ch;
0x0001ee1a bl 0x1a004 | fcn_0001a004 (r0, r1, r2);
0x0001ee1c invalid |
| label_36:
0x0001ee20 blx 0x9ad8 | fcn_00009ad8 ();
| label_38:
0x0001ee24 ldr r0, [r7, 0x14] | r0 = var_14h;
0x0001ee26 mov r1, fp | r1 = fp;
0x0001ee28 bl 0x2698c | g_value_init ();
0x0001ee2c b 0x1e718 | goto label_11;
| label_37:
0x0001ee2e ldr r2, [r7, 0x20] | r2 = var_20h;
0x0001ee30 adds r3, 1 | r3++;
0x0001ee32 str r3, [r2, 0x14] | *((r2 + 0x14)) = r3;
0x0001ee34 b 0x1e706 | goto label_21;
| label_49:
0x0001ee36 ldrd r4, r5, [r7, 4] | __asm ("ldrd r4, r5, [var_8h_2]");
0x0001ee3a ldr.w r8, [r7] | r8 = *(r7);
0x0001ee3e ldr.w sl, [r7, 0x20] | sl = var_20h;
| label_48:
0x0001ee42 ldr r3, [r7, 0x10] | r3 = var_10h;
0x0001ee44 str r3, [r7, 0x14] | var_14h = r3;
0x0001ee46 movs r3, 0 | r3 = 0;
0x0001ee48 str r3, [r7, 0x20] | var_20h = r3;
0x0001ee4a b 0x1ec90 | goto label_18;
| label_66:
0x0001ee4c ldr r0, [r7, 0x1c] | r0 = var_1ch;
0x0001ee4e bl 0x124f0 | r0 = fcn_000124f0 ();
0x0001ee52 cmp r0, 0 |
| if (r0 == 0) {
0x0001ee54 beq.w 0x1e99c | goto label_22;
| }
0x0001ee58 ldr r3, [r7, 0x10] | r3 = var_10h;
0x0001ee5a movs r5, 1 | r5 = 1;
0x0001ee5c str r3, [r7, 0xc] | var_ch = r3;
0x0001ee5e str r3, [r7, 0x24] | var_24h = r3;
0x0001ee60 b 0x1e8b0 | goto label_23;
| label_41:
0x0001ee62 ldr r3, [r7, 0x58] | r3 = var_58h;
0x0001ee64 str r3, [r5, 0x20] | *((r5 + 0x20)) = r3;
0x0001ee66 b 0x1e79c | goto label_24;
| label_61:
0x0001ee68 mov r0, r6 | r0 = r6;
0x0001ee6a bl 0x26ad0 | g_value_unset ();
0x0001ee6e b 0x1ebe2 | goto label_9;
| do {
| label_34:
0x0001ee70 ldr r0, [pc, 0x114] |
0x0001ee72 add r0, pc | r0 = 0x3ddfe;
0x0001ee74 blx 0x9ad8 | fcn_00009ad8 ();
0x0001ee78 b.w 0x1e5c8 | goto label_6;
| label_65:
0x0001ee7c ldr r0, [r7, 0x14] | r0 = var_14h;
0x0001ee7e bl 0x26ad0 | g_value_unset ();
0x0001ee82 b 0x1ed6e | goto label_25;
| label_59:
0x0001ee84 mov r1, r3 | r1 = r3;
0x0001ee86 b 0x1ebb4 | goto label_26;
| label_64:
0x0001ee88 mov r1, r3 | r1 = r3;
0x0001ee8a b 0x1ed42 | goto label_27;
| label_67:
0x0001ee8c movs r3, 1 | r3 = 1;
0x0001ee8e strd r3, r3, [r7, 0xc] | __asm ("strd r3, r3, [var_10h]");
0x0001ee92 b 0x1e8b0 | goto label_23;
| label_63:
0x0001ee94 ldr.w r3, [r8, 0x14] | r3 = *((r8 + 0x14));
0x0001ee98 cmp r3, 4 |
0x0001ee9a beq 0x1ee70 |
| } while (r3 == 4);
0x0001ee9c movs r3, 0 | r3 = 0;
0x0001ee9e str r3, [r7, 0x24] | var_24h = r3;
0x0001eea0 b 0x1e994 | goto label_13;
| label_40:
0x0001eea2 ldr r3, [pc, 0xe8] |
0x0001eea4 movs r4, 0 | r4 = 0;
0x0001eea6 ldr r1, [pc, 0xe8] |
0x0001eea8 movw r2, 0x372 | r2 = 0x372;
0x0001eeac ldr r0, [pc, 0xe4] |
0x0001eeae add r3, pc | r3 = 0x3de40;
0x0001eeb0 str r4, [sp] | *(sp) = r4;
0x0001eeb2 add r1, pc | r1 = 0x3de48;
0x0001eeb4 adds r3, 0xac | r3 += 0xac;
0x0001eeb6 add r0, pc | r0 = 0x3de4e;
0x0001eeb8 blx 0x9bf0 | g_array_new ();
| label_50:
0x0001eebc ldr r3, [r7, 0x10] | r3 = var_10h;
0x0001eebe str.w sb, [r7, 0x20] | __asm ("str.w sb, [var_20h]");
0x0001eec2 str r3, [r7, 0x14] | var_14h = r3;
0x0001eec4 b 0x1ec90 | goto label_18;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x1e1b0 */
| #include <stdint.h>
|
; (fcn) sym.g_signal_has_handler_pending () | void g_signal_has_handler_pending (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int32_t var_4h;
| int32_t var_4h_2;
| int16_t var_ch;
| int16_t var_14h;
| int16_t var_18h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x0001e1b0 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001e1b4 sub sp, 0x24 |
0x0001e1b6 mov r5, r0 | r5 = r0;
0x0001e1b8 mov r8, r1 | r8 = r1;
0x0001e1ba mov r4, r2 | r4 = r2;
0x0001e1bc mov r7, r3 | r7 = r3;
0x0001e1be bl 0x24e2c | r0 = g_type_check_instance ();
| if (r0 == 0) {
0x0001e1c2 cbnz r0, 0x1e1e2 |
0x0001e1c4 ldr r1, [pc, 0x1b0] |
0x0001e1c6 mov r6, r0 | r6 = r0;
0x0001e1c8 ldr r2, [pc, 0x1b0] |
0x0001e1ca ldr r0, [pc, 0x1b4] |
0x0001e1cc add r1, pc |
0x0001e1ce add r2, pc | r2 = 0x3c54e;
0x0001e1d0 add.w r1, r1, 0x38c | r1 = 0x3c8d4;
0x0001e1d4 add r0, pc | r0 = 0x3c55a;
0x0001e1d6 blx 0x9c0c | fcn_00009c0c ();
| label_0:
0x0001e1da mov r0, r6 | r0 = r6;
0x0001e1dc add sp, 0x24 |
0x0001e1de pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0001e1e0 ldrh r0, [r6, 0x3e] | r0 = *((r6 + 0x3e));
| }
0x0001e1e2 cmp.w r8, 0 |
| if (r8 == 0) {
0x0001e1e6 beq 0x1e25c | goto label_5;
| }
0x0001e1e8 ldr r6, [pc, 0x198] |
0x0001e1ea add r6, pc | r6 = 0x3c572;
0x0001e1ec mov r0, r6 | r0 = r6;
0x0001e1ee blx 0x9e5c | fcn_00009e5c ();
0x0001e1f2 ldr r3, [r6, 0x18] | r3 = *(0x3c58a);
0x0001e1f4 cmp r8, r3 |
0x0001e1f6 itet lo |
| if (r8 >= r3) {
0x0001e1f8 ldrlo r3, [r6, 0x1c] | r3 = *((r6 + 0x1c));
| }
| if (r8 < r3) {
0x0001e1fa movhs sb, 0 | sb = 0;
| }
| if (r8 < r3) {
0x0001e1fe ldr.w sb, [r3, r8, lsl 2] | sb = *(0x3c58a);
| }
0x0001e202 cmp r4, 0 |
0x0001e204 bne 0x1e27a |
| while (r6 != r6) {
0x0001e206 movs r1, 1 | r1 = 1;
0x0001e208 cmp r7, 0 |
0x0001e20a str r1, [sp, 0xc] | var_ch = r1;
0x0001e20c mov.w r1, 0 | r1 = 0;
0x0001e210 strd r1, r1, [sp, 4] | __asm ("strd r1, r1, [var_4h]");
0x0001e214 mov r3, r4 | r3 = r4;
0x0001e216 str r1, [sp] | *(sp) = r1;
0x0001e218 mov r2, r8 | r2 = r8;
0x0001e21a ite ne |
| if (r7 == 0) {
0x0001e21c movne r1, 3 | r1 = 3;
| }
| if (r7 != 0) {
0x0001e21e moveq r1, 0x23 | r1 = 0x23;
| }
0x0001e220 mov r0, r5 | r0 = r5;
0x0001e222 bl 0x19d38 | r0 = fcn_00019d38 (r0, r1, r2, r3, r4, r5, r6);
0x0001e226 mov r4, r0 | r4 = r0;
0x0001e228 cmp r0, 0 |
| if (r0 == 0) {
0x0001e22a beq 0x1e2bc | goto label_6;
| }
0x0001e22c ldr r2, [r0] | r2 = *(r0);
0x0001e22e ldr r0, [r0, 8] | r0 = *((r0 + 8));
0x0001e230 ldr r3, [r2, 0x14] | r3 = *((r2 + 0x14));
0x0001e232 cmp r3, 0 |
| if (r3 == 0) {
0x0001e234 beq 0x1e2a8 | goto label_7;
| }
0x0001e236 subs r3, 1 | r3--;
0x0001e238 str r3, [r2, 0x14] | *((r2 + 0x14)) = r3;
| if (r3 == 0) {
0x0001e23a cbnz r3, 0x1e242 |
0x0001e23c mov r1, r5 | r1 = r5;
0x0001e23e bl 0x1a004 | fcn_0001a004 (r0, r1, r2);
| }
| label_1:
0x0001e242 mov r1, r4 | r1 = r4;
0x0001e244 movs r0, 0xc | r0 = 0xc;
0x0001e246 movs r6, 1 | r6 = 1;
0x0001e248 blx 0x9f64 | fcn_00009f64 ();
| label_2:
0x0001e24c ldr r0, [pc, 0x138] |
0x0001e24e add r0, pc | r0 = 0x3c5da;
0x0001e250 blx 0x9ad8 | fcn_00009ad8 ();
0x0001e254 mov r0, r6 | r0 = r6;
0x0001e256 add sp, 0x24 |
0x0001e258 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x0001e25c ldr r1, [pc, 0x12c] |
0x0001e25e mov r6, r8 | r6 = r8;
0x0001e260 ldr r2, [pc, 0x12c] |
0x0001e262 ldr r0, [pc, 0x130] |
0x0001e264 add r1, pc |
0x0001e266 add r2, pc | r2 = 0x3c5fa;
0x0001e268 add.w r1, r1, 0x38c | r1 = 0x3c980;
0x0001e26c add r0, pc | r0 = 0x3c606;
0x0001e26e blx 0x9c0c | fcn_00009c0c ();
0x0001e272 mov r0, r6 | r0 = r6;
0x0001e274 add sp, 0x24 |
0x0001e276 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0001e27a ldrh.w r6, [sb, 0xc] | r6 = *((sb + 0xc));
0x0001e27e ubfx r6, r6, 1, 9 | r6 = (r6 >> 1) & ((1 << 9) - 1);
0x0001e282 ands r6, r6, 0x10 | r6 &= 0x10;
0x0001e286 bne 0x1e206 |
| }
0x0001e288 ldr r3, [pc, 0x10c] |
0x0001e28a movs r1, 0x10 | r1 = 0x10;
0x0001e28c ldr r2, [pc, 0x10c] |
0x0001e28e ldr r0, [pc, 0x110] |
0x0001e290 add r3, pc | r3 = 0x3c62c;
0x0001e292 strd r8, r4, [sp] | __asm ("strd r8, r4, [sp]");
0x0001e296 add r2, pc | r2 = 0x3c636;
0x0001e298 add r0, pc | r0 = 0x3c63e;
0x0001e29a blx 0x9e0c | g_mutex_lock ();
0x0001e29e ldr r0, [pc, 0x104] |
0x0001e2a0 add r0, pc | r0 = 0x3c64a;
0x0001e2a2 blx 0x9ad8 | fcn_00009ad8 ();
0x0001e2a6 b 0x1e1da | goto label_0;
| label_7:
0x0001e2a8 ldr r1, [pc, 0xfc] |
0x0001e2aa ldr r2, [pc, 0x100] |
0x0001e2ac ldr r0, [pc, 0x100] |
0x0001e2ae add r1, pc | r1 = 0x3c65a;
0x0001e2b0 add r2, pc | r2 = 0x3c662;
0x0001e2b2 adds r1, 0x68 | r1 += 0x68;
0x0001e2b4 add r0, pc | r0 = 0x3c668;
0x0001e2b6 blx 0x9c0c | fcn_00009c0c ();
0x0001e2ba b 0x1e242 | goto label_1;
| label_6:
0x0001e2bc ldr.w r6, [sb, 0x18] | r6 = *((sb + 0x18));
0x0001e2c0 ldr r3, [r5] | r3 = *(r5);
0x0001e2c2 ldr r0, [r3] | r0 = *(r3);
0x0001e2c4 cmp r6, 0 |
| if (r6 == 0) {
0x0001e2c6 beq 0x1e24c | goto label_2;
| }
0x0001e2c8 ldr r3, [r6] | r3 = *(r6);
0x0001e2ca cmp r3, 1 |
| if (r3 == 1) {
0x0001e2cc bne 0x1e2d2 |
0x0001e2ce ldr r3, [r6, 8] | r3 = *((r6 + 8));
| if (r3 == 0) {
0x0001e2d0 cbz r3, 0x1e314 | goto label_8;
| }
| }
0x0001e2d2 ldr r3, [pc, 0xe0] |
0x0001e2d4 str r0, [sp, 0x18] | var_18h = r0;
0x0001e2d6 ldr.w sl, [r6] | sl = *(r6);
0x0001e2da add r3, pc | r3 = 0x3c694;
0x0001e2dc ldrd r7, r8, [r3, 0xc] | __asm ("ldrd r7, r8, [r3, 0xc]");
0x0001e2e0 cmp.w sl, 0 |
0x0001e2e2 lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 == r0) {
0x0001e2e4 beq 0x1e31e | goto label_9;
| }
0x0001e2e6 mov.w fp, 0 |
0x0001e2ea add.w sb, sp, 0x18 | sb += var_18h;
0x0001e2ee b 0x1e2fc |
| while (r0 != 0) {
0x0001e2f0 ite ge |
| if (r0 < r0) {
0x0001e2f2 addge fp, r4, 1 |
| }
| if (r0 < r0) {
0x0001e2f6 mov sl, r4 | sl = r4;
| }
0x0001e2f8 cmp fp, sl |
| if (fp >= sl) {
0x0001e2fa bhs 0x1e31c | goto label_10;
| }
0x0001e2fc add.w r4, fp, sl | r4 = fp + sl;
0x0001e300 mov r0, sb | r0 = sb;
0x0001e302 lsrs r4, r4, 1 | r4 >>= 1;
0x0001e304 mla r5, r4, r7, r6 | __asm ("mla r5, r4, r7, r6");
0x0001e308 adds r5, 8 | r5 += 8;
0x0001e30a mov r1, r5 | r1 = r5;
0x0001e30c blx r8 | r0 = uint32_t (*r8)(uint32_t, uint32_t) (r0, r1);
0x0001e30e cmp r0, 0 |
0x0001e310 bne 0x1e2f0 |
| }
| label_3:
0x0001e312 ldr r3, [r5] | r3 = *(r5);
| label_8:
0x0001e314 subs r6, r3, 0 | r6 = r3 - 0;
0x0001e316 it ne |
| if (r6 == r3) {
0x0001e318 movne r6, 1 | r6 = 1;
| }
0x0001e31a b 0x1e24c | goto label_2;
| label_10:
0x0001e31c ldr r0, [sp, 0x18] | r0 = var_18h;
| if (r0 == 0) {
| label_9:
0x0001e31e cbz r0, 0x1e372 | goto label_11;
| }
0x0001e320 ldr r3, [pc, 0x94] |
0x0001e322 add.w sb, sp, 0x18 | sb += var_18h;
0x0001e326 add r3, pc | r3 = 0x3c6e2;
0x0001e328 str r3, [sp, 0x14] | var_14h = r3;
| label_4:
0x0001e32a bl 0x231ac | g_type_parent ();
0x0001e32e ldr r3, [sp, 0x14] | r3 = var_14h;
0x0001e330 str r0, [sp, 0x18] | var_18h = r0;
0x0001e332 ldr.w sl, [r6] | sl = *(r6);
0x0001e336 ldr r7, [r3, 0xc] | r7 = *((r3 + 0xc));
0x0001e338 ldr.w r8, [r3, 0x10] | r8 = *((r3 + 0x10));
0x0001e33c cmp.w sl, 0 |
| if (sl == 0) {
0x0001e340 beq 0x1e36e | goto label_12;
| }
0x0001e342 mov.w fp, 0 |
0x0001e346 b 0x1e354 |
| while (r0 != 0) {
0x0001e348 ite ge |
| if (sl < 0) {
0x0001e34a addge fp, r4, 1 |
| }
| if (sl < 0) {
0x0001e34e mov sl, r4 | sl = r4;
| }
0x0001e350 cmp fp, sl |
| if (fp >= sl) {
0x0001e352 bhs 0x1e36c | goto label_13;
| }
0x0001e354 add.w r4, sl, fp | r4 = sl + fp;
0x0001e358 mov r0, sb | r0 = sb;
0x0001e35a lsrs r4, r4, 1 | r4 >>= 1;
0x0001e35c mla r5, r4, r7, r6 | __asm ("mla r5, r4, r7, r6");
0x0001e360 adds r5, 8 | r5 += 8;
0x0001e362 mov r1, r5 | r1 = r5;
0x0001e364 blx r8 | r0 = uint32_t (*r8)(uint32_t, uint32_t) (r0, r1);
0x0001e366 cmp r0, 0 |
0x0001e368 bne 0x1e348 |
| }
0x0001e36a b 0x1e312 | goto label_3;
| label_13:
0x0001e36c ldr r0, [sp, 0x18] | r0 = var_18h;
| label_12:
0x0001e36e cmp r0, 0 |
| if (r0 != 0) {
0x0001e370 bne 0x1e32a | goto label_4;
| }
| label_11:
0x0001e372 movs r6, 0 | r6 = 0;
0x0001e374 b 0x1e24c | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x1c618 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.g_signal_override_class_closure () | void g_signal_override_class_closure (int16_t arg1, int16_t arg2, uint32_t arg3) {
| int32_t var_0h;
| int32_t var_0h_2;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| uint32_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x0001c618 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001c61c sub sp, 0x2c |
0x0001c61e str r1, [sp, 0x10] | var_10h = r1;
0x0001c620 str r2, [sp, 0x18] | var_18h = r2;
0x0001c622 str r0, [sp, 0xc] | var_ch = r0;
| if (r0 == 0) {
0x0001c624 cbnz r0, 0x1c640 |
0x0001c626 ldr r1, [pc, 0x1b8] |
0x0001c628 ldr r2, [pc, 0x1b8] |
0x0001c62a ldr r0, [pc, 0x1bc] |
0x0001c62c add r1, pc |
0x0001c62e add r2, pc | r2 = 0x38e16;
0x0001c630 add.w r1, r1, 0x1d0 | r1 = 0x38fe2;
0x0001c634 add r0, pc | r0 = 0x38e22;
0x0001c636 add sp, 0x2c |
0x0001c638 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001c63c b.w 0x9c08 | void (*0x9c08)() ();
| }
0x0001c640 cmp r2, 0 |
| if (r2 == 0) {
0x0001c642 beq 0x1c712 | goto label_7;
| }
0x0001c644 ldr r4, [pc, 0x1a4] |
0x0001c646 add r4, pc | r4 = 0x38e36;
0x0001c648 mov r0, r4 | r0 = r4;
0x0001c64a blx 0x9e5c | fcn_00009e5c ();
0x0001c64e ldr r3, [r4, 0x18] | r3 = *(0x38e4e);
0x0001c650 ldr r2, [sp, 0xc] | r2 = var_ch;
0x0001c652 cmp r2, r3 |
| if (r2 >= r3) {
0x0001c654 bhs.w 0x1c7d4 | goto label_8;
| }
0x0001c658 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x0001c65a ldr.w r3, [r3, r2, lsl 2] | offset_0 = r2 << 2;
| r3 = *((r3 + offset_0));
0x0001c65e mov r4, r3 | r4 = r3;
0x0001c660 mov r0, r3 | r0 = r3;
0x0001c662 str r3, [sp, 0x1c] | var_1ch = r3;
0x0001c664 bl 0x198c4 | fcn_000198c4 (r0);
0x0001c668 ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0001c66a ldr r4, [sp, 0x10] | r4 = var_10h;
0x0001c66c mov r0, r4 | r0 = r4;
0x0001c66e bl 0x23254 | r0 = g_type_is_a ();
| if (r0 == 0) {
0x0001c672 cbnz r0, 0x1c6a2 |
0x0001c674 cmp r4, 0 |
| if (r4 != 0) {
0x0001c676 bne 0x1c72c | goto label_9;
| }
0x0001c678 ldr r0, [pc, 0x174] |
0x0001c67a add r0, pc | r0 = 0x38e6e;
| label_1:
0x0001c67c ldr r4, [sp, 0xc] | r4 = var_ch;
0x0001c67e movs r1, 0x10 | r1 = 0x10;
0x0001c680 ldr r3, [pc, 0x170] |
0x0001c682 ldr r2, [pc, 0x174] |
0x0001c684 strd r0, r4, [sp] | __asm ("strd r0, r4, [sp]");
0x0001c688 ldr r0, [pc, 0x170] |
0x0001c68a add r3, pc | r3 = 0x38e82;
0x0001c68c add r2, pc | r2 = 0x38e8a;
0x0001c68e add r0, pc | r0 = 0x38e8e;
0x0001c690 blx 0x9e0c | g_mutex_lock ();
| label_0:
0x0001c694 ldr r0, [pc, 0x168] |
0x0001c696 add r0, pc | r0 = 0x38e9a;
0x0001c698 add sp, 0x2c |
0x0001c69a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001c69e b.w 0x9ad4 | void (*0x9ad4)() ();
| }
0x0001c6a2 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0001c6a4 ldr r5, [r3, 0x18] | r5 = *((r3 + 0x18));
| if (r5 == 0) {
0x0001c6a6 cbz r5, 0x1c706 | goto label_2;
| }
0x0001c6a8 ldr r3, [r5] | r3 = *(r5);
0x0001c6aa cmp r3, 1 |
| if (r3 == 1) {
0x0001c6ac bne 0x1c6b2 |
0x0001c6ae ldr r3, [r5, 8] | r3 = *((r5 + 8));
| if (r3 == 0) {
0x0001c6b0 cbz r3, 0x1c700 | goto label_3;
| }
| }
0x0001c6b2 ldr r3, [sp, 0x10] | r3 = var_10h;
0x0001c6b4 ldr r2, [pc, 0x14c] |
0x0001c6b6 str r3, [sp, 0x20] | var_20h = r3;
0x0001c6b8 ldr.w sl, [r5] | sl = *(r5);
0x0001c6bc add r2, pc | r2 = 0x38ec4;
0x0001c6be ldrd r7, sb, [r2, 0xc] | __asm ("ldrd r7, sb, [r2, 0xc]");
0x0001c6c2 cmp.w sl, 0 |
| if (sl == 0) {
0x0001c6c6 beq.w 0x1c7d0 | goto label_10;
| }
0x0001c6ca add r6, sp, 0x20 | r6 += var_20h;
0x0001c6cc mov.w fp, 0 |
0x0001c6d0 mov r3, r6 | r3 = r6;
0x0001c6d2 mov r6, sb | r6 = sb;
0x0001c6d4 mov sb, r3 | sb = r3;
0x0001c6d6 b 0x1c6e4 |
| while (r0 != 0) {
0x0001c6d8 ite ge |
| if (sl < 0) {
0x0001c6da addge fp, r4, 1 |
| }
| if (sl < 0) {
0x0001c6de mov sl, r4 | sl = r4;
| }
0x0001c6e0 cmp sl, fp |
| if (sl < fp) {
0x0001c6e2 bls 0x1c740 | goto label_11;
| }
0x0001c6e4 add.w r4, fp, sl | r4 = fp + sl;
0x0001c6e8 mov r0, sb | r0 = sb;
0x0001c6ea lsrs r4, r4, 1 | r4 >>= 1;
0x0001c6ec mla r8, r4, r7, r5 | __asm ("mla r8, r4, r7, r5");
0x0001c6f0 add.w r8, r8, 8 | r8 += 8;
0x0001c6f4 mov r1, r8 | r1 = r8;
0x0001c6f6 blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t) (r0, r1);
0x0001c6f8 cmp r0, 0 |
0x0001c6fa bne 0x1c6d8 |
| }
0x0001c6fc ldr.w r3, [r8] | r3 = *(r8);
| label_3:
0x0001c700 ldr r2, [sp, 0x10] | r2 = var_10h;
0x0001c702 cmp r2, r3 |
| if (r2 == r3) {
0x0001c704 beq 0x1c79e | goto label_12;
| }
| label_2:
0x0001c706 ldr r2, [sp, 0x18] | r2 = var_18h;
0x0001c708 ldr r1, [sp, 0x10] | r1 = var_10h;
0x0001c70a ldr r0, [sp, 0x1c] | r0 = var_1ch;
0x0001c70c bl 0x19b04 | fcn_00019b04 (r0, r1, r2);
0x0001c710 b 0x1c694 | goto label_0;
| label_7:
0x0001c712 ldr r1, [pc, 0xf4] |
0x0001c714 ldr r2, [pc, 0xf4] |
0x0001c716 ldr r0, [pc, 0xf8] |
0x0001c718 add r1, pc |
0x0001c71a add r2, pc | r2 = 0x38f2a;
0x0001c71c add.w r1, r1, 0x1d0 | r1 = 0x390f6;
0x0001c720 add r0, pc | r0 = 0x38f36;
0x0001c722 add sp, 0x2c |
0x0001c724 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001c728 b.w 0x9c08 | void (*0x9c08)() ();
| label_9:
0x0001c72c ldr r3, [sp, 0x10] | r3 = var_10h;
0x0001c72e bic r0, r3, 1 | r0 = BIT_MASK (r3, 1);
0x0001c732 bl 0x22b9c | r0 = g_type_name ();
0x0001c736 cmp r0, 0 |
| if (r0 != 0) {
0x0001c738 bne 0x1c67c | goto label_1;
| }
0x0001c73a ldr r0, [pc, 0xd8] |
0x0001c73c add r0, pc | r0 = 0x38f56;
0x0001c73e b 0x1c67c | goto label_1;
| label_11:
0x0001c740 ldr r0, [sp, 0x20] | r0 = var_20h;
| label_6:
0x0001c742 cmp r0, 0 |
| if (r0 == 0) {
0x0001c744 beq 0x1c706 | goto label_2;
| }
0x0001c746 ldr r3, [pc, 0xd0] |
0x0001c748 add.w r8, sp, 0x20 | r8 += var_20h;
0x0001c74c add r3, pc | r3 = 0x38f6a;
0x0001c74e str r3, [sp, 0x14] | var_14h = r3;
| label_4:
0x0001c750 bl 0x231ac | g_type_parent ();
0x0001c754 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0001c756 str r0, [sp, 0x20] | var_20h = r0;
0x0001c758 ldr.w sb, [r5] | sb = *(r5);
0x0001c75c ldr r6, [r3, 0xc] | r6 = *((r3 + 0xc));
0x0001c75e ldr r7, [r3, 0x10] | r7 = *((r3 + 0x10));
0x0001c760 cmp.w sb, 0 |
| if (sb == 0) {
0x0001c764 beq 0x1c798 | goto label_13;
| }
0x0001c766 mov.w fp, 0 |
0x0001c76a b 0x1c778 |
| while (r0 != 0) {
0x0001c76c ite ge |
| if (sb < 0) {
0x0001c76e addge fp, r4, 1 |
| }
| if (sb < 0) {
0x0001c772 mov sb, r4 | sb = r4;
| }
0x0001c774 cmp fp, sb |
| if (fp >= sb) {
0x0001c776 bhs 0x1c796 | goto label_14;
| }
0x0001c778 add.w r4, sb, fp | r4 = sb + fp;
0x0001c77c mov r0, r8 | r0 = r8;
0x0001c77e lsrs r4, r4, 1 | r4 >>= 1;
0x0001c780 mla sl, r4, r6, r5 | __asm ("mla sl, r4, r6, r5");
0x0001c784 add.w sl, sl, 8 | sl += 8;
0x0001c788 mov r1, sl | r1 = sl;
0x0001c78a blx r7 | r0 = uint32_t (*r7)(uint32_t, uint32_t) (r0, r1);
0x0001c78c cmp r0, 0 |
0x0001c78e bne 0x1c76c |
| }
0x0001c790 ldr.w r3, [sl] | r3 = *(sl);
0x0001c794 b 0x1c700 | goto label_3;
| label_14:
0x0001c796 ldr r0, [sp, 0x20] | r0 = var_20h;
| label_13:
0x0001c798 cmp r0, 0 |
| if (r0 != 0) {
0x0001c79a bne 0x1c750 | goto label_4;
| }
0x0001c79c b 0x1c706 | goto label_2;
| if (r2 != 0) {
| label_12:
0x0001c79e cbnz r2, 0x1c7be | goto label_15;
| }
0x0001c7a0 ldr r0, [pc, 0x78] |
0x0001c7a2 add r0, pc | r0 = 0x38fc2;
| do {
| label_5:
0x0001c7a4 ldr r4, [sp, 0xc] | r4 = var_ch;
0x0001c7a6 movs r1, 0x10 | r1 = 0x10;
0x0001c7a8 ldr r3, [pc, 0x74] |
0x0001c7aa ldr r2, [pc, 0x78] |
0x0001c7ac strd r0, r4, [sp] | __asm ("strd r0, r4, [sp]");
0x0001c7b0 ldr r0, [pc, 0x74] |
0x0001c7b2 add r3, pc | r3 = 0x38fd6;
0x0001c7b4 add r2, pc | r2 = 0x38fde;
0x0001c7b6 add r0, pc | r0 = 0x38fe2;
0x0001c7b8 blx 0x9e0c | g_mutex_lock ();
0x0001c7bc b 0x1c694 | goto label_0;
| label_15:
0x0001c7be bic r0, r2, 1 | r0 = BIT_MASK (r2, 1);
0x0001c7c2 bl 0x22b9c | r0 = g_type_name ();
0x0001c7c6 cmp r0, 0 |
0x0001c7c8 bne 0x1c7a4 |
| } while (r0 != 0);
0x0001c7ca ldr r0, [pc, 0x60] |
0x0001c7cc add r0, pc | r0 = 0x38ffe;
0x0001c7ce b 0x1c7a4 | goto label_5;
| label_10:
0x0001c7d0 ldr r0, [sp, 0x10] | r0 = var_10h;
0x0001c7d2 b 0x1c742 | goto label_6;
| label_8:
0x0001c7d4 movs r0, 0 | r0 = 0;
0x0001c7d6 bl 0x198c4 | fcn_000198c4 (r0);
0x0001c7da movs r3, 0 | r3 = 0;
0x0001c7dc ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0001c7de udf 0xff | __asm ("udf 0xff");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x245bc */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.g_type_check_instance_is_a () | void g_type_check_instance_is_a (uint32_t arg1, char * arg2) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
0x000245bc cmp r0, 0 |
| if (r0 != 0) {
0x000245be beq 0x24626 |
0x000245c0 ldr r0, [r0] | r0 = *(r0);
| if (r0 == 0) {
0x000245c2 cbz r0, 0x24626 | goto label_0;
| }
0x000245c4 push {r4, lr} |
0x000245c6 sub sp, 8 |
0x000245c8 ldr r4, [r0] | r4 = *(r0);
0x000245ca cmp.w r4, 0x3fc |
0x000245ce it hi |
| if (r4 > 0x3fc) {
0x000245d0 bichi r4, r4, 3 | __asm ("bichi r4, r4, 3");
| }
| if (r4 <= 0x3fc) {
0x000245d4 bhi 0x245e2 |
0x000245d6 ldr r3, [pc, 0x50] |
0x000245d8 bic r4, r4, 3 | r4 = BIT_MASK (r4, 3);
0x000245dc add r3, pc | r3 = 0x48c0a;
0x000245de add r3, r4 | r3 += r4;
0x000245e0 ldr r4, [r3, 0xc] | r4 = imp.g_date_time_unref;
| }
0x000245e2 cmp.w r1, 0x3fc |
0x000245e6 it hi |
| if (r1 > 0x3fc) {
0x000245e8 bichi r1, r1, 3 | __asm ("bichi r1, r1, 3");
| }
| if (r1 <= 0x3fc) {
0x000245ec bhi 0x245fa |
0x000245ee ldr r3, [pc, 0x3c] |
0x000245f0 bic r1, r1, 3 | r1 = BIT_MASK (r1, 3);
0x000245f4 add r3, pc | r3 = 0x48c26;
0x000245f6 add r3, r1 | r3 += r1;
0x000245f8 ldr r1, [r3, 0xc] | r1 = imp.g_date_time_unref;
| }
0x000245fa mov r0, r4 | r0 = r4;
| if (r4 != 0) {
0x000245fc cbz r4, 0x2460c |
0x000245fe ldrb r2, [r4, 0xe] | r2 = *((r4 + 0xe));
0x00024600 subs r3, r1, 0 | r3 = r1 - 0;
0x00024602 it ne |
| if (r3 == r1) {
0x00024604 movne r3, 1 | r3 = 1;
| }
0x00024606 ands.w r0, r3, r2, lsr 2 | r0 = r3 & (r2 >> 2);
| if (r0 != r3) {
0x0002460a bne 0x24610 | goto label_1;
| }
| }
0x0002460c add sp, 8 |
0x0002460e pop {r4, pc} |
| label_1:
0x00024610 movs r3, 0 | r3 = 0;
0x00024612 movs r2, 1 | r2 = 1;
0x00024614 mov r0, r4 | r0 = r4;
0x00024616 str r3, [sp] | *(sp) = r3;
0x00024618 bl 0x20260 | fcn_00020260 (r0, r1, r2, r3);
0x0002461a cdp2 p8, 2, c3, c2, c0, 0 | __asm ("cdp2 p8, 2, c3, c2, c0, 0");
0x0002461e it ne |
| if (r2 == 1) {
0x00024620 movne r0, 1 | r0 = 1;
| }
0x00024622 add sp, 8 |
0x00024624 pop {r4, pc} |
| }
| label_0:
0x00024626 bx lr | return;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x2493c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.g_type_check_instance_is_fundamentally_a () | uint32_t g_type_check_instance_is_fundamentally_a (char * arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
| if (r0 != 0) {
0x0002493c cbz r0, 0x2495e |
0x0002493e ldr r0, [r0] | r0 = *(r0);
| if (r0 == 0) {
0x00024940 cbz r0, 0x2495e | goto label_0;
| }
0x00024942 ldr r0, [r0] | r0 = *(r0);
0x00024944 cmp.w r0, 0x3fc |
0x00024948 it hi |
| if (r0 > 0x3fc) {
0x0002494a bichi r0, r0, 3 | __asm ("bichi r0, r0, 3");
| }
| if (r0 > 0x3fc) {
0x0002494e bhi 0x24960 | goto label_1;
| }
0x00024950 ldr r3, [pc, 0x20] |
0x00024952 bic r0, r0, 3 | r0 = BIT_MASK (r0, 3);
0x00024956 add r3, pc | r3 = 0x492ce;
0x00024958 add r3, r0 | r3 += r0;
0x0002495a ldr r0, [r3, 0xc] | r0 = imp.g_date_time_unref;
| if (r0 != 0) {
0x0002495c cbnz r0, 0x24960 | goto label_1;
| }
| }
| label_0:
0x0002495e bx lr | return r0;
| label_1:
0x00024960 ldrb r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00024962 adds r3, 0xa | r3 += 0xa;
0x00024964 ldr.w r0, [r0, r3, lsl 2] | offset_0 = r3 << 2;
| r0 = *((r0 + offset_0));
0x00024966 movs r3, r4 | r3 = r4;
0x00024968 subs r0, r0, r1 | r0 -= r1;
0x0002496a clz r0, r0 | r0 &= r0;
0x0002496e lsrs r0, r0, 5 | r0 >>= 5;
0x00024970 bx lr | return r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x249e8 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.g_type_check_instance_cast () | void g_type_check_instance_cast (uint32_t arg1, uint32_t arg2) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
0x000249e8 push {r4, r5, r6, lr} |
0x000249ea mov r5, r0 | r5 = r0;
0x000249ec sub sp, 8 |
0x000249ee cmp r0, 0 |
| if (r0 == 0) {
0x000249f0 beq 0x24aac | goto label_0;
| }
0x000249f2 mov r4, r1 | r4 = r1;
0x000249f4 ldr r3, [r0] | r3 = *(r0);
0x000249f6 cmp r3, 0 |
| if (r3 == 0) {
0x000249f8 beq 0x24ab2 | goto label_7;
| }
0x000249fa ldr r3, [r3] | r3 = *(r3);
0x000249fc cmp.w r3, 0x3fc |
0x00024a00 it hi |
| if (r3 > 0x3fc) {
0x00024a02 bichi r0, r3, 3 | __asm ("bichi r0, r3, 3");
| }
| if (r3 > 0x3fc) {
0x00024a06 bhi 0x24ad8 | goto label_8;
| }
0x00024a08 ldr r2, [pc, 0x1a0] |
0x00024a0a bic r1, r3, 3 | r1 = BIT_MASK (r3, 3);
0x00024a0e add r2, pc | r2 = 0x495be;
0x00024a10 add r2, r1 | r2 += r1;
0x00024a12 ldr r0, [r2, 0xc] | r0 = imp.g_date_time_unref;
0x00024a14 mov r2, r0 | r2 = r0;
0x00024a16 mov r6, r0 | r6 = r0;
0x00024a18 cmp r0, 0 |
0x00024a1a bne 0x24ad8 |
| while (1) {
0x00024a1c cmp.w r4, 0x3fc |
0x00024a20 it hi |
| if (r4 > 0x3fc) {
0x00024a22 bichi r1, r4, 3 | __asm ("bichi r1, r4, 3");
| }
| if (r4 <= 0x3fc) {
0x00024a26 bhi 0x24a34 |
0x00024a28 ldr r1, [pc, 0x184] |
0x00024a2a bic ip, r4, 3 | ip = BIT_MASK (r4, 3);
0x00024a2e add r1, pc |
0x00024a30 add r1, ip | r1 += ip;
0x00024a32 ldr r1, [r1, 0xc] | r1 = imp.g_date_time_unref;
| }
0x00024a34 cmp r1, 0 |
0x00024a36 ite eq |
| if (r1 != 0) {
0x00024a38 moveq r2, 0 | r2 = 0;
| }
| if (r1 == 0) {
0x00024a3a andne r2, r2, 1 | r2 &= 1;
| }
0x00024a3e cmp r2, 0 |
| if (r2 != 0) {
0x00024a40 bne 0x24b26 | goto label_9;
| }
| label_1:
0x00024a42 cmp r6, 0 |
| if (r6 == 0) {
0x00024a44 beq 0x24ae2 | goto label_10;
| }
0x00024a46 cmp r3, 0 |
| if (r3 == 0) {
0x00024a48 beq 0x24b48 | goto label_11;
| }
0x00024a4a cmp.w r3, 0x3fc |
0x00024a4e it hi |
| if (r3 > 0x3fc) {
0x00024a50 bichi r3, r3, 3 | __asm ("bichi r3, r3, 3");
| }
| if (r3 > 0x3fc) {
0x00024a54 bhi.w 0x24b96 | goto label_12;
| }
0x00024a58 ldr r2, [pc, 0x158] |
0x00024a5a bic r1, r3, 3 | r1 = BIT_MASK (r3, 3);
0x00024a5e add r2, pc | r2 = 0x49616;
0x00024a60 mov r3, r2 | r3 = r2;
0x00024a62 add r3, r1 | r3 += r1;
0x00024a64 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00024a66 cmp r3, 0 |
| if (r3 != 0) {
0x00024a68 bne.w 0x24b96 | goto label_12;
| }
0x00024a6c ldr r6, [pc, 0x148] |
0x00024a6e add r6, pc | r6 = 0x4962a;
| label_6:
0x00024a70 cmp r4, 0 |
| if (r4 == 0) {
0x00024a72 beq 0x24b50 | goto label_13;
| }
| label_3:
0x00024a74 cmp.w r4, 0x3fc |
0x00024a78 it hi |
| if (r4 > 0x3fc) {
0x00024a7a bichi r4, r4, 3 | __asm ("bichi r4, r4, 3");
| }
| if (r4 <= 0x3fc) {
0x00024a7e bhi 0x24a94 |
0x00024a80 ldr r3, [pc, 0x138] |
0x00024a82 bic r4, r4, 3 | r4 = BIT_MASK (r4, 3);
0x00024a86 add r3, pc | r3 = 0x49646;
0x00024a88 add r3, r4 | r3 += r4;
0x00024a8a ldr r4, [r3, 0xc] | r4 = imp.g_date_time_unref;
| if (r4 == 0) {
0x00024a8c cbnz r4, 0x24a94 |
0x00024a8e ldr r0, [pc, 0x130] |
0x00024a90 add r0, pc | r0 = 0x49656;
0x00024a92 b 0x24a9a |
| }
| } else {
0x00024a94 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00024a96 blx 0x9fd0 | fcn_00009fd0 ();
| }
| label_4:
0x00024a9a ldr r2, [pc, 0x128] |
0x00024a9c mov r3, r6 | r3 = r6;
0x00024a9e str r0, [sp] | *(sp) = r0;
0x00024aa0 movs r1, 0x10 | r1 = 0x10;
0x00024aa2 ldr r0, [pc, 0x124] |
0x00024aa4 add r2, pc | r2 = 0x4966e;
0x00024aa6 add r0, pc | r0 = 0x49674;
0x00024aa8 blx 0x9e0c | g_mutex_lock ();
| label_0:
0x00024aac mov r0, r5 | r0 = r5;
0x00024aae add sp, 8 |
0x00024ab0 pop {r4, r5, r6, pc} |
| label_7:
0x00024ab2 cmp r1, 0 |
| if (r1 == 0) {
0x00024ab4 beq 0x24b56 | goto label_14;
| }
0x00024ab6 cmp.w r1, 0x3fc |
0x00024aba it hi |
| if (r1 > 0x3fc) {
0x00024abc bichi r4, r1, 3 | __asm ("bichi r4, r1, 3");
| }
| if (r1 > 0x3fc) {
0x00024ac0 bhi 0x24ba0 | goto label_15;
| }
0x00024ac2 ldr r3, [pc, 0x108] |
0x00024ac4 bic r4, r4, 3 | r4 = BIT_MASK (r4, 3);
0x00024ac8 add r3, pc | r3 = 0x4969a;
0x00024aca add r3, r4 | r3 += r4;
0x00024acc ldr r4, [r3, 0xc] | r4 = imp.g_date_time_unref;
0x00024ace cmp r4, 0 |
| if (r4 != 0) {
0x00024ad0 bne 0x24ba0 | goto label_15;
| }
0x00024ad2 ldr r3, [pc, 0xfc] |
0x00024ad4 add r3, pc | r3 = 0x496aa;
0x00024ad6 b 0x24b5a | goto label_16;
| label_8:
0x00024ad8 ldrb r2, [r0, 0xe] | r2 = *((r0 + 0xe));
0x00024ada ubfx r2, r2, 2, 1 | r2 = (r2 >> 2) & ((1 << 1) - 1);
0x00024ade mov r6, r2 | r6 = r2;
0x00024ae0 b 0x24a1c |
| }
| if (r3 == 0) {
| label_10:
0x00024ae2 cbz r3, 0x24b3a | goto label_17;
| }
0x00024ae4 cmp.w r3, 0x3fc |
0x00024ae8 it hi |
| if (r3 > 0x3fc) {
0x00024aea bichi r3, r3, 3 | __asm ("bichi r3, r3, 3");
| }
| if (r3 > 0x3fc) {
0x00024aee bhi 0x24b8c | goto label_18;
| }
0x00024af0 ldr r2, [pc, 0xe0] |
0x00024af2 bic r3, r3, 3 | r3 = BIT_MASK (r3, 3);
0x00024af6 add r2, pc | r2 = 0x496ce;
0x00024af8 add r3, r2 | r3 += r2;
0x00024afa ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00024afc cmp r3, 0 |
| if (r3 != 0) {
0x00024afe bne 0x24b8c | goto label_18;
| }
0x00024b00 ldr r6, [pc, 0xd4] |
0x00024b02 add r6, pc | r6 = 0x496de;
| if (r4 == 0) {
| label_5:
0x00024b04 cbz r4, 0x24b42 | goto label_19;
| }
| label_2:
0x00024b06 cmp.w r4, 0x3fc |
0x00024b0a it hi |
| if (r4 > 0x3fc) {
0x00024b0c bichi r4, r4, 3 | __asm ("bichi r4, r4, 3");
| }
| if (r4 > 0x3fc) {
0x00024b10 bhi 0x24b6e | goto label_20;
| }
0x00024b12 ldr r3, [pc, 0xc8] |
0x00024b14 bic r4, r4, 3 | r4 = BIT_MASK (r4, 3);
0x00024b18 add r3, pc | r3 = 0x496fa;
0x00024b1a add r3, r4 | r3 += r4;
0x00024b1c ldr r4, [r3, 0xc] | r4 = imp.g_date_time_unref;
| if (r4 != 0) {
0x00024b1e cbnz r4, 0x24b6e | goto label_20;
| }
0x00024b20 ldr r0, [pc, 0xbc] |
0x00024b22 add r0, pc | r0 = 0x49706;
0x00024b24 b 0x24b74 | goto label_21;
| label_9:
0x00024b26 movs r3, 0 | r3 = 0;
0x00024b28 movs r2, 1 | r2 = 1;
0x00024b2a str r3, [sp] | *(sp) = r3;
0x00024b2c bl 0x20260 | r0 = fcn_00020260 (r0, r1, r2, r3);
0x00024b30 cmp r0, 0 |
| if (r0 != 0) {
0x00024b32 bne 0x24aac | goto label_0;
| }
0x00024b34 ldr r3, [r5] | r3 = *(r5);
0x00024b36 ldr r3, [r3] | r3 = *(r3);
0x00024b38 b 0x24a42 | goto label_1;
| label_17:
0x00024b3a ldr r6, [pc, 0xa8] |
0x00024b3c add r6, pc | r6 = 0x49726;
0x00024b3e cmp r4, 0 |
| if (r4 != 0) {
0x00024b40 bne 0x24b06 | goto label_2;
| }
| label_19:
0x00024b42 ldr r0, [pc, 0xa4] |
0x00024b44 add r0, pc | r0 = 0x49732;
0x00024b46 b 0x24b74 | goto label_21;
| label_11:
0x00024b48 ldr r6, [pc, 0xa0] |
0x00024b4a add r6, pc | r6 = 0x4973a;
0x00024b4c cmp r4, 0 |
| if (r4 != 0) {
0x00024b4e bne 0x24a74 | goto label_3;
| }
| label_13:
0x00024b50 ldr r0, [pc, 0x9c] |
0x00024b52 add r0, pc | r0 = 0x49746;
0x00024b54 b 0x24a9a | goto label_4;
| label_14:
0x00024b56 ldr r3, [pc, 0x9c] |
0x00024b58 add r3, pc | r3 = 0x49752;
| do {
| label_16:
0x00024b5a ldr r2, [pc, 0x9c] |
0x00024b5c movs r1, 0x10 | r1 = 0x10;
0x00024b5e ldr r0, [pc, 0x9c] |
0x00024b60 add r2, pc | r2 = 0x4975e;
0x00024b62 add r0, pc | r0 = 0x49764;
0x00024b64 blx 0x9e0c | g_mutex_lock ();
0x00024b68 mov r0, r5 | r0 = r5;
0x00024b6a add sp, 8 |
0x00024b6c pop {r4, r5, r6, pc} |
| label_20:
0x00024b6e ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00024b70 blx 0x9fd0 | fcn_00009fd0 ();
| label_21:
0x00024b74 str r0, [sp] | *(sp) = r0;
0x00024b76 mov r3, r6 | r3 = r6;
0x00024b78 ldr r2, [pc, 0x84] |
0x00024b7a movs r1, 0x10 | r1 = 0x10;
0x00024b7c ldr r0, [pc, 0x84] |
0x00024b7e add r2, pc | r2 = 0x49782;
0x00024b80 add r0, pc | r0 = 0x49788;
0x00024b82 blx 0x9e0c | g_mutex_lock ();
0x00024b86 mov r0, r5 | r0 = r5;
0x00024b88 add sp, 8 |
0x00024b8a pop {r4, r5, r6, pc} |
| label_18:
0x00024b8c ldr r0, [r3, 0x18] | r0 = *((r3 + 0x18));
0x00024b8e blx 0x9fd0 | r0 = fcn_00009fd0 ();
0x00024b92 mov r6, r0 | r6 = r0;
0x00024b94 b 0x24b04 | goto label_5;
| label_12:
0x00024b96 ldr r0, [r3, 0x18] | r0 = *((r3 + 0x18));
0x00024b98 blx 0x9fd0 | r0 = fcn_00009fd0 ();
0x00024b9c mov r6, r0 | r6 = r0;
0x00024b9e b 0x24a70 | goto label_6;
| label_15:
0x00024ba0 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00024ba2 blx 0x9fd0 | r0 = fcn_00009fd0 ();
0x00024ba6 mov r3, r0 | r3 = r0;
0x00024ba8 b 0x24b5a |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x24e2c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.g_type_check_instance () | void g_type_check_instance (int16_t arg1) {
| r0 = arg1;
0x00024e2c push {r4, lr} |
0x00024e2e mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00024e30 cbz r0, 0x24e82 | goto label_3;
| }
0x00024e32 ldr r4, [r0] | r4 = *(r0);
| if (r4 == 0) {
0x00024e34 cbz r4, 0x24e94 | goto label_4;
| }
0x00024e36 ldr r3, [r4] | r3 = *(r4);
0x00024e38 cmp.w r3, 0x3fc |
| if (r3 <= 0x3fc) {
0x00024e3c bhi 0x24e54 |
0x00024e3e ldr r2, [pc, 0x78] |
0x00024e40 bic r1, r3, 3 | r1 = BIT_MASK (r3, 3);
0x00024e44 add r2, pc |
0x00024e46 add r2, r1 | r2 += r1;
0x00024e48 ldr r2, [r2, 0xc] | r2 = *(0x49d0e);
| if (r2 != 0) {
0x00024e4a cbnz r2, 0x24ea6 | goto label_5;
| }
| if (r3 == 0) {
0x00024e4c cbz r3, 0x24e7c | goto label_6;
| }
0x00024e4e ldr r3, [pc, 0x6c] |
0x00024e50 add r3, pc | r3 = 0x49d12;
0x00024e52 b 0x24e6a |
| } else {
0x00024e54 bic r2, r3, 3 | r2 = BIT_MASK (r3, 3);
0x00024e58 ldrb r3, [r2, 0xe] | r3 = *((r2 + 0xe));
0x00024e5a lsls r0, r3, 0x1d | r0 = r3 << 0x1d;
| if (r0 < r3) {
0x00024e5c bpl 0x24e62 |
| label_0:
0x00024e5e movs r0, 1 | r0 = 1;
0x00024e60 pop {r4, pc} |
| }
| label_1:
0x00024e62 ldr r0, [r2, 0x18] | r0 = *((r2 + 0x18));
0x00024e64 blx 0x9fd0 | r0 = fcn_00009fd0 ();
0x00024e68 mov r3, r0 | r3 = r0;
| }
| do {
| label_2:
0x00024e6a ldr r2, [pc, 0x54] |
0x00024e6c movs r1, 0x10 | r1 = 0x10;
0x00024e6e ldr r0, [pc, 0x54] |
0x00024e70 add r2, pc | r2 = 0x49d36;
0x00024e72 add r0, pc | r0 = 0x49d3c;
0x00024e74 blx 0x9e0c | g_mutex_lock ();
0x00024e78 movs r0, 0 | r0 = 0;
0x00024e7a pop {r4, pc} |
| label_6:
0x00024e7c ldr r3, [pc, 0x48] |
0x00024e7e add r3, pc | r3 = 0x49d4a;
0x00024e80 b 0x24e6a |
| } while (1);
| label_3:
0x00024e82 ldr r2, [pc, 0x48] |
0x00024e84 movs r1, 0x10 | r1 = 0x10;
0x00024e86 ldr r0, [pc, 0x48] |
0x00024e88 add r2, pc | r2 = 0x49d5a;
0x00024e8a add r0, pc | r0 = 0x49d60;
0x00024e8c blx 0x9e0c | g_mutex_lock ();
0x00024e90 mov r0, r4 | r0 = r4;
0x00024e92 pop {r4, pc} |
| label_4:
0x00024e94 ldr r2, [pc, 0x3c] |
0x00024e96 movs r1, 0x10 | r1 = 0x10;
0x00024e98 ldr r0, [pc, 0x3c] |
0x00024e9a add r2, pc | r2 = 0x49d72;
0x00024e9c add r0, pc | r0 = 0x49d78;
0x00024e9e blx 0x9e0c | g_mutex_lock ();
0x00024ea2 mov r0, r4 | r0 = r4;
0x00024ea4 pop {r4, pc} |
| label_5:
0x00024ea6 ldrb r1, [r2, 0xe] | r1 = *((r2 + 0xe));
0x00024ea8 lsls r1, r1, 0x1d | r1 <<= 0x1d;
| if (r1 < r1) {
0x00024eaa bmi 0x24e5e | goto label_0;
| }
0x00024eac cmp r3, 0 |
| if (r3 != 0) {
0x00024eae bne 0x24e62 | goto label_1;
| }
0x00024eb0 ldr r3, [pc, 0x28] |
0x00024eb2 add r3, pc | r3 = 0x49d92;
0x00024eb4 b 0x24e6a | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x2493c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.g_type_check_instance_is_fundamentally_a () | uint32_t g_type_check_instance_is_fundamentally_a (char * arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
| if (r0 != 0) {
0x0002493c cbz r0, 0x2495e |
0x0002493e ldr r0, [r0] | r0 = *(r0);
| if (r0 == 0) {
0x00024940 cbz r0, 0x2495e | goto label_0;
| }
0x00024942 ldr r0, [r0] | r0 = *(r0);
0x00024944 cmp.w r0, 0x3fc |
0x00024948 it hi |
| if (r0 > 0x3fc) {
0x0002494a bichi r0, r0, 3 | __asm ("bichi r0, r0, 3");
| }
| if (r0 > 0x3fc) {
0x0002494e bhi 0x24960 | goto label_1;
| }
0x00024950 ldr r3, [pc, 0x20] |
0x00024952 bic r0, r0, 3 | r0 = BIT_MASK (r0, 3);
0x00024956 add r3, pc | r3 = 0x492ce;
0x00024958 add r3, r0 | r3 += r0;
0x0002495a ldr r0, [r3, 0xc] | r0 = imp.g_date_time_unref;
| if (r0 != 0) {
0x0002495c cbnz r0, 0x24960 | goto label_1;
| }
| }
| label_0:
0x0002495e bx lr | return r0;
| label_1:
0x00024960 ldrb r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00024962 adds r3, 0xa | r3 += 0xa;
0x00024964 ldr.w r0, [r0, r3, lsl 2] | offset_0 = r3 << 2;
| r0 = *((r0 + offset_0));
0x00024966 movs r3, r4 | r3 = r4;
0x00024968 subs r0, r0, r1 | r0 -= r1;
0x0002496a clz r0, r0 | r0 &= r0;
0x0002496e lsrs r0, r0, 5 | r0 >>= 5;
0x00024970 bx lr | return r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x254d4 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.g_type_class_add_private () | void g_type_class_add_private (uint32_t arg1, int16_t arg2) {
| int16_t var_0h;
| r0 = arg1;
| r1 = arg2;
0x000254d4 push {r4, r5, r6, lr} |
0x000254d6 mov r4, r1 | r4 = r1;
0x000254d8 ldr r3, [r0] | r3 = *(r0);
0x000254da sub sp, 8 |
0x000254dc cmp.w r3, 0x3fc |
0x000254e0 it hi |
| if (r3 > 0x3fc) {
0x000254e2 bichi r5, r3, 3 | __asm ("bichi r5, r3, 3");
| }
| if (r3 <= 0x3fc) {
0x000254e6 bhi 0x254f4 |
0x000254e8 ldr r2, [pc, 0x10c] |
0x000254ea bic r1, r3, 3 | r1 = BIT_MASK (r3, 3);
0x000254ee add r2, pc | r2 = 0x4aaea;
0x000254f0 add r2, r1 | r2 += r1;
0x000254f2 ldr r5, [r2, 0xc] | r5 = *(0x4aaf6);
| }
| if (r4 == 0) {
0x000254f4 cbnz r4, 0x25510 |
0x000254f6 ldr r1, [pc, 0x104] |
0x000254f8 ldr r2, [pc, 0x104] |
0x000254fa ldr r0, [pc, 0x108] |
0x000254fc add r1, pc |
0x000254fe add r2, pc | r2 = 0x4ab02;
0x00025500 add.w r1, r1, 0x520 | r1 = 0x4b01e;
0x00025504 add r0, pc | r0 = 0x4ab0e;
0x00025506 add sp, 8 |
0x00025508 pop.w {r4, r5, r6, lr} |
0x0002550c b.w 0x9c08 | void (*0x9c08)() ();
| }
0x00025510 cmp.w r4, 0x10000 |
| if (r4 >= 0x10000) {
0x00025514 bhs 0x25544 | goto label_1;
| }
0x00025516 cmp r5, 0 |
| if (r5 == 0) {
0x00025518 beq 0x255c8 | goto label_2;
| }
0x0002551a ldrb r2, [r5, 0xe] | r2 = *((r5 + 0xe));
0x0002551c lsls r2, r2, 0x1d | r2 <<= 0x1d;
| if (r2 < r2) {
0x0002551e bpl 0x2552a |
0x00025520 ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
| if (r2 == 0) {
0x00025522 cbz r2, 0x2552a | goto label_3;
| }
0x00025524 ldr r1, [r2, 0x20] | r1 = *((r2 + 0x20));
0x00025526 cmp r1, r0 |
| if (r1 == r0) {
0x00025528 beq 0x25568 | goto label_4;
| }
| }
| if (r3 != 0) {
| label_3:
0x0002552a cbnz r3, 0x2555e | goto label_5;
| }
0x0002552c ldr r3, [pc, 0xd8] |
0x0002552e add r3, pc | r3 = 0x4ab3a;
| do {
| label_0:
0x00025530 ldr r2, [pc, 0xd8] |
0x00025532 movs r1, 0x10 | r1 = 0x10;
0x00025534 ldr r0, [pc, 0xd8] |
0x00025536 add r2, pc | r2 = 0x4ab46;
0x00025538 add r0, pc | r0 = 0x4ab4c;
0x0002553a add sp, 8 |
0x0002553c pop.w {r4, r5, r6, lr} |
0x00025540 b.w 0x9e08 | void (*0x9e08)() ();
| label_1:
0x00025544 ldr r1, [pc, 0xcc] |
0x00025546 ldr r2, [pc, 0xd0] |
0x00025548 ldr r0, [pc, 0xd0] |
0x0002554a add r1, pc |
0x0002554c add r2, pc | r2 = 0x4ab6a;
0x0002554e add.w r1, r1, 0x520 | r1 = 0x4b082;
0x00025552 add r0, pc | r0 = 0x4ab72;
0x00025554 add sp, 8 |
0x00025556 pop.w {r4, r5, r6, lr} |
0x0002555a b.w 0x9c08 | void (*0x9c08)() ();
| label_5:
0x0002555e ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00025560 blx 0x9fd0 | r0 = fcn_00009fd0 ();
0x00025564 mov r3, r0 | r3 = r0;
0x00025566 b 0x25530 |
| } while (1);
| label_4:
0x00025568 ldr r3, [r5, 0x2c] | r3 = *((r5 + 0x2c));
| if (r3 != 0) {
0x0002556a cbz r3, 0x2558e |
0x0002556c cmp.w r3, 0x3fc |
0x00025570 it hi |
| if (r3 > 0x3fc) {
0x00025572 bichi r3, r3, 3 | __asm ("bichi r3, r3, 3");
| }
| if (r3 <= 0x3fc) {
0x00025576 bhi 0x25584 |
0x00025578 ldr r1, [pc, 0xa4] |
0x0002557a bic r3, r3, 3 | r3 = BIT_MASK (r3, 3);
0x0002557e add r1, pc | r1 = 0x4aba2;
0x00025580 add r3, r1 | r3 += r1;
0x00025582 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
| }
0x00025584 ldr r3, [r3, 0x14] | r3 = *((r3 + 0x14));
0x00025586 ldrh r2, [r2, 0x26] | r2 = *((r2 + 0x26));
0x00025588 ldrh r3, [r3, 0x26] | r3 = *((r3 + 0x26));
0x0002558a cmp r2, r3 |
| if (r2 != r3) {
0x0002558c bne 0x255e4 | goto label_6;
| }
| }
0x0002558e ldr r6, [pc, 0x94] |
0x00025590 adds r4, 7 | r4 += 7;
0x00025592 add r6, pc | r6 = 0x4abbc;
0x00025594 mov r0, r6 | r0 = r6;
0x00025596 blx 0x9fb4 | fcn_00009fb4 ();
0x0002559a ldr r2, [r5, 0x14] | r2 = *((r5 + 0x14));
0x0002559c ldrh r3, [r2, 0x26] | r3 = *((r2 + 0x26));
0x0002559e add r3, r4 | r3 += r4;
0x000255a0 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x000255a4 cmp.w r3, 0x10000 |
| if (r3 > 0x10000) {
0x000255a8 blo 0x255d0 |
0x000255aa ldr r3, [pc, 0x7c] |
0x000255ac movw r2, 0x1231 | r2 = 0x1231;
0x000255b0 ldr r4, [pc, 0x78] |
0x000255b2 ldr r1, [pc, 0x7c] |
0x000255b4 ldr r0, [pc, 0x7c] |
0x000255b6 add r3, pc |
0x000255b8 add r4, pc | r4 = 0x4abe8;
0x000255ba add.w r3, r3, 0x520 | r3 = 0x4b104;
0x000255be add r1, pc | r1 = 0x4abf4;
0x000255c0 str r4, [sp] | *(sp) = r4;
0x000255c2 add r0, pc | r0 = 0x4abfa;
0x000255c4 blx 0x9bf0 | g_array_new ();
| if (r3 == 0) {
| label_2:
0x000255c8 cbz r3, 0x255de | goto label_7;
| }
0x000255ca ldr r3, [pc, 0x6c] |
0x000255cc add r3, pc | r3 = 0x4ac0a;
0x000255ce b 0x25530 | goto label_0;
| }
0x000255d0 mov r0, r6 | r0 = r6;
0x000255d2 strh r3, [r2, 0x26] | *((r2 + 0x26)) = r3;
0x000255d4 add sp, 8 |
0x000255d6 pop.w {r4, r5, r6, lr} |
0x000255da b.w 0x9dec | void (*0x9dec)() ();
| label_7:
0x000255de ldr r3, [pc, 0x5c] |
0x000255e0 add r3, pc | r3 = 0x4ac22;
0x000255e2 b 0x25530 | goto label_0;
| label_6:
0x000255e4 ldr r2, [pc, 0x58] |
0x000255e6 movs r1, 0x10 | r1 = 0x10;
0x000255e8 ldr r0, [pc, 0x58] |
0x000255ea add r2, pc | r2 = 0x4ac2e;
0x000255ec add r0, pc | r0 = 0x4ac34;
0x000255ee add sp, 8 |
0x000255f0 pop.w {r4, r5, r6, lr} |
0x000255f4 b.w 0x9e08 | return void (*0x9e08)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x25228 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.g_type_value_table_peek () | void g_type_value_table_peek (char * arg1) {
| r0 = arg1;
0x00025228 cmp.w r0, 0x3fc |
0x0002522c push {r3, r4, r5, r6, r7, lr} |
0x0002522e mov r4, r0 | r4 = r0;
0x00025230 it hi |
| if (r0 > 0x3fc) {
0x00025232 bichi r5, r0, 3 | __asm ("bichi r5, r0, 3");
| }
| if (r0 <= 0x3fc) {
0x00025236 bhi 0x25280 |
0x00025238 ldr r6, [pc, 0x118] |
0x0002523a bic r3, r0, 3 | r3 = BIT_MASK (r0, 3);
0x0002523e lsrs r7, r0, 2 | r7 = r0 >> 2;
0x00025240 add r6, pc | r6 = 0x4a598;
0x00025242 add r3, r6 | r3 += r6;
0x00025244 ldr r5, [r3, 0xc] | r5 = *((r3 + 0xc));
| if (r5 != 0) {
0x00025246 cbnz r5, 0x25280 | goto label_5;
| }
0x00025248 mov r0, r6 | r0 = r6;
0x0002524a blx 0x9c5c | g_slist_prepend ();
0x0002524e mov r0, r6 | r0 = r6;
0x00025250 blx 0x9de0 | fcn_00009de0 ();
0x00025254 ldr r2, [pc, 0x100] |
0x00025256 mov r3, r4 | r3 = r4;
0x00025258 ldr r0, [pc, 0x100] |
0x0002525a movs r1, 0x10 | r1 = 0x10;
0x0002525c add r2, pc | r2 = 0x4a5b8;
0x0002525e add r0, pc | r0 = 0x4a5be;
0x00025260 blx 0x9e0c | g_mutex_lock ();
0x00025264 cmp r4, 0 |
| if (r4 != 0) {
0x00025266 bne 0x2533e | goto label_6;
| }
0x00025268 ldr r3, [pc, 0xf4] |
0x0002526a add r3, pc | r3 = 0x4a5ce;
| label_2:
0x0002526c ldr r2, [pc, 0xf4] |
0x0002526e movs r1, 0x10 | r1 = 0x10;
0x00025270 ldr r0, [pc, 0xf4] |
0x00025272 movs r4, 0 | r4 = 0;
0x00025274 add r2, pc | r2 = 0x4a5dc;
0x00025276 add r0, pc | r0 = 0x4a5e2;
0x00025278 blx 0x9e0c | g_mutex_lock ();
| label_1:
0x0002527c mov r0, r4 | r0 = r4;
0x0002527e pop {r3, r4, r5, r6, r7, pc} |
| }
| label_5:
0x00025280 dmb ish | __asm ("dmb ish");
0x00025284 ldr r3, [r5] | r3 = *(r5);
0x00025286 dmb ish | __asm ("dmb ish");
0x0002528a cmp r3, 0 |
| if (r3 != 0) {
0x0002528c bne 0x2531e | goto label_7;
| }
| label_3:
0x0002528e ldr r0, [pc, 0xdc] |
0x00025290 add r0, pc | r0 = 0x4a602;
0x00025292 blx 0x9c5c | g_slist_prepend ();
0x00025296 ldr.w ip, [pc, 0xd8] |
0x0002529a add ip, pc | ip = 0x4a610;
| do {
0x0002529c ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
| if (r3 == 0) {
0x0002529e cbz r3, 0x252fc | goto label_8;
| }
0x000252a0 dmb ish | __asm ("dmb ish");
0x000252a4 ldr r3, [r5] | r3 = *(r5);
0x000252a6 dmb ish | __asm ("dmb ish");
| if (r3 == 0) {
0x000252aa cbz r3, 0x252fc | goto label_8;
| }
0x000252ac ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x000252ae ldr r4, [r3] | r4 = *(r3);
0x000252b0 ldr r2, [r4] | r2 = *(r4);
0x000252b2 cmp r2, 0 |
| if (r2 != 0) {
0x000252b4 bne 0x25332 | goto label_9;
| }
0x000252b6 ldrb r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x000252b8 adds r3, 0xa | r3 += 0xa;
0x000252ba ldr.w r3, [r5, r3, lsl 2] | offset_0 = r3 << 2;
| r3 = *((r5 + offset_0));
0x000252be cmp r3, 8 |
| if (r3 != 8) {
0x000252c0 bne 0x252f0 | goto label_10;
| }
0x000252c2 ldr r0, [r5, 0xc] | r0 = *((r5 + 0xc));
0x000252c4 ubfx r0, r0, 8, 9 | r0 = (r0 >> 8) & ((1 << 9) - 1);
| if (r0 == 0) {
0x000252c8 cbz r0, 0x252f0 | goto label_10;
| }
0x000252ca ldr r1, [r5, 0x24] | r1 = *((r5 + 0x24));
0x000252cc subs r1, 4 | r1 -= 4;
| label_0:
0x000252ce ldr r4, [r1, 4]! | r4 = *((r1 += 4));
0x000252d2 adds r2, 1 | r2++;
0x000252d4 bic r3, r4, 3 | r3 = BIT_MASK (r4, 3);
0x000252d8 cmp.w r4, 0x3fc |
0x000252dc add r3, ip | r3 += ip;
0x000252de bic r5, r4, 3 | r5 = BIT_MASK (r4, 3);
0x000252e2 it ls |
| if (r4 > 0x3fc) {
0x000252e4 ldrls r5, [r3, 0xc] | r5 = *((r3 + 0xc));
| }
0x000252e6 ldrb r3, [r5, 0xe] | r3 = *((r5 + 0xe));
0x000252e8 lsls r3, r3, 0x1d | r3 <<= 0x1d;
0x000252ea bmi 0x2529c |
| } while (r3 < r3);
0x000252ec cmp r0, r2 |
| if (r0 != r2) {
0x000252ee bne 0x252ce | goto label_0;
| }
| label_10:
0x000252f0 ldr r0, [pc, 0x80] |
0x000252f2 movs r4, 0 | r4 = 0;
0x000252f4 add r0, pc | r0 = 0x4a66c;
0x000252f6 blx 0x9de0 | fcn_00009de0 ();
0x000252fa b 0x2527c | goto label_1;
| label_8:
0x000252fc ldr r0, [pc, 0x78] |
0x000252fe add r0, pc | r0 = 0x4a67a;
0x00025300 blx 0x9de0 | fcn_00009de0 ();
0x00025302 stcl p1, c11, [lr, -0x250]! | __asm ("stcl p1, c11, [lr, -0x250]!");
0x00025306 cmp.w r4, 0x3fc |
0x0002530a it ls |
| if (r4 > 0x3fc) {
0x0002530c lsrls r7, r4, 2 | r7 = r4 >> 2;
| }
| if (r4 < 0x3fc) {
0x0002530e bls 0x2533e | goto label_6;
| }
0x00025310 bic r4, r4, 3 | r4 = BIT_MASK (r4, 3);
| label_4:
0x00025314 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
0x00025316 blx 0x9fd0 | r0 = fcn_00009fd0 ();
0x0002531a mov r3, r0 | r3 = r0;
0x0002531c b 0x2526c | goto label_2;
| label_7:
0x0002531e ldrb r3, [r5, 0xe] | r3 = *((r5 + 0xe));
0x00025320 lsls r2, r3, 0x1c | r2 = r3 << 0x1c;
| if (r2 >= r3) {
0x00025322 bpl 0x2528e | goto label_3;
| }
0x00025324 ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x00025326 ldr r4, [r3] | r4 = *(r3);
0x00025328 mov r0, r4 | r0 = r4;
0x0002532a pop {r3, r4, r5, r6, r7, pc} |
0x0002532c ldr r3, [pc, 0x4c] |
0x0002532e add r3, pc | r3 = 0x4a6ae;
0x00025330 b 0x2526c | goto label_2;
| label_9:
0x00025332 ldr r0, [pc, 0x4c] |
0x00025334 add r0, pc | r0 = 0x4a6ba;
0x00025336 blx 0x9de0 | fcn_00009de0 ();
0x0002533a mov r0, r4 | r0 = r4;
0x0002533c pop {r3, r4, r5, r6, r7, pc} |
| label_6:
0x0002533e ldr r3, [pc, 0x44] |
0x00025340 add r3, pc | r3 = 0x4a6ca;
0x00025342 add.w r3, r3, r7, lsl 2 | r3 += (r7 << 2);
0x00025346 ldr r4, [r3, 0xc] | r4 = *((r3 + 0xc));
0x00025348 cmp r4, 0 |
| if (r4 != 0) {
0x0002534a bne 0x25314 | goto label_4;
| }
0x0002534c ldr r3, [pc, 0x38] |
0x0002534e add r3, pc | r3 = 0x4a6da;
0x00025350 b 0x2526c | goto label_2;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x26b18 */
| #include <stdint.h>
|
; (fcn) sym.g_value_fits_pointer () | void g_value_fits_pointer (int16_t arg1) {
| r0 = arg1;
0x00026b18 push {r4, lr} |
0x00026b1a mov r4, r0 | r4 = r0;
| if (r0 != 0) {
0x00026b1c cbz r0, 0x26b32 |
0x00026b1e ldr r0, [r0] | r0 = *(r0);
0x00026b20 bl 0x25228 | r0 = g_type_value_table_peek ();
0x00026b24 mov r4, r0 | r4 = r0;
| if (r0 == 0) {
0x00026b26 cbz r0, 0x26b48 | goto label_0;
| }
0x00026b28 ldr r0, [r0, 0xc] | r0 = *((r0 + 0xc));
0x00026b2a subs r0, 0 |
0x00026b2c it ne |
| if (r0 == 0) {
0x00026b2e movne r0, 1 | r0 = 1;
| }
0x00026b30 pop {r4, pc} |
| }
0x00026b32 ldr r1, [pc, 0x2c] |
0x00026b34 ldr r2, [pc, 0x2c] |
0x00026b36 ldr r0, [pc, 0x30] |
0x00026b38 add r1, pc | r1 = 0x4d69e;
0x00026b3a add r2, pc | r2 = 0x4d6a2;
0x00026b3c adds r1, 0x30 | r1 += 0x30;
0x00026b3e add r0, pc | r0 = 0x4d6ac;
0x00026b40 blx 0x9c0c | fcn_00009c0c ();
0x00026b44 mov r0, r4 | r0 = r4;
0x00026b46 pop {r4, pc} |
| label_0:
0x00026b48 ldr r1, [pc, 0x20] |
0x00026b4a ldr r2, [pc, 0x24] |
0x00026b4c ldr r0, [pc, 0x24] |
0x00026b4e add r1, pc | r1 = 0x4d6be;
0x00026b50 add r2, pc | r2 = 0x4d6c6;
0x00026b52 adds r1, 0x30 | r1 += 0x30;
0x00026b54 add r0, pc | r0 = 0x4d6cc;
0x00026b56 blx 0x9c0c | fcn_00009c0c ();
0x00026b5a mov r0, r4 | r0 = r4;
0x00026b5c pop {r4, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x14a04 */
| #include <stdint.h>
|
; (fcn) sym.g_value_get_object () | void g_value_get_object (int16_t arg1) {
| r0 = arg1;
0x00014a04 invalid |
0x00014a08 ldr r3, [r0] | r3 = *(r0);
0x00014a0a mov r4, r0 | r4 = r0;
0x00014a0c cmp r3, 0x50 |
| if (r3 != 0x50) {
0x00014a0e beq 0x14a18 |
0x00014a10 movs r1, 0x50 | r1 = 0x50;
0x00014a12 bl 0x250fc | r0 = g_type_check_value_holds ();
| if (r0 == 0) {
0x00014a16 cbz r0, 0x14a1c | goto label_0;
| }
| }
0x00014a18 ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x00014a1a pop {r4, pc} |
| label_0:
0x00014a1c ldr r1, [pc, 0x14] |
0x00014a1e ldr r2, [pc, 0x18] |
0x00014a20 ldr r0, [pc, 0x18] |
0x00014a22 add r1, pc | r1 = 0x2945a;
0x00014a24 add r2, pc | r2 = 0x29462;
0x00014a26 addw r1, r1, 0x5fc | __asm ("addw r1, r1, 0x5fc");
0x00014a2a add r0, pc | r0 = 0x2946a;
0x00014a2c blx 0x9c0c | fcn_00009c0c ();
0x00014a30 movs r0, 0 | r0 = 0;
0x00014a32 pop {r4, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x26c00 */
| #include <stdint.h>
|
; (fcn) sym.g_value_init_from_instance () | void g_value_init_from_instance (uint32_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| if (? >= ?) {
0x00026c00 ldrbmi lr, [r0, sp, lsr 18]! |
| }
0x00026c04 sub sp, 0x10 |
0x00026c06 cmp r0, 0 |
| if (r0 == 0) {
0x00026c08 beq 0x26cac | goto label_0;
| }
0x00026c0a mov r4, r0 | r4 = r0;
0x00026c0c ldr r6, [r0] | r6 = *(r0);
0x00026c0e cmp r6, 0 |
| if (r6 != 0) {
0x00026c10 bne 0x26cac | goto label_0;
| }
0x00026c12 mov r5, r1 | r5 = r1;
0x00026c14 movs r1, 0x50 | r1 = 0x50;
0x00026c16 mov r0, r5 | r0 = r5;
0x00026c18 bl 0x2493c | r0 = g_type_check_instance_is_fundamentally_a ();
0x00026c1c cmp r0, 0 |
| if (r0 != 0) {
0x00026c1e bne 0x26cf4 | goto label_1;
| }
0x00026c20 mov r0, r5 | r0 = r5;
0x00026c22 bl 0x24e2c | r0 = g_type_check_instance ();
0x00026c26 cmp r0, 0 |
| if (r0 == 0) {
0x00026c28 beq 0x26cc4 | goto label_2;
| }
0x00026c2a ldr r3, [r5] | r3 = *(r5);
0x00026c2c ldr.w sb, [r3] | sb = *(r3);
0x00026c30 mov r0, sb | r0 = sb;
0x00026c32 bl 0x25228 | g_type_value_table_peek ();
0x00026c36 ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x00026c38 mov r7, r0 | r7 = r0;
0x00026c3a ldrb r2, [r3] | r2 = *(r3);
0x00026c3c cmp r2, 0x70 |
| if (r2 != 0x70) {
0x00026c3e bne 0x26cdc | goto label_3;
| }
0x00026c40 ldrb r6, [r3, 1] | r6 = *((r3 + 1));
0x00026c42 cmp r6, 0 |
| if (r6 != 0) {
0x00026c44 bne 0x26cdc | goto label_3;
| }
0x00026c46 mov sl, r4 | sl = r4;
0x00026c48 str r5, [sp, 8] | var_8h = r5;
0x00026c4a str sb, [sl], 8 | *(sl) = sb;
| sl += 8;
0x00026c4e mov r0, r4 | r0 = r4;
0x00026c50 str r6, [r4, 8] | *((r4 + 8)) = r6;
0x00026c52 str r6, [sp, 0xc] | var_ch = r6;
0x00026c54 str.w r6, [sl, 4] | __asm ("str.w r6, [sl, 4]");
0x00026c58 str.w r6, [sl, 8] | __asm ("str.w r6, [sl, 8]");
0x00026c5c str.w r6, [sl, 0xc] | __asm ("str.w r6, [sl, 0xc]");
0x00026c60 ldr r3, [r7] | r3 = *(r7);
0x00026c62 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00026c64 ldr r5, [r7, 0x14] | r5 = *((r7 + 0x14));
0x00026c66 add r2, sp, 8 | r2 += var_8h;
0x00026c68 mov r3, r6 | r3 = r6;
0x00026c6a movs r1, 1 | r1 = 1;
0x00026c6c mov r0, r4 | r0 = r4;
0x00026c6e blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00026c70 mov r8, r0 | r8 = r0;
| if (r0 == 0) {
0x00026c72 cbz r0, 0x26ca6 | goto label_4;
| }
0x00026c74 str r0, [sp] | *(sp) = r0;
0x00026c76 movs r1, 0x10 | r1 = 0x10;
0x00026c78 ldr r3, [pc, 0x94] |
0x00026c7a ldr r2, [pc, 0x98] |
0x00026c7c ldr r0, [pc, 0x98] |
0x00026c7e add r3, pc | r3 = 0x4d992;
0x00026c80 add r2, pc | r2 = 0x4d99a;
0x00026c82 add r0, pc | r0 = 0x4d99e;
0x00026c84 blx 0x9e0c | g_mutex_lock ();
0x00026c88 mov r0, r8 | r0 = r8;
0x00026c8a blx 0x9ac8 | fcn_00009ac8 ();
0x00026c8e str.w sb, [r4] | __asm ("str.w sb, [r4]");
0x00026c92 mov r0, r4 | r0 = r4;
0x00026c94 str r6, [r4, 8] | *((r4 + 8)) = r6;
0x00026c96 str.w r6, [sl, 4] | __asm ("str.w r6, [sl, 4]");
0x00026c9a str.w r6, [sl, 8] | __asm ("str.w r6, [sl, 8]");
0x00026c9e str.w r6, [sl, 0xc] | __asm ("str.w r6, [sl, 0xc]");
0x00026ca2 ldr r3, [r7] | r3 = *(r7);
0x00026ca4 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
| do {
| label_4:
0x00026ca6 add sp, 0x10 |
0x00026ca8 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_0:
0x00026cac ldr r1, [pc, 0x6c] |
0x00026cae ldr r2, [pc, 0x70] |
0x00026cb0 ldr r0, [pc, 0x70] |
0x00026cb2 add r1, pc | r1 = 0x4d9d2;
0x00026cb4 add r2, pc | r2 = 0x4d9da;
0x00026cb6 adds r1, 0x60 | r1 += 0x60;
0x00026cb8 add r0, pc | r0 = 0x4d9e0;
0x00026cba add sp, 0x10 |
0x00026cbc pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00026cc0 b.w 0x9c08 | void (*0x9c08)() ();
| label_2:
0x00026cc4 ldr r1, [pc, 0x60] |
0x00026cc6 ldr r2, [pc, 0x64] |
0x00026cc8 ldr r0, [pc, 0x64] |
0x00026cca add r1, pc | r1 = 0x4d9f6;
0x00026ccc add r2, pc | r2 = 0x4d9fe;
0x00026cce adds r1, 0x60 | r1 += 0x60;
0x00026cd0 add r0, pc | r0 = 0x4da04;
0x00026cd2 add sp, 0x10 |
0x00026cd4 pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00026cd8 b.w 0x9c08 | void (*0x9c08)() ();
| label_3:
0x00026cdc ldr r1, [pc, 0x54] |
0x00026cde ldr r2, [pc, 0x58] |
0x00026ce0 ldr r0, [pc, 0x58] |
0x00026ce2 add r1, pc | r1 = 0x4da1a;
0x00026ce4 add r2, pc | r2 = 0x4da22;
0x00026ce6 adds r1, 0x60 | r1 += 0x60;
0x00026ce8 add r0, pc | r0 = 0x4da28;
0x00026cea add sp, 0x10 |
0x00026cec pop.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00026cf0 b.w 0x9c08 | void (*0x9c08)() ();
| label_1:
0x00026cf4 ldr r2, [r5] | r2 = *(r5);
0x00026cf6 mov r3, r4 | r3 = r4;
0x00026cf8 mov r0, r5 | r0 = r5;
0x00026cfa ldr r2, [r2] | r2 = *(r2);
0x00026cfc str r2, [r3], 8 | *(r3) = r2;
| r3 += 8;
0x00026d00 str r6, [r4, 8] | *((r4 + 8)) = r6;
0x00026d02 str r6, [r3, 4] | *((r3 + 4)) = r6;
0x00026d04 str r6, [r3, 8] | *((r3 + 8)) = r6;
0x00026d06 str r6, [r3, 0xc] | *((r3 + 0xc)) = r6;
0x00026d08 bl 0x11308 | g_object_ref ();
0x00026d0c str r0, [r4, 8] | *((r4 + 8)) = r0;
0x00026d0e b 0x26ca6 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x26b78 */
| #include <stdint.h>
|
; (fcn) sym.g_value_peek_pointer () | void g_value_peek_pointer (int16_t arg1) {
| r0 = arg1;
0x00026b78 push {r4, lr} |
| if (r0 != 0) {
0x00026b7a cbz r0, 0x26b92 |
0x00026b7c mov r4, r0 | r4 = r0;
0x00026b7e ldr r0, [r0] | r0 = *(r0);
0x00026b80 bl 0x25228 | r0 = g_type_value_table_peek ();
| if (r0 == 0) {
0x00026b84 cbz r0, 0x26ba8 | goto label_1;
| }
0x00026b86 ldr r3, [r0, 0xc] | r3 = *((r0 + 0xc));
0x00026b88 mov r0, r4 | r0 = r4;
| if (r3 == 0) {
0x00026b8a cbz r3, 0x26bbe | goto label_2;
| }
0x00026b8c pop.w {r4, lr} |
0x00026b90 bx r3 | return uint32_t (*r3)() ();
| }
0x00026b92 ldr r1, [pc, 0x48] |
0x00026b94 ldr r2, [pc, 0x48] |
0x00026b96 ldr r0, [pc, 0x4c] |
0x00026b98 add r1, pc | r1 = 0x4d77a;
0x00026b9a add r2, pc | r2 = 0x4d77e;
0x00026b9c adds r1, 0x48 | r1 += 0x48;
0x00026b9e add r0, pc | r0 = 0x4d788;
0x00026ba0 blx 0x9c0c | fcn_00009c0c ();
| do {
| label_0:
0x00026ba4 movs r0, 0 | r0 = 0;
0x00026ba6 pop {r4, pc} |
| label_1:
0x00026ba8 ldr r1, [pc, 0x3c] |
0x00026baa ldr r2, [pc, 0x40] |
0x00026bac ldr r0, [pc, 0x40] |
0x00026bae add r1, pc | r1 = 0x4d79a;
0x00026bb0 add r2, pc | r2 = 0x4d7a2;
0x00026bb2 adds r1, 0x48 | r1 += 0x48;
0x00026bb4 add r0, pc | r0 = 0x4d7a8;
0x00026bb6 blx 0x9c0c | fcn_00009c0c ();
0x00026bba movs r0, 0 | r0 = 0;
0x00026bbc pop {r4, pc} |
| label_2:
0x00026bbe bl 0x26b18 | r0 = g_value_fits_pointer ();
0x00026bc2 cmp r0, 1 |
0x00026bc4 beq 0x26ba4 |
| } while (r0 == 1);
0x00026bc6 ldr r1, [pc, 0x2c] |
0x00026bc8 ldr r2, [pc, 0x2c] |
0x00026bca ldr r0, [pc, 0x30] |
0x00026bcc add r1, pc | r1 = 0x4d7c6;
0x00026bce add r2, pc | r2 = 0x4d7ca;
0x00026bd0 adds r1, 0x48 | r1 += 0x48;
0x00026bd2 add r0, pc | r0 = 0x4d7d4;
0x00026bd4 blx 0x9c0c | fcn_00009c0c ();
0x00026bd8 b 0x26ba4 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libgobject-2.0.so.0.6800.4 @ 0x293b0 */
| #include <stdint.h>
|
; (fcn) sym.g_value_set_ulong () | void g_value_set_ulong (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x000293b0 push {r3, r4, r5, lr} |
| if (r0 != 0) {
0x000293b2 cbz r0, 0x293ca |
0x000293b4 ldr r3, [r0] | r3 = *(r0);
0x000293b6 mov r5, r1 | r5 = r1;
0x000293b8 mov r4, r0 | r4 = r0;
0x000293ba cmp r3, 0x24 |
| if (r3 != 0x24) {
0x000293bc beq 0x293c6 |
0x000293be movs r1, 0x24 | r1 = 0x24;
0x000293c0 bl 0x250fc | r0 = g_type_check_value_holds ();
| if (r0 == 0) {
0x000293c4 cbz r0, 0x293ca | goto label_0;
| }
| }
0x000293c6 str r5, [r4, 8] | *((r4 + 8)) = r5;
0x000293c8 pop {r3, r4, r5, pc} |
| }
| label_0:
0x000293ca ldr r1, [pc, 0x18] |
0x000293cc ldr r2, [pc, 0x18] |
0x000293ce ldr r0, [pc, 0x1c] |
0x000293d0 add r1, pc |
0x000293d2 pop.w {r3, r4, r5, lr} |
0x000293d6 add r2, pc | r2 = 0x527c2;
0x000293d8 add.w r1, r1, 0x1e8 | r1 = 0x529a2;
0x000293dc add r0, pc | r0 = 0x527ce;
0x000293de b.w 0x9c08 | return void (*0x9c08)() ();
| }
[*] Function mmap used 1 times libgobject-2.0.so.0.6800.4