[*] Binary protection state of libgobject-2.0.so.0.5600.4
Partial RELRO No Canary found NX disabled DSO No RPATH No RUNPATH No Symbols
[*] Function popen tear down of libgobject-2.0.so.0.5600.4
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libgobject-2.0.so.0.5600.4 @ 0x2579c */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.0002579c () | void fcn_0002579c (int32_t arg1, void * arg2) {
| int32_t var_0h;
| int32_t var_ch;
| r0 = arg1;
| r1 = arg2;
0x0002579c push {r0, r1, r2, r4, r5, r6, r7, r8, sb, lr} |
0x000257a0 ldr r3, [r0, 0x14] | r3 = *((r0 + 0x14));
0x000257a4 cmp r1, 0 |
0x000257a8 clz r3, r3 | r3 &= r3;
0x000257ac lsr r3, r3, 5 | r3 >>= 5;
| if (r1 != 0) {
0x000257b0 moveq r3, 0 | r3 = 0;
| }
0x000257b4 cmp r3, 0 |
| if (r3 == 0) {
0x000257b8 beq 0x259cc | goto label_1;
| }
0x000257bc cmp r2, 0 |
0x000257c0 mov r6, r0 | r6 = r0;
0x000257c4 mov r8, r2 | r8 = r2;
0x000257c8 mov r4, r1 | r4 = r1;
| if (r2 == 0) {
0x000257cc bne 0x257f8 |
0x000257d0 ldr r0, [r0, 0x2c] | r0 = *((r0 + 0x2c));
0x000257d4 bl 0x24a84 | r0 = fcn_00024a84 (r0);
0x000257d8 cmp r0, 0 |
| if (r0 == 0) {
0x000257dc ldrne r3, [r0, 0x14] | r3 = *((r0 + 0x14));
| }
| if (r0 == 0) {
0x000257e0 movne r5, r2 | r5 = r2;
| }
| if (r0 == 0) {
0x000257e4 ldrne r7, [r3] | r7 = *(r3);
| }
| if (r0 != 0) {
0x000257e8 bne 0x2582c | goto label_2;
| }
0x000257ec ldr r8, [pc, 0x328] |
0x000257f0 add r8, pc, r8 | r8 = pc + r8;
0x000257f4 add r8, r8, 0x5c | r8 = 0x25b74;
| }
0x000257f8 ldr r0, [r8, 0x10] | r0 = *((r8 + 0x10));
0x000257fc cmp r0, 0 |
| if (r0 != 0) {
0x00025800 moveq r5, 0x20 | r5 = 0x20;
| }
| if (r0 != 0) {
0x00025804 beq 0x25810 |
0x00025808 bl 0x9598 | r0 = strlen (r0);
0x0002580c add r5, r0, 0x20 | r5 = r0 + 0x20;
| }
0x00025810 ldr r0, [r8, 0x18] | r0 = *((r8 + 0x18));
0x00025814 cmp r0, 0 |
| if (r0 != 0) {
0x00025818 beq 0x25824 |
0x0002581c bl 0x9598 | r0 = strlen (r0);
0x00025820 add r5, r5, r0 | r5 += r0;
| }
0x00025824 add r5, r5, 2 | r5 += 2;
0x00025828 mov r7, 0 | r7 = 0;
| label_2:
0x0002582c ldrb r3, [r6, 0xe] | r3 = *((r6 + 0xe));
0x00025830 tst r3, 4 |
| if ((r3 & 4) == 0) {
0x00025834 beq 0x259fc | goto label_3;
| }
0x00025838 ldr r0, [r6, 0x2c] | r0 = *((r6 + 0x2c));
0x0002583c bl 0x24a84 | r0 = fcn_00024a84 (r0);
0x00025840 mov sb, r0 | sb = r0;
0x00025844 add r0, r5, 0x30 | r0 = r5 + 0x30;
0x00025848 bl 0x9130 | g_malloc0 ();
0x0002584c ldrh r3, [r4] | r3 = *(r4);
0x00025850 ldrh r2, [r4, 0x18] | r2 = *((r4 + 0x18));
0x00025854 cmp r5, 0 |
0x00025858 strh r3, [r0, 4] | *((r0 + 4)) = r3;
0x0002585c ldr r3, [r4, 4] | r3 = *((r4 + 4));
| if (r5 == 0) {
0x00025860 addne r7, r0, 0x30 | r7 = r0 + 0x30;
| }
0x00025864 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00025868 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0002586c strh r2, [r0, 0x24] | *((r0 + 0x24)) = r2;
0x00025870 str r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x00025874 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00025878 str r3, [r0, 0x14] | *((r0 + 0x14)) = r3;
0x0002587c ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00025880 str r3, [r0, 0x18] | *((r0 + 0x18)) = r3;
0x00025884 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00025888 str r3, [r0, 0x1c] | *((r0 + 0x1c)) = r3;
0x0002588c mov r3, 0 | r3 = 0;
0x00025890 cmp sb, r3 |
0x00025894 strh r3, [r0, 6] | *((r0 + 6)) = r3;
0x00025898 str r3, [r0, 0x20] | *((r0 + 0x20)) = r3;
0x0002589c str r3, [r0, 8] | *((r0 + 8)) = r3;
0x000258a0 strh r3, [r0, 0x26] | *((r0 + 0x26)) = r3;
| if (sb == r3) {
0x000258a4 ldrne r3, [sb, 0x14] | r3 = *((sb + 0x14));
| }
0x000258a8 ldrhne r3, [r3, 6] | __asm ("ldrhne r3, [r3, 6]");
0x000258ac strhne r3, [r0, 6] | __asm ("strhne r3, [r0, 6]");
0x000258b0 ldrh r3, [r4, 0x1a] | r3 = *((r4 + 0x1a));
0x000258b4 cmp r3, 0x400 |
| if (r3 < 0x400) {
0x000258b8 movhs r3, 0x400 | r3 = 0x400;
| }
0x000258bc strh r3, [r0, 0x28] | *((r0 + 0x28)) = r3;
0x000258c0 ldr r3, [r4, 0x1c] | r3 = *((r4 + 0x1c));
0x000258c4 str r3, [r0, 0x2c] | *((r0 + 0x2c)) = r3;
| do {
| label_0:
0x000258c8 cmp r5, 0 |
0x000258cc str r0, [r6, 0x14] | *((r6 + 0x14)) = r0;
| if (r5 != 0) {
0x000258d0 beq 0x2593c |
0x000258d4 mov lr, r8 | lr = r8;
0x000258d8 ldm lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x000258dc mov ip, r7 |
0x000258e0 stm ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x000258e4 ldm lr, {r0, r1, r2, r3} | r0 = *(lr);
| r1 = *((lr + 4));
| r2 = *((lr + 8));
| r3 = *((lr + 12));
0x000258e8 add r4, r7, 0x20 | r4 = r7 + 0x20;
0x000258ec stm ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x000258f0 mov r3, 0 | r3 = 0;
0x000258f4 strb r3, [r7, 0x20] | *((r7 + 0x20)) = r3;
0x000258f8 str r4, [r7, 0x10] | *((r7 + 0x10)) = r4;
0x000258fc ldr r1, [r8, 0x10] | r1 = *((r8 + 0x10));
0x00025900 cmp r1, r3 |
| if (r1 != r3) {
0x00025904 beq 0x2591c |
0x00025908 mov r0, r4 | r0 = r4;
0x0002590c bl 0x9154 | strcat (r0, r1);
0x00025910 ldr r0, [r8, 0x10] | r0 = *((r8 + 0x10));
0x00025914 bl 0x9598 | r0 = strlen (r0);
0x00025918 add r4, r4, r0 | r4 += r0;
| }
0x0002591c mov r3, 0 | r3 = 0;
0x00025920 add r0, r4, 1 | r0 = r4 + 1;
0x00025924 strb r3, [r4, 1] | *((r4 + 1)) = r3;
0x00025928 str r0, [r7, 0x18] | *((r7 + 0x18)) = r0;
0x0002592c ldr r1, [r8, 0x18] | r1 = *((r8 + 0x18));
0x00025930 cmp r1, r3 |
| if (r1 == r3) {
0x00025934 beq 0x2593c | goto label_4;
| }
0x00025938 bl 0x9154 | strcat (r0, r1);
| }
| label_4:
0x0002593c ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x00025940 str r7, [r3] | *(r3) = r7;
0x00025944 ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x00025948 ldr r3, [r3] | r3 = *(r3);
0x0002594c ldr r3, [r3] | r3 = *(r3);
0x00025950 cmp r3, 0 |
| if (r3 != 0) {
0x00025954 moveq r2, r3 | r2 = r3;
| }
| if (r3 != 0) {
0x00025958 beq 0x2597c |
0x0002595c ldr r3, [pc, 0x1bc] | r3 = *(0x25b1c);
0x00025960 mov r0, r6 | r0 = r6;
0x00025964 add r3, pc, r3 | r3 = pc + r3;
0x00025968 ldr r1, [r3, 0x404] | r1 = *(0x25f20);
0x0002596c bl 0x24ae4 | fcn_00024ae4 (r0, r1);
0x00025970 tst r0, 0x30 |
| if ((r0 & 0x30) != 0) {
0x00025974 moveq r2, 1 | r2 = 1;
| }
| if ((r0 & 0x30) != 0) {
0x00025978 movne r2, 0 | r2 = 0;
| goto label_5;
| }
| }
| label_5:
0x0002597c ldrb r3, [r6, 0xe] | r3 = *((r6 + 0xe));
0x00025980 bic r3, r3, 8 | r3 = BIT_MASK (r3, 8);
0x00025984 orr r3, r3, r2, lsl 3 | r3 |= (r2 << 3);
0x00025988 strb r3, [r6, 0xe] | *((r6 + 0xe)) = r3;
0x0002598c ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x00025990 ldr r3, [r3] | r3 = *(r3);
0x00025994 cmp r3, 0 |
| if (r3 != 0) {
0x00025998 bne 0x25b04 | goto label_6;
| }
0x0002599c ldr r3, [pc, 0x180] | r3 = *(0x25b20);
0x000259a0 ldr r1, [pc, 0x180] | r1 = *(0x25b24);
0x000259a4 add r3, pc, r3 | r3 = pc + r3;
0x000259a8 str r3, [sp] | *(sp) = r3;
0x000259ac ldr r3, [pc, 0x178] |
0x000259b0 ldr r0, [pc, 0x178] | r0 = *(0x25b2c);
0x000259b4 add r3, pc, r3 | r3 = pc + r3;
0x000259b8 add r3, r3, 0x7c | r3 = 0x25ba4;
0x000259bc ldr r2, [pc, 0x170] | r2 = *(0x25b30);
0x000259c0 add r1, pc, r1 | r1 = pc + r1;
0x000259c4 add r0, pc, r0 | r0 = pc + r0;
0x000259c8 b 0x259f8 | goto label_7;
| label_1:
0x000259cc ldr r3, [pc, 0x164] | r3 = *(0x25b34);
0x000259d0 ldr r1, [pc, 0x164] | r1 = *(0x25b38);
0x000259d4 add r3, pc, r3 | r3 = pc + r3;
0x000259d8 str r3, [sp] | *(sp) = r3;
0x000259dc ldr r3, [pc, 0x15c] |
0x000259e0 ldr r0, [pc, 0x15c] | r0 = *(0x25b40);
0x000259e4 ldr r2, [pc, 0x15c] | r2 = *(0x25b44);
0x000259e8 add r3, pc, r3 | r3 = pc + r3;
0x000259ec add r3, r3, 0x7c | r3 = 0x25bb8;
0x000259f0 add r1, pc, r1 | r1 = pc + r1;
0x000259f4 add r0, pc, r0 | r0 = pc + r0;
| label_7:
0x000259f8 bl 0x93f4 | g_assertion_message_expr ();
| label_3:
0x000259fc tst r3, 2 |
| if ((r3 & 2) == 0) {
0x00025a00 beq 0x25a74 | goto label_8;
| }
0x00025a04 ldr r0, [r6, 0x2c] | r0 = *((r6 + 0x2c));
0x00025a08 bl 0x24a84 | r0 = fcn_00024a84 (r0);
0x00025a0c mov sb, r0 | sb = r0;
0x00025a10 add r0, r5, 0x24 | r0 = r5 + 0x24;
0x00025a14 bl 0x9130 | g_malloc0 ();
0x00025a18 ldrh r3, [r4] | r3 = *(r4);
0x00025a1c cmp r5, 0 |
0x00025a20 strh r3, [r0, 4] | *((r0 + 4)) = r3;
0x00025a24 ldr r3, [r4, 4] | r3 = *((r4 + 4));
| if (r5 == 0) {
0x00025a28 addne r7, r0, 0x24 | r7 = r0 + 0x24;
| }
0x00025a2c str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00025a30 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00025a34 str r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x00025a38 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00025a3c str r3, [r0, 0x14] | *((r0 + 0x14)) = r3;
0x00025a40 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00025a44 str r3, [r0, 0x18] | *((r0 + 0x18)) = r3;
0x00025a48 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00025a4c str r3, [r0, 0x1c] | *((r0 + 0x1c)) = r3;
0x00025a50 mov r3, 0 | r3 = 0;
0x00025a54 cmp sb, r3 |
0x00025a58 strh r3, [r0, 6] | *((r0 + 6)) = r3;
0x00025a5c str r3, [r0, 0x20] | *((r0 + 0x20)) = r3;
| if (sb == r3) {
0x00025a60 ldrne r2, [sb, 0x14] | r2 = *((sb + 0x14));
| }
0x00025a64 ldrhne r2, [r2, 6] | __asm ("ldrhne r2, [r2, 6]");
0x00025a68 str r3, [r0, 8] | *((r0 + 8)) = r3;
0x00025a6c strhne r2, [r0, 6] | __asm ("strhne r2, [r0, 6]");
0x00025a70 b 0x258c8 |
| } while (1);
| label_8:
0x00025a74 ldrb r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00025a78 add r3, r3, 0xa | r3 += 0xa;
0x00025a7c ldr r3, [r6, r3, lsl 2] | offset_0 = r3 << 2;
| r3 = *((r6 + offset_0));
0x00025a80 cmp r3, 8 |
| if (r3 == 8) {
0x00025a84 bne 0x25ad4 |
0x00025a88 add r0, r5, 0x20 | r0 = r5 + 0x20;
0x00025a8c bl 0x9130 | g_malloc0 ();
0x00025a90 ldrh r3, [r4] | r3 = *(r4);
0x00025a94 cmp r5, 0 |
0x00025a98 strh r3, [r0, 4] | *((r0 + 4)) = r3;
0x00025a9c ldr r3, [r4, 4] | r3 = *((r4 + 4));
| if (r5 == 0) {
0x00025aa0 addne r7, r0, 0x20 | r7 = r0 + 0x20;
| }
0x00025aa4 str r3, [r0, 8] | *((r0 + 8)) = r3;
0x00025aa8 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00025aac str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00025ab0 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x00025ab4 str r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x00025ab8 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x00025abc str r3, [r0, 0x14] | *((r0 + 0x14)) = r3;
0x00025ac0 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x00025ac4 str r3, [r0, 0x18] | *((r0 + 0x18)) = r3;
0x00025ac8 mov r3, 0 | r3 = 0;
0x00025acc str r3, [r0, 0x1c] | *((r0 + 0x1c)) = r3;
0x00025ad0 b 0x258c8 | goto label_0;
| }
0x00025ad4 cmp r3, 0x48 |
| if (r3 == 0x48) {
0x00025ad8 bne 0x25af0 |
0x00025adc add r0, r5, 0xc | r0 = r5 + 0xc;
0x00025ae0 bl 0x9130 | g_malloc0 ();
0x00025ae4 cmp r5, 0 |
| if (r5 == 0) {
0x00025ae8 addne r7, r0, 0xc | r7 = r0 + 0xc;
| }
0x00025aec b 0x258c8 | goto label_0;
| }
0x00025af0 add r0, r5, 4 | r0 = r5 + 4;
0x00025af4 bl 0x9130 | g_malloc0 ();
0x00025af8 cmp r5, 0 |
| if (r5 == 0) {
0x00025afc addne r7, r0, 4 | r7 = r0 + 4;
| }
0x00025b00 b 0x258c8 | goto label_0;
| label_6:
0x00025b04 bl 0x329a8 | fcn_000329a8 ();
0x00025b08 mov r3, 1 | r3 = 1;
0x00025b0c str r3, [r6] | *(r6) = r3;
0x00025b10 bl 0x329a8 | fcn_000329a8 ();
0x00025b14 add sp, sp, 0xc |
0x00025b18 pop {r4, r5, r6, r7, r8, sb, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libgobject-2.0.so.0.5600.4 @ 0x15dfc */
| #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 (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| void * s;
| void * var_20h;
| int32_t var_0h_2;
| int32_t var_64h;
| r0 = arg1;
| r1 = arg2;
0x00015dfc push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00015e00 mov r4, r1 | r4 = r1;
0x00015e04 sub sp, sp, 0x64 |
0x00015e08 mov r1, 0x50 | r1 = 0x50;
0x00015e0c mov r7, r0 | r7 = r0;
0x00015e10 mov fp, r2 |
0x00015e14 bl 0x2a3d0 | r0 = g_type_check_instance_is_fundamentally_a ();
0x00015e18 cmp r0, 0 |
| if (r0 == 0) {
0x00015e1c beq 0x15f30 | goto label_2;
| }
0x00015e20 mov r0, r7 | r0 = r7;
0x00015e24 bl 0x13be8 | g_object_ref ();
0x00015e28 ldr sb, [pc, 0x1fc] | sb = *(0x16028);
0x00015e2c add r6, sp, 8 | r6 += s;
0x00015e30 add sb, pc, sb | sb = pc + sb;
| label_1:
0x00015e34 cmp r4, 0 |
| if (r4 == 0) {
0x00015e38 beq 0x15f24 | goto label_3;
| }
0x00015e3c mov r2, 0x18 | r2 = 0x18;
0x00015e40 mov r1, 0 | r1 = 0;
0x00015e44 mov r0, r6 | r0 = r6;
0x00015e48 bl 0x9118 | memset (r0, r1, r2);
0x00015e4c ldr r2, [r7] | r2 = *(r7);
0x00015e50 mov r3, 1 | r3 = 1;
0x00015e54 ldr r2, [r2] | r2 = *(r2);
0x00015e58 mov r1, r4 | r1 = r4;
0x00015e5c ldr r0, [sb, 0x20] | r0 = *((sb + 0x20));
0x00015e60 bl 0x1a0cc | g_param_spec_pool_lookup ();
0x00015e64 mov r2, r4 | r2 = r4;
0x00015e68 mov r1, r0 | r1 = r0;
0x00015e6c mov r5, r0 | r5 = r0;
0x00015e70 mov r0, r7 | r0 = r7;
0x00015e74 bl 0x131ac | r0 = fcn_000131ac (r0, r1);
0x00015e78 cmp r0, 0 |
| if (r0 == 0) {
0x00015e7c beq 0x15f24 | goto label_3;
| }
0x00015e80 ldr r1, [r5, 0xc] | r1 = *((r5 + 0xc));
0x00015e84 mov r0, r6 | r0 = r6;
0x00015e88 bl 0x2c85c | g_value_init ();
0x00015e8c mov r1, r5 | r1 = r5;
0x00015e90 mov r2, r6 | r2 = r6;
0x00015e94 mov r0, r7 | r0 = r7;
0x00015e98 bl 0x13ab4 | fcn_00013ab4 (r0, r1);
0x00015e9c ldr r0, [sp, 8] | r0 = s;
0x00015ea0 bl 0x2a7f8 | g_type_value_table_peek ();
0x00015ea4 add r5, sp, 0x20 | r5 += var_20h;
0x00015ea8 mov r1, 0 | r1 = 0;
0x00015eac mov r2, 0x40 | r2 = 0x40;
0x00015eb0 mov r4, fp | r4 = fp;
0x00015eb4 ldr sl, [r0, 0x18] | sl = *((r0 + 0x18));
0x00015eb8 mov r8, r0 | r8 = r0;
0x00015ebc mov r0, r5 | r0 = r5;
0x00015ec0 bl 0x9118 | memset (r0, r1, r2);
0x00015ec4 mov r1, 0 | r1 = 0;
| do {
0x00015ec8 ldrb r3, [sl, r1] | r3 = *((sl + r1));
0x00015ecc cmp r3, 0 |
| if (r3 == 0) {
0x00015ed0 bne 0x15f58 |
0x00015ed4 mov r2, r5 | r2 = r5;
0x00015ed8 ldr r8, [r8, 0x1c] | r8 = *((r8 + 0x1c));
0x00015edc mov r0, r6 | r0 = r6;
0x00015ee0 blx r8 | uint32_t (*r8)(uint32_t, uint32_t) (r0, r2);
0x00015ee4 subs r5, r0, 0 | r5 -= s;
| if (r5 == s) {
0x00015ee8 beq 0x16018 | goto label_4;
| }
0x00015eec ldr r3, [pc, 0x13c] |
0x00015ef0 ldr r2, [pc, 0x13c] | r2 = *(0x16030);
0x00015ef4 ldr r0, [pc, 0x13c] | r0 = *(0x16034);
0x00015ef8 add r3, pc, r3 | r3 = pc + r3;
0x00015efc add r3, r3, 0x330 | r3 = 0x1635c;
0x00015f00 add r2, pc, r2 | r2 = pc + r2;
0x00015f04 mov r1, 0x10 | r1 = 0x10;
0x00015f08 add r0, pc, r0 | r0 = pc + r0;
0x00015f0c str r5, [sp] | *(sp) = r5;
0x00015f10 bl 0x9544 | g_log ();
0x00015f14 mov r0, r5 | r0 = r5;
0x00015f18 bl 0x937c | g_free ();
0x00015f1c mov r0, r6 | r0 = r6;
0x00015f20 bl 0x2ca38 | g_value_unset ();
| label_3:
0x00015f24 mov r0, r7 | r0 = r7;
0x00015f28 bl 0x13e58 | g_object_unref ();
0x00015f2c b 0x15f50 | goto label_5;
| label_2:
0x00015f30 ldr r1, [pc, 0x104] |
0x00015f34 ldr r2, [pc, 0x104] | r2 = *(0x1603c);
0x00015f38 ldr r0, [pc, 0x104] | r0 = *(0x16040);
0x00015f3c add r1, pc, r1 | r1 = pc + r1;
0x00015f40 add r2, pc, r2 | r2 = pc + r2;
0x00015f44 add r1, r1, 0x330 | r1 = 0x16368;
0x00015f48 add r0, pc, r0 | r0 = pc + r0;
0x00015f4c bl 0x92ec | g_return_if_fail_warning ();
| label_5:
0x00015f50 add sp, sp, 0x64 |
0x00015f54 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00015f58 sub r3, r3, 0x64 | r3 -= 0x64;
0x00015f5c cmp r3, 0xd |
| if (r3 > 0xd) {
| /* switch table (14 cases) at 0x15f68 */
0x00015f60 addls pc, pc, r3, lsl 2 | pc += (r3 << 2);
| }
0x00015f64 b 0x15fec | goto label_6;
0x00015f68 b 0x15fc0 | goto label_7;
0x00015f6c b 0x15fec | goto label_6;
0x00015f70 b 0x15fec | goto label_6;
0x00015f74 b 0x15fec | goto label_6;
0x00015f78 b 0x15fec | goto label_6;
0x00015f7c b 0x15fdc | goto label_8;
0x00015f80 b 0x15fec | goto label_6;
0x00015f84 b 0x15fec | goto label_6;
0x00015f88 b 0x15fdc | goto label_8;
0x00015f8c b 0x15fec | goto label_6;
0x00015f90 b 0x15fec | goto label_6;
0x00015f94 b 0x15fec | goto label_6;
0x00015f98 b 0x15fdc | goto label_8;
0x00015f9c b 0x15fa0 |
0x00015fa0 add r4, r4, 7 | r4 += 7;
0x00015fa4 bic r3, r4, 7 | r3 = BIT_MASK (r4, 7);
0x00015fa8 add r4, r3, 8 | r4 = r3 + 8;
0x00015fac ldrd r2, r3, [r3] | __asm ("ldrd r2, r3, [r3]");
0x00015fb0 lsl r0, r1, 3 | r0 = r1 << 3;
0x00015fb4 strd r2, r3, [r5, r0] | __asm ("strd r2, r3, [r5, r0]");
| label_0:
0x00015fb8 add r1, r1, 1 | r1++;
0x00015fbc b 0x15ec8 |
| } while (1);
| label_7:
0x00015fc0 add r4, r4, 7 | r4 += 7;
0x00015fc4 bic r3, r4, 7 | r3 = BIT_MASK (r4, 7);
0x00015fc8 add r4, r3, 8 | r4 = r3 + 8;
0x00015fcc ldrd r2, r3, [r3] | __asm ("ldrd r2, r3, [r3]");
0x00015fd0 lsl r0, r1, 3 | r0 = r1 << 3;
0x00015fd4 strd r2, r3, [r5, r0] | __asm ("strd r2, r3, [r5, r0]");
0x00015fd8 b 0x15fb8 | goto label_0;
| label_8:
0x00015fdc ldr r3, [r4] | r3 = *(r4);
0x00015fe0 add r4, r4, 4 | r4 += 4;
0x00015fe4 str r3, [r5, r1, lsl 3] | offset_0 = r1 << 3;
| *((r5 + offset_0)) = r3;
0x00015fe8 b 0x15fb8 | goto label_0;
| label_6:
0x00015fec mov r3, 0 | r3 = 0;
0x00015ff0 str r3, [sp] | *(sp) = r3;
0x00015ff4 ldr r3, [pc, 0x4c] |
0x00015ff8 ldr r1, [pc, 0x4c] | r1 = *(0x16048);
0x00015ffc ldr r0, [pc, 0x4c] | r0 = *(0x1604c);
0x00016000 add r3, pc, r3 | r3 = pc + r3;
0x00016004 add r3, r3, 0x330 | r3 = 0x16374;
0x00016008 ldr r2, [pc, 0x44] | r2 = *(0x16050);
0x0001600c add r1, pc, r1 | r1 = pc + r1;
0x00016010 add r0, pc, r0 | r0 = pc + r0;
0x00016014 bl 0x93f4 | g_assertion_message_expr ();
| label_4:
0x00016018 mov r0, r6 | r0 = r6;
0x0001601c bl 0x2ca38 | g_value_unset ();
0x00016020 add fp, r4, 4 |
0x00016024 ldr r4, [r4] | r4 = *(r4);
0x00016028 b 0x15e34 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libgobject-2.0.so.0.5600.4 @ 0x1a580 */
| #include <stdint.h>
|
; (fcn) sym.g_param_type_register_static () | void g_param_type_register_static (int32_t arg1, int32_t arg2) {
| int32_t var_4h;
| void * s;
| int32_t var_10h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_1eh;
| int32_t var_20h;
| int32_t var_28h;
| r0 = arg1;
| r1 = arg2;
0x0001a580 push {r4, r5, r6, lr} |
0x0001a584 sub sp, sp, 0x28 |
0x0001a588 mov r6, r0 | r6 = r0;
0x0001a58c mov r4, r1 | r4 = r1;
0x0001a590 mov r2, 0x22 | r2 = 0x22;
0x0001a594 mov r1, 0 | r1 = 0;
0x0001a598 add r0, sp, 6 | r0 += s;
0x0001a59c bl 0x9118 | memset (r0, r1, r2);
0x0001a5a0 mov r3, 0x28 | r3 = 0x28;
0x0001a5a4 strh r3, [sp, 4] | var_4h = r3;
0x0001a5a8 ldr r3, [pc, 0x190] | r3 = *(0x1a73c);
0x0001a5ac cmp r6, 0 |
0x0001a5b0 add r3, pc, r3 | r3 = pc + r3;
0x0001a5b4 str r3, [sp, 0x10] | var_10h = r3;
0x0001a5b8 mov r3, 0x10 | r3 = 0x10;
0x0001a5bc strh r3, [sp, 0x1e] | var_1eh = r3;
| if (r6 != 0) {
0x0001a5c0 beq 0x1a5f0 |
0x0001a5c4 cmp r4, 0 |
| if (r4 != 0) {
0x0001a5c8 bne 0x1a624 | goto label_1;
| }
0x0001a5cc ldr r1, [pc, 0x170] |
0x0001a5d0 ldr r2, [pc, 0x170] | r2 = *(0x1a744);
0x0001a5d4 ldr r0, [pc, 0x170] | r0 = *(0x1a748);
0x0001a5d8 add r1, pc, r1 | r1 = pc + r1;
0x0001a5dc add r1, r1, 0x20c | r1 = 0x1a94c;
0x0001a5e0 add r2, pc, r2 | r2 = pc + r2;
0x0001a5e4 add r1, r1, 3 | r1 += 3;
0x0001a5e8 add r0, pc, r0 | r0 = pc + r0;
0x0001a5ec b 0x1a610 |
| } else {
0x0001a5f0 ldr r1, [pc, 0x158] |
0x0001a5f4 ldr r2, [pc, 0x158] | r2 = *(0x1a750);
0x0001a5f8 ldr r0, [pc, 0x158] | r0 = *(0x1a754);
0x0001a5fc add r1, pc, r1 | r1 = pc + r1;
0x0001a600 add r1, r1, 0x20c | r1 = 0x1a958;
0x0001a604 add r2, pc, r2 | r2 = pc + r2;
0x0001a608 add r1, r1, 3 | r1 += 3;
0x0001a60c add r0, pc, r0 | r0 = pc + r0;
| }
| do {
0x0001a610 bl 0x92ec | g_return_if_fail_warning ();
0x0001a614 mov r5, 0 | r5 = 0;
| label_0:
0x0001a618 mov r0, r5 | r0 = r5;
0x0001a61c add sp, sp, 0x28 |
0x0001a620 pop {r4, r5, r6, pc} |
| label_1:
0x0001a624 mov r0, r6 | r0 = r6;
0x0001a628 bl 0x285dc | r0 = g_type_from_name ();
0x0001a62c subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 == r0) {
0x0001a630 beq 0x1a658 | goto label_2;
| }
0x0001a634 ldr r1, [pc, 0x120] |
0x0001a638 ldr r2, [pc, 0x120] | r2 = *(0x1a75c);
0x0001a63c ldr r0, [pc, 0x120] | r0 = *(0x1a760);
0x0001a640 add r1, pc, r1 | r1 = pc + r1;
0x0001a644 add r1, r1, 0x20c | r1 = 0x1a964;
0x0001a648 add r2, pc, r2 | r2 = pc + r2;
0x0001a64c add r1, r1, 3 | r1 += 3;
0x0001a650 add r0, pc, r0 | r0 = pc + r0;
0x0001a654 b 0x1a610 |
| } while (1);
| label_2:
0x0001a658 ldrh r3, [r4] | r3 = *(r4);
0x0001a65c cmp r3, 0x27 |
| if (r3 > 0x27) {
0x0001a660 bhi 0x1a68c | goto label_3;
| }
0x0001a664 ldr r1, [pc, 0xfc] |
0x0001a668 ldr r2, [pc, 0xfc] | r2 = *(0x1a768);
0x0001a66c ldr r0, [pc, 0xfc] | r0 = *(0x1a76c);
0x0001a670 add r1, pc, r1 | r1 = pc + r1;
0x0001a674 add r1, r1, 0x20c | r1 = 0x1a970;
0x0001a678 add r2, pc, r2 | r2 = pc + r2;
0x0001a67c add r1, r1, 3 | r1 += 3;
0x0001a680 add r0, pc, r0 | r0 = pc + r0;
| do {
0x0001a684 bl 0x92ec | g_return_if_fail_warning ();
0x0001a688 b 0x1a618 | goto label_0;
| label_3:
0x0001a68c ldr r0, [r4, 8] | r0 = *((r4 + 8));
0x0001a690 bl 0x28540 | r0 = g_type_name ();
0x0001a694 cmp r0, 0 |
| if (r0 != 0) {
0x0001a698 bne 0x1a6c0 | goto label_4;
| }
0x0001a69c ldr r1, [pc, 0xd0] |
0x0001a6a0 ldr r2, [pc, 0xd0] | r2 = *(0x1a774);
0x0001a6a4 ldr r0, [pc, 0xd0] | r0 = *(0x1a778);
0x0001a6a8 add r1, pc, r1 | r1 = pc + r1;
0x0001a6ac add r1, r1, 0x20c | r1 = 0x1a97c;
0x0001a6b0 add r2, pc, r2 | r2 = pc + r2;
0x0001a6b4 add r1, r1, 3 | r1 += 3;
0x0001a6b8 add r0, pc, r0 | r0 = pc + r0;
0x0001a6bc b 0x1a684 |
| } while (1);
| label_4:
0x0001a6c0 ldrh r3, [r4] | r3 = *(r4);
0x0001a6c4 mov r0, 0x14 | r0 = 0x14;
0x0001a6c8 strh r3, [sp, 0x1c] | var_1ch = r3;
0x0001a6cc ldrh r3, [r4, 2] | r3 = *((r4 + 2));
0x0001a6d0 strh r3, [sp, 0x1e] | var_1eh = r3;
0x0001a6d4 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0001a6d8 str r3, [sp, 0x20] | var_20h = r3;
0x0001a6dc bl 0x90ac | g_malloc ();
0x0001a6e0 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001a6e4 str r3, [r0] | *(r0) = r3;
0x0001a6e8 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0001a6ec str r3, [r0, 4] | *((r0 + 4)) = r3;
0x0001a6f0 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0001a6f4 cmp r3, 0 |
| if (r3 != 0) {
0x0001a6f8 ldreq r3, [pc, 0x80] | r3 = *(0x0001a780);
| }
| if (r3 != 0) {
0x0001a6fc addeq r3, pc, r3 | r3 = pc + r3;
| }
0x0001a700 str r3, [r0, 8] | *((r0 + 8)) = r3;
0x0001a704 ldr r3, [r4, 0x14] | r3 = *((r4 + 0x14));
0x0001a708 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x0001a70c ldr r3, [r4, 0x18] | r3 = *((r4 + 0x18));
0x0001a710 cmp r3, 0 |
| if (r3 != 0) {
0x0001a714 ldreq r3, [pc, 0x68] | r3 = *(0x0001a784);
| }
| if (r3 != 0) {
0x0001a718 addeq r3, pc, r3 | r3 = pc + r3;
| }
0x0001a71c str r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x0001a720 str r0, [sp, 0x18] | var_18h = r0;
0x0001a724 mov r3, 0 | r3 = 0;
0x0001a728 add r2, sp, 4 | r2 += var_4h;
0x0001a72c mov r1, r6 | r1 = r6;
0x0001a730 mov r0, 0x4c | r0 = 0x4c;
0x0001a734 bl 0x28a60 | r0 = g_type_register_static ();
0x0001a738 mov r5, r0 | r5 = r0;
0x0001a73c b 0x1a618 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libgobject-2.0.so.0.5600.4 @ 0x21bcc */
| #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 () {
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_b8h;
| int32_t var_b4h;
| int32_t var_b0h;
| int32_t var_ach;
| int32_t var_a8h;
| int32_t var_a4h;
| int32_t var_a0h;
| int32_t var_9ch;
| int32_t var_98h;
| int32_t var_94h;
| int32_t var_90h;
| int32_t var_8ch;
| int32_t var_88h;
| int32_t var_80h;
| void * var_7ch;
| void * var_64h;
| int32_t var_0h;
| int32_t var_sp_4h;
| void * s;
| int32_t var_0h_2;
| int32_t var_20h_2;
| int32_t var_20h;
0x00021bcc push {r0, r1, r2, r3} |
0x00021bd0 push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00021bd4 add fp, sp, 0x20 |
0x00021bd8 sub sp, sp, 0xa4 |
0x00021bdc ldr r0, [fp, 4] | r0 = var_4h;
0x00021be0 bl 0x2a6dc | r0 = g_type_check_instance ();
0x00021be4 cmp r0, 0 |
| if (r0 != 0) {
0x00021be8 beq 0x21c38 |
0x00021bec ldr r0, [pc, 0x680] |
0x00021bf0 add r0, pc, r0 | r0 = pc + r0;
0x00021bf4 add r0, r0, 0xc | r0 = 0x2227c;
0x00021bf8 bl 0x9184 | g_mutex_lock ();
0x00021bfc ldr r0, [fp, 4] | r0 = var_4h;
0x00021c00 bl 0x1d90c | r0 = fcn_0001d90c (r0);
0x00021c04 subs r6, r0, 0 | r6 = r0 - 0;
| if (r6 != r0) {
0x00021c08 bne 0x21c68 | goto label_10;
| }
0x00021c0c ldr r3, [fp, 4] | r3 = var_4h;
0x00021c10 ldr r2, [pc, 0x660] | r2 = *(0x22274);
0x00021c14 str r3, [sp] | *(sp) = r3;
0x00021c18 ldr r0, [pc, 0x65c] | r0 = *(0x22278);
0x00021c1c ldr r3, [pc, 0x65c] | r3 = *(0x2227c);
0x00021c20 add r2, pc, r2 | r2 = pc + r2;
0x00021c24 add r3, pc, r3 | r3 = pc + r3;
0x00021c28 mov r1, 0x10 | r1 = 0x10;
0x00021c2c add r0, pc, r0 | r0 = pc + r0;
0x00021c30 bl 0x9544 | g_log ();
0x00021c34 b 0x21d4c | goto label_1;
| }
0x00021c38 ldr r1, [pc, 0x644] |
0x00021c3c ldr r2, [pc, 0x644] | r2 = *(0x22284);
0x00021c40 ldr r0, [pc, 0x644] | r0 = *(0x22288);
0x00021c44 add r1, pc, r1 | r1 = pc + r1;
0x00021c48 add r2, pc, r2 | r2 = pc + r2;
0x00021c4c add r1, r1, 0x214 | r1 = 0x22494;
0x00021c50 add r0, pc, r0 | r0 = pc + r0;
0x00021c54 bl 0x92ec | g_return_if_fail_warning ();
| label_0:
0x00021c58 sub sp, fp, 0x20 |
0x00021c5c pop {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00021c60 add sp, sp, 0x10 |
0x00021c64 bx lr | return;
| label_10:
0x00021c68 ldr r0, [r6, 8] | r0 = *((r6 + 8));
0x00021c6c bl 0x1d824 | r0 = fcn_0001d824 (r0);
0x00021c70 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 != r0) {
0x00021c74 bne 0x21ca8 | goto label_11;
| }
0x00021c78 ldr r3, [pc, 0x610] | r3 = *(0x2228c);
0x00021c7c ldr r1, [pc, 0x610] | r1 = *(0x22290);
0x00021c80 add r3, pc, r3 | r3 = pc + r3;
0x00021c84 str r3, [sp] | *(sp) = r3;
0x00021c88 ldr r3, [pc, 0x608] |
0x00021c8c ldr r0, [pc, 0x608] | r0 = *(0x22298);
0x00021c90 ldr r2, [pc, 0x608] | r2 = *(0x2229c);
0x00021c94 add r3, pc, r3 | r3 = pc + r3;
0x00021c98 add r3, r3, 0x214 | r3 = 0x224a8;
0x00021c9c add r1, pc, r1 | r1 = pc + r1;
0x00021ca0 add r0, pc, r0 | r0 = pc + r0;
| do {
| label_5:
0x00021ca4 bl 0x93f4 | g_assertion_message_expr ();
| label_11:
0x00021ca8 ldr r1, [r6, 0x18] | r1 = *((r6 + 0x18));
0x00021cac cmp r1, 4 |
| if (r1 == 4) {
0x00021cb0 beq 0x21d60 | goto label_12;
| }
0x00021cb4 ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00021cb8 bl 0x1df38 | r0 = fcn_0001df38 (r0, r1);
0x00021cbc cmp r0, 0 |
| if (r0 != 0) {
0x00021cc0 bne 0x21cf4 | goto label_13;
| }
0x00021cc4 ldr r3, [pc, 0x5d8] | r3 = *(0x222a0);
0x00021cc8 ldr r1, [pc, 0x5d8] | r1 = *(0x222a4);
0x00021ccc add r3, pc, r3 | r3 = pc + r3;
0x00021cd0 str r3, [sp] | *(sp) = r3;
0x00021cd4 ldr r3, [pc, 0x5d0] |
0x00021cd8 ldr r0, [pc, 0x5d0] | r0 = *(0x222ac);
0x00021cdc add r3, pc, r3 | r3 = pc + r3;
0x00021ce0 add r3, r3, 0x214 | r3 = 0x224bc;
0x00021ce4 mov r2, 0x870 | r2 = 0x870;
0x00021ce8 add r1, pc, r1 | r1 = pc + r1;
0x00021cec add r0, pc, r0 | r0 = pc + r0;
0x00021cf0 b 0x21ca4 |
| } while (1);
| label_13:
0x00021cf4 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00021cf8 lsr r3, r3, 0xa | r3 >>= 0xa;
0x00021cfc and r3, r3, 0xff | r3 &= 0xff;
0x00021d00 str r3, [fp, -0x9c] | var_9ch = r3;
0x00021d04 ldr r3, [r0] | r3 = *(r0);
0x00021d08 mov r0, r3 | r0 = r3;
0x00021d0c str r3, [fp, -0x90] | var_90h = r3;
0x00021d10 bl 0x28d58 | r0 = g_type_parent ();
0x00021d14 mov r1, r0 | r1 = r0;
0x00021d18 ldr r0, [r5, 0x18] | r0 = *((r5 + 0x18));
0x00021d1c bl 0x1df38 | r0 = fcn_0001df38 (r0, r1);
0x00021d20 cmp r0, 0 |
| if (r0 == 0) {
0x00021d24 beq 0x21d4c | goto label_1;
| }
0x00021d28 ldr r3, [r0] | r3 = *(r0);
0x00021d2c ldr r2, [fp, -0x90] | r2 = var_90h;
0x00021d30 str r3, [fp, -0xa0] | var_a0h = r3;
0x00021d34 cmp r3, r2 |
| if (r3 == r2) {
0x00021d38 beq 0x21d4c | goto label_1;
| }
0x00021d3c ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x00021d40 cmp r3, 0 |
0x00021d44 str r3, [fp, -0x94] | var_94h = r3;
| if (r3 != 0) {
0x00021d48 bne 0x21d94 | goto label_14;
| }
| do {
| label_1:
0x00021d4c ldr r0, [pc, 0x560] |
0x00021d50 add r0, pc, r0 | r0 = pc + r0;
0x00021d54 add r0, r0, 0xc | r0 = 0x222bc;
0x00021d58 bl 0x9208 | g_mutex_unlock ();
0x00021d5c b 0x21c58 | goto label_0;
| label_12:
0x00021d60 ldr r3, [fp, 4] | r3 = var_4h;
0x00021d64 ldr r2, [pc, 0x54c] | r2 = *(0x222b4);
0x00021d68 str r3, [sp, 4] | var_sp_4h = r3;
0x00021d6c ldr r3, [r5] | r3 = *(r5);
0x00021d70 ldr r0, [pc, 0x544] | r0 = *(0x222b8);
0x00021d74 str r3, [sp] | *(sp) = r3;
0x00021d78 ldr r3, [pc, 0x540] | r3 = *(0x222bc);
0x00021d7c add r2, pc, r2 | r2 = pc + r2;
0x00021d80 add r3, pc, r3 | r3 = pc + r3;
0x00021d84 mov r1, 0x10 | r1 = 0x10;
0x00021d88 add r0, pc, r0 | r0 = pc + r0;
0x00021d8c bl 0x9544 | g_log ();
0x00021d90 b 0x21d4c |
| } while (1);
| label_14:
0x00021d94 add r3, fp, 8 | r3 += var_8h;
0x00021d98 str r3, [fp, -0x80] | var_80h = r3;
0x00021d9c ldr r3, [r5, 0x14] | r3 = *((r5 + 0x14));
0x00021da0 mov r2, 0x18 | r2 = 0x18;
0x00021da4 str r3, [fp, -0x98] | var_98h = r3;
0x00021da8 ldr r3, [fp, -0x9c] | r3 = var_9ch;
0x00021dac mov r1, sp | r1 = sp;
0x00021db0 add r3, r3, 1 | r3++;
0x00021db4 str r3, [fp, -0x8c] | var_8ch = r3;
0x00021db8 mul r3, r2, r3 | r3 = r2 * r3;
0x00021dbc mov r2, r3 | r2 = r3;
0x00021dc0 add r3, r3, 0xe | r3 += 0xe;
0x00021dc4 lsr r3, r3, 3 | r3 >>= 3;
0x00021dc8 sub r3, r1, r3, lsl 3 | r3 = r1 - (r3 << 3);
0x00021dcc mov sp, r3 |
0x00021dd0 add r4, sp, 8 | r4 += s;
0x00021dd4 mov r1, 0 | r1 = 0;
0x00021dd8 mov r0, r4 | r0 = r4;
0x00021ddc bl 0x9118 | memset (r0, r1, r2);
0x00021de0 add r3, r4, 0x18 | r3 += var_0h;
0x00021de4 str r3, [fp, -0xac] | var_ach = r3;
0x00021de8 mov r3, 0 | r3 = 0;
0x00021dec str r3, [fp, -0x88] | var_88h = r3;
0x00021df0 ldr r3, [pc, 0x4cc] |
0x00021df4 mov r8, r4 | r8 = r4;
0x00021df8 add r3, pc, r3 | r3 = pc + r3;
0x00021dfc add r3, r3, 0xc | r3 = 0x222cc;
0x00021e00 str r3, [fp, -0xb4] | var_b4h = r3;
0x00021e04 ldr r3, [pc, 0x4bc] | r3 = *(0x222c4);
0x00021e08 add r3, pc, r3 | r3 = pc + r3;
0x00021e0c str r3, [fp, -0xb8] | var_b8h = r3;
| label_6:
0x00021e10 ldr r3, [r5, 0xc] | r3 = *((r5 + 0xc));
0x00021e14 ldr r2, [fp, -0x88] | r2 = var_88h;
0x00021e18 lsr r3, r3, 0xa | r3 >>= 0xa;
0x00021e1c and r3, r3, 0xff | r3 &= 0xff;
0x00021e20 cmp r3, r2 |
| if (r3 <= r2) {
0x00021e24 bhi 0x21ed0 |
0x00021e28 ldr r7, [pc, 0x49c] |
0x00021e2c mov r5, 0 | r5 = 0;
0x00021e30 add r7, pc, r7 | r7 = pc + r7;
0x00021e34 add r7, r7, 0xc | r7 = 0x222d4;
0x00021e38 mov r0, r7 | r0 = r7;
0x00021e3c bl 0x9208 | g_mutex_unlock ();
0x00021e40 ldr r1, [fp, 4] | r1 = var_4h;
0x00021e44 mov r0, r4 | r0 = r4;
0x00021e48 str r5, [r4] | *(r4) = r5;
0x00021e4c bl 0x2cbc0 | g_value_init_from_instance ();
0x00021e50 mov r0, r7 | r0 = r7;
0x00021e54 bl 0x9184 | g_mutex_lock ();
0x00021e58 ldr r3, [fp, -0xa0] | r3 = var_a0h;
0x00021e5c mov r0, r7 | r0 = r7;
0x00021e60 str r3, [r6, 0x18] | *((r6 + 0x18)) = r3;
0x00021e64 bl 0x9208 | g_mutex_unlock ();
0x00021e68 ldr r3, [fp, -0x98] | r3 = var_98h;
0x00021e6c add r8, r6, 8 | r8 = r6 + 8;
0x00021e70 cmp r3, 4 |
| if (r3 != 4) {
0x00021e74 bne 0x220a8 | goto label_15;
| }
0x00021e78 str r8, [sp] | *(sp) = r8;
0x00021e7c mov r3, r4 | r3 = r4;
0x00021e80 ldr r2, [fp, -0x8c] | r2 = var_8ch;
0x00021e84 mov r1, r5 | r1 = r5;
0x00021e88 ldr r0, [fp, -0x94] | r0 = var_94h;
0x00021e8c bl 0xee2c | g_closure_invoke ();
| label_7:
0x00021e90 ldr r2, [fp, -0x9c] | r2 = var_9ch;
0x00021e94 mov r3, 0x18 | r3 = 0x18;
0x00021e98 smlabb r3, r3, r2, r3 | __asm ("smlabb r3, r3, r2, r3");
0x00021e9c ldr r7, [fp, -0xac] | r7 = var_ach;
0x00021ea0 add r5, r4, r3 | r5 = r4 + r3;
| label_9:
0x00021ea4 cmp r7, r5 |
| if (r7 != r5) {
0x00021ea8 bne 0x22264 | goto label_16;
| }
0x00021eac mov r0, r4 | r0 = r4;
0x00021eb0 bl 0x2ca38 | g_value_unset ();
0x00021eb4 ldr r0, [pc, 0x414] |
0x00021eb8 add r0, pc, r0 | r0 = pc + r0;
0x00021ebc add r0, r0, 0xc | r0 = 0x222d8;
0x00021ec0 bl 0x9184 | g_mutex_lock ();
0x00021ec4 ldr r3, [fp, -0x90] | r3 = var_90h;
0x00021ec8 str r3, [r6, 0x18] | *((r6 + 0x18)) = r3;
0x00021ecc b 0x21d4c | goto label_1;
| }
0x00021ed0 ldr r2, [fp, -0x88] | r2 = var_88h;
0x00021ed4 ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
0x00021ed8 ldr r0, [fp, -0xb4] | r0 = var_b4h;
0x00021edc ldr sl, [r3, r2, lsl 2] | offset_0 = r2 << 2;
| sl = *((r3 + offset_0));
0x00021ee0 bic r3, sl, 1 | r3 = BIT_MASK (sl, 1);
0x00021ee4 mov r7, r3 | r7 = r3;
0x00021ee8 bl 0x9208 | g_mutex_unlock ();
0x00021eec add r3, r8, 0x18 | r3 += var_0h;
0x00021ef0 tst sl, 1 |
0x00021ef4 str r3, [fp, -0xa4] | var_a4h = r3;
0x00021ef8 mov r0, r7 | r0 = r7;
| if ((sl & 1) != 0) {
0x00021efc moveq r3, 0 | r3 = 0;
| }
| if ((sl & 1) == 0) {
0x00021f00 movne r3, 0x8000000 | r3 = 0x8000000;
| }
0x00021f04 str r3, [fp, -0xa8] | var_a8h = r3;
0x00021f08 bl 0x2a7f8 | g_type_value_table_peek ();
0x00021f0c mov r2, 0x40 | r2 = 0x40;
0x00021f10 mov r1, 0 | r1 = 0;
0x00021f14 ldr r3, [r0, 0x10] | r3 = *((r0 + 0x10));
0x00021f18 mov sl, r0 | sl = r0;
0x00021f1c str r3, [fp, -0xb0] | var_b0h = r3;
0x00021f20 sub r3, fp, 0x64 | r3 -= var_64h;
0x00021f24 mov r0, r3 | r0 = r3;
0x00021f28 bl 0x9118 | memset (r0, r1, r2);
0x00021f2c ldr r2, [fp, -0x80] | r2 = var_80h;
0x00021f30 mov ip, 0 |
0x00021f34 mov r1, ip | r1 = ip;
0x00021f38 str r7, [r8, 0x18] | var_0h = r7;
0x00021f3c mov r3, r0 | r3 = r0;
| label_3:
0x00021f40 ldr r0, [fp, -0xb0] | r0 = var_b0h;
0x00021f44 ldrb r0, [r0, r1] | r0 = *((r0 + r1));
0x00021f48 cmp r0, 0 |
| if (r0 != 0) {
0x00021f4c bne 0x21fc4 | goto label_17;
| }
0x00021f50 cmp ip, 0 |
| if (ip == 0) {
0x00021f54 strne r2, [fp, -0x80] | var_80h = r2;
| }
0x00021f58 ldr r8, [sl, 0x14] | r8 = *((sl + 0x14));
0x00021f5c ldr r3, [fp, -0xa8] | r3 = var_a8h;
0x00021f60 sub r2, fp, 0x64 | r2 -= var_64h;
0x00021f64 ldr r0, [fp, -0xa4] | r0 = var_a4h;
0x00021f68 blx r8 | r0 = uint32_t (*r8)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x00021f6c subs r8, r0, 0 | r8 = r0 - 0;
| if (r8 == r0) {
0x00021f70 beq 0x22088 | goto label_18;
| }
0x00021f74 ldr r3, [pc, 0x358] | r3 = *(0x222d0);
0x00021f78 ldr r2, [pc, 0x358] | r2 = *(0x222d4);
0x00021f7c ldr r0, [pc, 0x358] | r0 = *(0x222d8);
0x00021f80 add r3, pc, r3 | r3 = pc + r3;
0x00021f84 add r2, pc, r2 | r2 = pc + r2;
0x00021f88 mov r1, 0x10 | r1 = 0x10;
0x00021f8c add r0, pc, r0 | r0 = pc + r0;
0x00021f90 str r8, [sp] | *(sp) = r8;
0x00021f94 bl 0x9544 | g_log ();
0x00021f98 mov r0, r8 | r0 = r8;
0x00021f9c bl 0x937c | g_free ();
0x00021fa0 ldr r7, [fp, -0x88] | r7 = var_88h;
0x00021fa4 mov r3, 0x18 | r3 = 0x18;
0x00021fa8 mla r7, r3, r7, r4 | __asm ("mla r7, r3, r7, r4");
| label_2:
0x00021fac cmp r7, r4 |
| if (r7 == r4) {
0x00021fb0 beq 0x21c58 | goto label_0;
| }
0x00021fb4 mov r0, r7 | r0 = r7;
0x00021fb8 bl 0x2ca38 | g_value_unset ();
0x00021fbc sub r7, r7, 0x18 | r7 -= 0x18;
0x00021fc0 b 0x21fac | goto label_2;
| label_17:
0x00021fc4 sub r0, r0, 0x64 | r0 -= 0x64;
0x00021fc8 cmp r0, 0xd |
| if (r0 > 0xd) {
| /* switch table (14 cases) at 0x21fd4 */
0x00021fcc addls pc, pc, r0, lsl 2 | pc += (r0 << 2);
| }
0x00021fd0 b 0x2205c | goto label_19;
0x00021fd4 b 0x22030 | goto label_20;
0x00021fd8 b 0x2205c | goto label_19;
0x00021fdc b 0x2205c | goto label_19;
0x00021fe0 b 0x2205c | goto label_19;
0x00021fe4 b 0x2205c | goto label_19;
0x00021fe8 b 0x2204c | goto label_21;
0x00021fec b 0x2205c | goto label_19;
0x00021ff0 b 0x2205c | goto label_19;
0x00021ff4 b 0x2204c | goto label_21;
0x00021ff8 b 0x2205c | goto label_19;
0x00021ffc b 0x2205c | goto label_19;
0x00022000 b 0x2205c | goto label_19;
0x00022004 b 0x2204c | goto label_21;
0x00022008 b 0x2200c |
0x0002200c add r2, r2, 7 | r2 += 7;
0x00022010 bic ip, r2, 7 | ip = BIT_MASK (r2, 7);
0x00022014 ldrd r8, sb, [ip] | __asm ("ldrd r8, sb, [ip]");
0x00022018 lsl r0, r1, 3 | r0 = r1 << 3;
0x0002201c add r2, ip, 8 | r2 = ip + 8;
0x00022020 strd r8, sb, [r3, r0] | __asm ("strd r8, sb, [r3, r0]");
| do {
| label_4:
0x00022024 add r1, r1, 1 | r1++;
0x00022028 mov ip, 1 |
0x0002202c b 0x21f40 | goto label_3;
| label_20:
0x00022030 add r2, r2, 7 | r2 += 7;
0x00022034 bic ip, r2, 7 | ip = BIT_MASK (r2, 7);
0x00022038 ldrd r8, sb, [ip] | __asm ("ldrd r8, sb, [ip]");
0x0002203c lsl r0, r1, 3 | r0 = r1 << 3;
0x00022040 add r2, ip, 8 | r2 = ip + 8;
0x00022044 strd r8, sb, [r3, r0] | __asm ("strd r8, sb, [r3, r0]");
0x00022048 b 0x22024 |
| } while (1);
| label_21:
0x0002204c ldr r0, [r2] | r0 = *(r2);
0x00022050 add r2, r2, 4 | r2 += 4;
0x00022054 str r0, [r3, r1, lsl 3] | offset_1 = r1 << 3;
| *((r3 + offset_1)) = r0;
0x00022058 b 0x22024 | goto label_4;
| label_19:
0x0002205c mov r3, 0 | r3 = 0;
0x00022060 str r3, [sp] | *(sp) = r3;
0x00022064 ldr r3, [pc, 0x274] |
0x00022068 ldr r1, [pc, 0x274] | r1 = *(0x222e0);
0x0002206c ldr r0, [pc, 0x274] | r0 = *(0x222e4);
0x00022070 add r3, pc, r3 | r3 = pc + r3;
0x00022074 add r3, r3, 0x214 | r3 = 0x224f0;
0x00022078 ldr r2, [pc, 0x26c] | r2 = *(0x222e8);
0x0002207c add r1, pc, r1 | r1 = pc + r1;
0x00022080 add r0, pc, r0 | r0 = pc + r0;
0x00022084 b 0x21ca4 | goto label_5;
| label_18:
0x00022088 ldr r3, [fp, -0xb8] | r3 = var_b8h;
0x0002208c add r0, r3, 0xc | r0 = r3 + 0xc;
0x00022090 bl 0x9184 | g_mutex_lock ();
0x00022094 ldr r3, [fp, -0x88] | r3 = var_88h;
0x00022098 ldr r8, [fp, -0xa4] | r8 = var_a4h;
0x0002209c add r3, r3, 1 | r3++;
0x000220a0 str r3, [fp, -0x88] | var_88h = r3;
0x000220a4 b 0x21e10 | goto label_6;
| label_15:
0x000220a8 sub r7, fp, 0x7c | r7 -= var_7ch;
0x000220ac mov r2, 0x18 | r2 = 0x18;
0x000220b0 mov r1, r5 | r1 = r5;
0x000220b4 mov r0, r7 | r0 = r7;
0x000220b8 bl 0x9118 | memset (r0, r1, r2);
0x000220bc ldr r3, [fp, -0x98] | r3 = var_98h;
0x000220c0 mov r0, r7 | r0 = r7;
0x000220c4 bic r1, r3, 1 | r1 = BIT_MASK (r3, 1);
0x000220c8 bl 0x2c85c | g_value_init ();
0x000220cc str r8, [sp] | *(sp) = r8;
0x000220d0 ldr r2, [fp, -0x8c] | r2 = var_8ch;
0x000220d4 mov r1, r7 | r1 = r7;
0x000220d8 mov r3, r4 | r3 = r4;
0x000220dc ldr r0, [fp, -0x94] | r0 = var_94h;
0x000220e0 bl 0xee2c | g_closure_invoke ();
0x000220e4 ldr r3, [fp, -0x98] | r3 = var_98h;
0x000220e8 ldr r0, [fp, -0x7c] | r0 = var_7ch;
0x000220ec tst r3, 1 |
| if ((r3 & 1) != 0) {
0x000220f0 moveq sl, 0 | sl = 0;
| }
| if ((r3 & 1) == 0) {
0x000220f4 movne sl, 0x8000000 | sl = 0x8000000;
| }
0x000220f8 bl 0x2a7f8 | g_type_value_table_peek ();
0x000220fc mov r2, 0x40 | r2 = 0x40;
0x00022100 mov r1, r5 | r1 = r5;
0x00022104 ldr r3, [r0, 0x18] | r3 = *((r0 + 0x18));
0x00022108 str r0, [fp, -0x8c] | var_8ch = r0;
0x0002210c str r3, [fp, -0x94] | var_94h = r3;
0x00022110 sub r3, fp, 0x64 | r3 -= var_64h;
0x00022114 mov r0, r3 | r0 = r3;
0x00022118 str r3, [fp, -0x88] | var_88h = r3;
0x0002211c bl 0x9118 | memset (r0, r1, r2);
0x00022120 ldr r2, [fp, -0x80] | r2 = var_80h;
0x00022124 ldr r0, [fp, -0x88] | r0 = var_88h;
0x00022128 ldr r3, [fp, -0x94] | r3 = var_94h;
0x0002212c mov r1, r5 | r1 = r5;
| do {
0x00022130 ldrb ip, [r3, r1] | ip = *((r3 + r1));
0x00022134 cmp ip, 0 |
| if (ip == 0) {
0x00022138 bne 0x22170 |
0x0002213c ldr r3, [fp, -0x8c] | r3 = var_8ch;
0x00022140 cmp r5, 0 |
| if (r5 == 0) {
0x00022144 strne r2, [fp, -0x80] | var_80h = r2;
| }
0x00022148 ldr r5, [r3, 0x1c] | r5 = *((r3 + 0x1c));
0x0002214c ldr r2, [fp, -0x88] | r2 = var_88h;
0x00022150 mov r3, sl | r3 = sl;
0x00022154 mov r0, r7 | r0 = r7;
0x00022158 blx r5 | uint32_t (*r5)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
0x0002215c subs r5, r0, 0 | r5 -= var_7ch;
| if (r5 != var_7ch) {
0x00022160 bne 0x22234 | goto label_22;
| }
0x00022164 mov r0, r7 | r0 = r7;
0x00022168 bl 0x2ca38 | g_value_unset ();
0x0002216c b 0x21e90 | goto label_7;
| }
0x00022170 sub ip, ip, 0x64 |
0x00022174 cmp ip, 0xd |
| if (ip > 0xd) {
| /* switch table (14 cases) at 0x22180 */
0x00022178 addls pc, pc, ip, lsl 2 | pc += (ip << 2);
| }
0x0002217c b 0x22208 | goto label_23;
0x00022180 b 0x221dc | goto label_24;
0x00022184 b 0x22208 | goto label_23;
0x00022188 b 0x22208 | goto label_23;
0x0002218c b 0x22208 | goto label_23;
0x00022190 b 0x22208 | goto label_23;
0x00022194 b 0x221f8 | goto label_25;
0x00022198 b 0x22208 | goto label_23;
0x0002219c b 0x22208 | goto label_23;
0x000221a0 b 0x221f8 | goto label_25;
0x000221a4 b 0x22208 | goto label_23;
0x000221a8 b 0x22208 | goto label_23;
0x000221ac b 0x22208 | goto label_23;
0x000221b0 b 0x221f8 | goto label_25;
0x000221b4 b 0x221b8 |
0x000221b8 add r2, r2, 7 | r2 += 7;
0x000221bc bic lr, r2, 7 | lr = BIT_MASK (r2, 7);
0x000221c0 ldrd r8, sb, [lr] | __asm ("ldrd r8, sb, [lr]");
0x000221c4 lsl ip, r1, 3 |
0x000221c8 add r2, lr, 8 | r2 = lr + 8;
0x000221cc strd r8, sb, [r0, ip] | __asm ("strd r8, sb, [r0, ip]");
| label_8:
0x000221d0 add r1, r1, 1 | r1++;
0x000221d4 mov r5, 1 | r5 = 1;
0x000221d8 b 0x22130 |
| } while (1);
| label_24:
0x000221dc add r2, r2, 7 | r2 += 7;
0x000221e0 bic lr, r2, 7 | lr = BIT_MASK (r2, 7);
0x000221e4 ldrd r8, sb, [lr] | __asm ("ldrd r8, sb, [lr]");
0x000221e8 lsl ip, r1, 3 |
0x000221ec add r2, lr, 8 | r2 = lr + 8;
0x000221f0 strd r8, sb, [r0, ip] | __asm ("strd r8, sb, [r0, ip]");
0x000221f4 b 0x221d0 | goto label_8;
| label_25:
0x000221f8 ldr ip, [r2] | ip = *(r2);
0x000221fc add r2, r2, 4 | r2 += 4;
0x00022200 str ip, [r0, r1, lsl 3] | offset_2 = r1 << 3;
| *((r0 + offset_2)) = ip;
0x00022204 b 0x221d0 | goto label_8;
| label_23:
0x00022208 mov r3, 0 | r3 = 0;
0x0002220c str r3, [sp] | *(sp) = r3;
0x00022210 ldr r3, [pc, 0xd8] |
0x00022214 ldr r1, [pc, 0xd8] | r1 = *(0x222f0);
0x00022218 ldr r0, [pc, 0xd8] | r0 = *(0x222f4);
0x0002221c add r3, pc, r3 | r3 = pc + r3;
0x00022220 add r3, r3, 0x214 | r3 = 0x22500;
0x00022224 ldr r2, [pc, 0xd0] | r2 = *(0x222f8);
0x00022228 add r1, pc, r1 | r1 = pc + r1;
0x0002222c add r0, pc, r0 | r0 = pc + r0;
0x00022230 b 0x21ca4 | goto label_5;
| label_22:
0x00022234 ldr r3, [pc, 0xc4] | r3 = *(0x222fc);
0x00022238 ldr r2, [pc, 0xc4] | r2 = *(0x22300);
0x0002223c ldr r0, [pc, 0xc4] | r0 = *(0x22304);
0x00022240 str r5, [sp] | *(sp) = r5;
0x00022244 add r3, pc, r3 | r3 = pc + r3;
0x00022248 add r2, pc, r2 | r2 = pc + r2;
0x0002224c mov r1, 0x10 | r1 = 0x10;
0x00022250 add r0, pc, r0 | r0 = pc + r0;
0x00022254 bl 0x9544 | g_log ();
0x00022258 mov r0, r5 | r0 = r5;
0x0002225c bl 0x937c | g_free ();
0x00022260 b 0x21e90 | goto label_7;
| label_16:
0x00022264 mov r0, r7 | r0 = r7;
0x00022268 bl 0x2ca38 | g_value_unset ();
0x0002226c add r7, r7, 0x18 | r7 += 0x18;
0x00022270 b 0x21ea4 | goto label_9;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libgobject-2.0.so.0.5600.4 @ 0x231d8 */
| #include <stdint.h>
|
; (fcn) sym.g_signal_has_handler_pending () | void g_signal_has_handler_pending (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_ch;
| int32_t var_10h;
| r0 = arg1;
| r1 = arg2;
0x000231d8 push {r0, r1, r2, r3, r4, r5, r6, r7, r8, sb, sl, lr} |
0x000231dc mov r7, r0 | r7 = r0;
0x000231e0 mov r5, r1 | r5 = r1;
0x000231e4 mov sl, r2 | sl = r2;
0x000231e8 mov sb, r3 | sb = r3;
0x000231ec bl 0x2a6dc | r0 = g_type_check_instance ();
0x000231f0 subs r4, r0, 0 | r4 = r0 - 0;
| if (r4 != r0) {
0x000231f4 beq 0x2322c |
0x000231f8 cmp r5, 0 |
| if (r5 != 0) {
0x000231fc bne 0x2325c | goto label_2;
| }
0x00023200 ldr r1, [pc, 0x138] |
0x00023204 ldr r2, [pc, 0x138] | r2 = *(0x23340);
0x00023208 ldr r0, [pc, 0x138] | r0 = *(0x23344);
0x0002320c add r1, pc, r1 | r1 = pc + r1;
0x00023210 add r1, r1, 0x358 | r1 = 0x23694;
0x00023214 add r2, pc, r2 | r2 = pc + r2;
0x00023218 add r1, r1, 3 | r1 += 3;
0x0002321c add r0, pc, r0 | r0 = pc + r0;
0x00023220 bl 0x92ec | g_return_if_fail_warning ();
0x00023224 mov r4, r5 | r4 = r5;
0x00023228 b 0x23250 |
| } else {
0x0002322c ldr r1, [pc, 0x118] |
0x00023230 ldr r2, [pc, 0x118] | r2 = *(0x2334c);
0x00023234 ldr r0, [pc, 0x118] | r0 = *(0x23350);
0x00023238 add r1, pc, r1 | r1 = pc + r1;
0x0002323c add r1, r1, 0x358 | r1 = 0x236a0;
0x00023240 add r2, pc, r2 | r2 = pc + r2;
0x00023244 add r1, r1, 3 | r1 += 3;
0x00023248 add r0, pc, r0 | r0 = pc + r0;
0x0002324c bl 0x92ec | g_return_if_fail_warning ();
| }
| do {
0x00023250 mov r0, r4 | r0 = r4;
0x00023254 add sp, sp, 0x10 |
0x00023258 pop {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_2:
0x0002325c ldr r6, [pc, 0xf4] |
0x00023260 add r6, pc, r6 | r6 = pc + r6;
0x00023264 add r6, r6, 0xc | r6 = 0x23360;
0x00023268 mov r0, r6 | r0 = r6;
0x0002326c bl 0x9184 | g_mutex_lock ();
0x00023270 mov r0, r5 | r0 = r5;
0x00023274 bl 0x1d824 | fcn_0001d824 (r0);
0x00023278 cmp sl, 0 |
0x0002327c mov r8, r0 | r8 = r0;
| if (sl == 0) {
0x00023280 beq 0x232c4 | goto label_3;
| }
0x00023284 ldrh r4, [r0, 0xc] | r4 = *((r0 + 0xc));
0x00023288 lsr r4, r4, 1 | r4 >>= 1;
0x0002328c ands r4, r4, 0x10 | r4 &= 0x10;
| if (r4 != r4) {
0x00023290 bne 0x232c4 | goto label_3;
| }
0x00023294 ldr r3, [pc, 0xc0] | r3 = *(0x23358);
0x00023298 ldr r2, [pc, 0xc0] | r2 = *(0x2335c);
0x0002329c ldr r0, [pc, 0xc0] | r0 = *(0x23360);
0x000232a0 stm sp, {r5, sl} | *(sp) = r5;
| *((sp + 4)) = sl;
0x000232a4 add r0, pc, r0 | r0 = pc + r0;
0x000232a8 add r3, pc, r3 | r3 = pc + r3;
0x000232ac add r2, pc, r2 | r2 = pc + r2;
0x000232b0 mov r1, 0x10 | r1 = 0x10;
0x000232b4 bl 0x9544 | g_log ();
0x000232b8 mov r0, r6 | r0 = r6;
| label_0:
0x000232bc bl 0x9208 | g_mutex_unlock ();
0x000232c0 b 0x23250 |
| } while (1);
| label_3:
0x000232c4 cmp sb, 0 |
0x000232c8 mov r3, 0 | r3 = 0;
0x000232cc mov r4, 1 | r4 = 1;
0x000232d0 str r3, [sp, 8] | var_8h = r3;
0x000232d4 str r3, [sp, 4] | var_4h = r3;
0x000232d8 str r3, [sp] | *(sp) = r3;
| if (sb == 0) {
0x000232dc movne r1, 3 | r1 = 3;
| }
| if (sb != 0) {
0x000232e0 moveq r1, 0x23 | r1 = 0x23;
| }
0x000232e4 str r4, [sp, 0xc] | var_ch = r4;
0x000232e8 mov r3, sl | r3 = sl;
0x000232ec mov r2, r5 | r2 = r5;
0x000232f0 mov r0, r7 | r0 = r7;
0x000232f4 bl 0x1ec74 | r0 = fcn_0001ec74 (r0, r1, r2, r3, r4, r5);
0x000232f8 cmp r0, 0 |
| if (r0 == 0) {
0x000232fc beq 0x23318 | goto label_4;
| }
0x00023300 mov r1, r7 | r1 = r7;
0x00023304 bl 0x1eb50 | fcn_0001eb50 (r0, r1);
| do {
| label_1:
0x00023308 ldr r0, [pc, 0x58] |
0x0002330c add r0, pc, r0 | r0 = pc + r0;
0x00023310 add r0, r0, 0xc | r0 = 0x23370;
0x00023314 b 0x232bc | goto label_0;
| label_4:
0x00023318 ldr r3, [r7] | r3 = *(r7);
0x0002331c ldr r0, [r8, 0x18] | r0 = *((r8 + 0x18));
0x00023320 ldr r1, [r3] | r1 = *(r3);
0x00023324 bl 0x1df38 | r0 = fcn_0001df38 (r0, r1);
0x00023328 subs r4, r0, 0 | r4 = r0 - 0;
0x0002332c beq 0x23308 |
| } while (r4 == r0);
0x00023330 ldr r4, [r4] | r4 = *(r4);
0x00023334 adds r4, r4, 0 | r4 += 0;
| if (r4 == r4) {
0x00023338 movne r4, 1 | r4 = 1;
| }
0x0002333c b 0x23308 | goto label_1;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libgobject-2.0.so.0.5600.4 @ 0x216b0 */
| #include <stdint.h>
|
; (fcn) sym.g_signal_override_class_closure () | void g_signal_override_class_closure (int32_t arg1, int32_t arg2) {
| int32_t var_ch;
| r0 = arg1;
| r1 = arg2;
0x000216b0 push {r0, r1, r2, r4, r5, r6, r7, lr} |
0x000216b4 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 != r0) {
0x000216b8 beq 0x216e8 |
0x000216bc cmp r2, 0 |
| if (r2 != 0) {
0x000216c0 bne 0x21714 | goto label_1;
| }
0x000216c4 ldr r1, [pc, 0x124] |
0x000216c8 ldr r2, [pc, 0x124] | r2 = *(0x217f0);
0x000216cc ldr r0, [pc, 0x124] | r0 = *(0x217f4);
0x000216d0 add r1, pc, r1 | r1 = pc + r1;
0x000216d4 add r1, r1, 0x1b4 | r1 = 0x219a0;
0x000216d8 add r2, pc, r2 | r2 = pc + r2;
0x000216dc add r1, r1, 1 | r1++;
0x000216e0 add r0, pc, r0 | r0 = pc + r0;
0x000216e4 b 0x21708 |
| } else {
0x000216e8 ldr r1, [pc, 0x10c] |
0x000216ec ldr r2, [pc, 0x10c] | r2 = *(0x217fc);
0x000216f0 ldr r0, [pc, 0x10c] | r0 = *(0x21800);
0x000216f4 add r1, pc, r1 | r1 = pc + r1;
0x000216f8 add r1, r1, 0x1b4 | r1 = 0x219ac;
0x000216fc add r2, pc, r2 | r2 = pc + r2;
0x00021700 add r1, r1, 1 | r1++;
0x00021704 add r0, pc, r0 | r0 = pc + r0;
| }
0x00021708 add sp, sp, 0xc |
0x0002170c pop {r4, r5, r6, r7, lr} |
0x00021710 b 0x92ec | void (*0x92ec)() ();
| label_1:
0x00021714 ldr r0, [pc, 0xec] |
0x00021718 mov r4, r1 | r4 = r1;
0x0002171c add r0, pc, r0 | r0 = pc + r0;
0x00021720 add r0, r0, 0xc | r0 = 0x21810;
0x00021724 mov r6, r2 | r6 = r2;
0x00021728 bl 0x9184 | g_mutex_lock ();
0x0002172c mov r0, r5 | r0 = r5;
0x00021730 bl 0x1d824 | r0 = fcn_0001d824 (r0);
0x00021734 mov r7, r0 | r7 = r0;
0x00021738 bl 0x1de8c | fcn_0001de8c (r0);
0x0002173c ldr r1, [r7, 4] | r1 = *((r7 + 4));
0x00021740 mov r0, r4 | r0 = r4;
0x00021744 bl 0x28dd8 | r0 = g_type_is_a ();
0x00021748 cmp r0, 0 |
| if (r0 != 0) {
0x0002174c bne 0x21794 | goto label_2;
| }
0x00021750 mov r0, r4 | r0 = r4;
0x00021754 bl 0x1de50 | fcn_0001de50 (r0);
0x00021758 ldr r3, [pc, 0xac] | r3 = *(0x21808);
0x0002175c ldr r2, [pc, 0xac] | r2 = *(0x2180c);
0x00021760 add r3, pc, r3 | r3 = pc + r3;
0x00021764 add r2, pc, r2 | r2 = pc + r2;
0x00021768 mov r1, 0x10 | r1 = 0x10;
0x0002176c stm sp, {r0, r5} | *(sp) = r0;
| *((sp + 4)) = r5;
0x00021770 ldr r0, [pc, 0x9c] | r0 = *(0x21810);
0x00021774 add r0, pc, r0 | r0 = pc + r0;
| do {
0x00021778 bl 0x9544 | g_log ();
| label_0:
0x0002177c ldr r0, [pc, 0x94] |
0x00021780 add r0, pc, r0 | r0 = pc + r0;
0x00021784 add r0, r0, 0xc | r0 = 0x21820;
0x00021788 add sp, sp, 0xc |
0x0002178c pop {r4, r5, r6, r7, lr} |
0x00021790 b 0x9208 | void (*0x9208)() ();
| label_2:
0x00021794 mov r1, r4 | r1 = r4;
0x00021798 ldr r0, [r7, 0x18] | r0 = *((r7 + 0x18));
0x0002179c bl 0x1df38 | r0 = fcn_0001df38 (r0, r1);
0x000217a0 cmp r0, 0 |
| if (r0 == 0) {
0x000217a4 beq 0x217dc | goto label_3;
| }
0x000217a8 ldr r0, [r0] | r0 = *(r0);
0x000217ac cmp r0, r4 |
| if (r0 != r4) {
0x000217b0 bne 0x217dc | goto label_3;
| }
0x000217b4 bl 0x1de50 | fcn_0001de50 (r0);
0x000217b8 ldr r3, [pc, 0x5c] | r3 = *(0x21818);
0x000217bc ldr r2, [pc, 0x5c] | r2 = *(0x2181c);
0x000217c0 add r3, pc, r3 | r3 = pc + r3;
0x000217c4 add r2, pc, r2 | r2 = pc + r2;
0x000217c8 mov r1, 0x10 | r1 = 0x10;
0x000217cc stm sp, {r0, r5} | *(sp) = r0;
| *((sp + 4)) = r5;
0x000217d0 ldr r0, [pc, 0x4c] | r0 = *(0x21820);
0x000217d4 add r0, pc, r0 | r0 = pc + r0;
0x000217d8 b 0x21778 |
| } while (1);
| label_3:
0x000217dc mov r2, r6 | r2 = r6;
0x000217e0 mov r1, r4 | r1 = r4;
0x000217e4 mov r0, r7 | r0 = r7;
0x000217e8 bl 0x1e2b8 | fcn_0001e2b8 (r0, r1);
0x000217ec b 0x2177c | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libgobject-2.0.so.0.5600.4 @ 0x2b9c0 */
| #include <stdint.h>
|
; (fcn) sym.g_type_module_use () | void g_type_module_use (int32_t arg1) {
| int32_t var_0h;
| int32_t var_8h;
| r0 = arg1;
0x0002b9c0 push {r0, r1, r4, r5, r6, lr} |
0x0002b9c4 mov r4, r0 | r4 = r0;
0x0002b9c8 bl 0x2b7a0 | g_type_module_get_type ();
0x0002b9cc cmp r4, 0 |
| if (r4 != 0) {
0x0002b9d0 beq 0x2ba00 |
0x0002b9d4 ldr r5, [r4] | r5 = *(r4);
0x0002b9d8 mov r1, r0 | r1 = r0;
0x0002b9dc cmp r5, 0 |
| if (r5 != 0) {
0x0002b9e0 beq 0x2b9f0 |
0x0002b9e4 ldr r3, [r5] | r3 = *(r5);
0x0002b9e8 cmp r3, r0 |
| if (r3 == r0) {
0x0002b9ec beq 0x2ba30 | goto label_4;
| }
| }
0x0002b9f0 mov r0, r4 | r0 = r4;
0x0002b9f4 bl 0x29f44 | r0 = g_type_check_instance_is_a ();
0x0002b9f8 cmp r0, 0 |
| if (r0 != 0) {
0x0002b9fc bne 0x2ba30 | goto label_4;
| }
| }
0x0002ba00 ldr r1, [pc, 0xc4] |
0x0002ba04 ldr r2, [pc, 0xc4] | r2 = *(0x2bacc);
0x0002ba08 ldr r0, [pc, 0xc4] | r0 = *(0x2bad0);
0x0002ba0c add r1, pc, r1 | r1 = pc + r1;
0x0002ba10 add r2, pc, r2 | r2 = pc + r2;
0x0002ba14 add r1, r1, 0x2b | r1 = 0x2baf3;
0x0002ba18 add r0, pc, r0 | r0 = pc + r0;
0x0002ba1c bl 0x92ec | g_return_if_fail_warning ();
0x0002ba20 mov r5, 0 | r5 = 0;
| do {
| label_0:
0x0002ba24 mov r0, r5 | r0 = r5;
0x0002ba28 add sp, sp, 8 |
0x0002ba2c pop {r4, r5, r6, pc} |
| label_4:
0x0002ba30 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0002ba34 add r3, r3, 1 | r3++;
0x0002ba38 cmp r3, 1 |
0x0002ba3c str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
| if (r3 == 1) {
0x0002ba40 beq 0x2ba4c | goto label_5;
| }
| label_1:
0x0002ba44 mov r5, 1 | r5 = 1;
0x0002ba48 b 0x2ba24 |
| } while (1);
| label_5:
0x0002ba4c ldr r3, [r5, 0x44] | r3 = *((r5 + 0x44));
0x0002ba50 mov r0, r4 | r0 = r4;
0x0002ba54 blx r3 | r0 = uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0002ba58 subs r5, r0, 0 | r5 = r0 - 0;
| if (r5 == r0) {
0x0002ba5c ldrne r3, [r4, 0x10] | r3 = *((r4 + 0x10));
| }
| if (r5 == r0) {
0x0002ba60 bne 0x2ba78 |
| label_3:
0x0002ba64 ldr r3, [r4, 0xc] | r3 = *((r4 + 0xc));
0x0002ba68 sub r3, r3, 1 | r3--;
0x0002ba6c str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x0002ba70 b 0x2ba24 | goto label_0;
| label_2:
0x0002ba74 ldr r3, [r3, 4] | r3 = *((r3 + 4));
| }
0x0002ba78 cmp r3, 0 |
| if (r3 == 0) {
0x0002ba7c beq 0x2ba44 | goto label_1;
| }
0x0002ba80 ldr r2, [r3] | r2 = *(r3);
0x0002ba84 ldr r5, [r2] | r5 = *(r2);
0x0002ba88 cmp r5, 0 |
| if (r5 != 0) {
0x0002ba8c bne 0x2ba74 | goto label_2;
| }
0x0002ba90 ldr r6, [r4, 0x18] | r6 = *((r4 + 0x18));
0x0002ba94 cmp r6, 0 |
| if (r6 != 0) {
0x0002ba98 ldreq r6, [pc, 0x38] | r6 = *((pc + 0x38));
| }
| if (r6 != 0) {
0x0002ba9c addeq r6, pc, r6 | r6 = pc + r6;
| }
0x0002baa0 ldr r0, [r2, 4] | r0 = *((r2 + 4));
0x0002baa4 bl 0x28540 | g_type_name ();
0x0002baa8 ldr r2, [pc, 0x2c] | r2 = *(0x2bad8);
0x0002baac mov r3, r6 | r3 = r6;
0x0002bab0 add r2, pc, r2 | r2 = pc + r2;
0x0002bab4 mov r1, 0x10 | r1 = 0x10;
0x0002bab8 str r0, [sp] | *(sp) = r0;
0x0002babc ldr r0, [pc, 0x1c] | r0 = *(0x2badc);
0x0002bac0 add r0, pc, r0 | r0 = pc + r0;
0x0002bac4 bl 0x9544 | g_log ();
0x0002bac8 b 0x2ba64 | goto label_3;
| }
[*] Function popen used 1 times libgobject-2.0.so.0.5600.4