[*] Binary protection state of libglib-2.0.so.0.7200.3
Full RELRO No Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function system tear down of libglib-2.0.so.0.7200.3
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libglib-2.0.so.0.7200.3 @ 0x37808 */
| #include <stdint.h>
|
; (fcn) sym.g_key_file_load_from_data_dirs () | void g_key_file_load_from_data_dirs (int16_t arg_4h, int16_t arg_30h, uint32_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00037808 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0003780c sub sp, 0xc |
0x0003780e cmp r0, 0 |
| if (arg_30h == ) {
0x00037810 beq 0x378b2 | goto label_1;
| }
0x00037812 mov r6, r0 | r6 = r0;
0x00037814 mov r0, r1 | r0 = r1;
0x00037816 mov r7, r1 | r7 = r1;
0x00037818 mov r8, r2 | r8 = r2;
0x0003781a mov sb, r3 | sb = r3;
0x0003781c bl 0x2f3f0 | r0 = g_path_is_absolute ();
0x00037820 cmp r0, 0 |
| if (r0 != 0) {
0x00037822 bne 0x37894 | goto label_2;
| }
0x00037824 bl 0x6674c | r0 = g_get_user_data_dir ();
0x00037828 mov sl, r0 | sl = r0;
0x0003782a bl 0x66a18 | r0 = g_get_system_data_dirs ()
0x0003782e mov r4, r0 | r4 = r0;
0x00037830 bl 0x541a4 | g_strv_length ();
0x00037834 movs r1, 4 | r1 = 4;
0x00037836 adds r0, 2 | r0 += 2;
0x00037838 bl 0x416c0 | r0 = g_malloc_n ();
0x0003783c mov r5, r0 | r5 = r0;
0x0003783e mov r0, sl | r0 = sl;
0x00037840 bl 0x52ce0 | g_strdup ();
0x00037844 str r0, [r5] | *(r5) = r0;
0x00037846 ldr r0, [r4] | r0 = *(r4);
0x00037848 cmp r0, 0 |
| if (r0 == 0) {
0x0003784a beq 0x378c8 | goto label_3;
| }
0x0003784c mov fp, r5 |
0x0003784e mov.w sl, 1 | sl = 1;
| do {
0x00037852 bl 0x52ce0 | g_strdup ();
0x00037856 str r0, [fp, 4]! | *(arg_4h) = r0;
0x0003785a add.w sl, sl, 1 | sl++;
0x0003785e ldr r0, [r4, 4]! | r0 = *((r4 += 4));
0x00037862 cmp r0, 0 |
0x00037864 bne 0x37852 |
| } while (r0 != 0);
0x00037866 lsl.w sl, sl, 2 | sl <<= 2;
| label_0:
0x0003786a ldr r2, [sp, 0x30] | r2 = *(arg_30h);
0x0003786c mov r3, r8 | r3 = r8;
0x0003786e mov r1, r7 | r1 = r7;
0x00037870 str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00037874 mov r0, r6 | r0 = r6;
0x00037876 str r2, [sp, 4] | var_4h = r2;
0x00037878 movs r2, 0 | r2 = 0;
0x0003787a str.w r2, [r5, sl] | __asm ("str.w r2, [r5, sl]");
0x0003787e mov r2, r5 | r2 = r5;
0x00037880 bl 0x375d8 | r0 = g_key_file_load_from_dirs ();
0x00037884 mov r4, r0 | r4 = r0;
0x00037886 mov r0, r5 | r0 = r5;
0x00037888 bl 0x53ccc | g_strfreev ();
0x0003788c mov r0, r4 | r0 = r4;
0x0003788e add sp, 0xc |
0x00037890 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_2:
0x00037894 ldr r1, [pc, 0x38] |
0x00037896 ldr r2, [pc, 0x3c] |
0x00037898 ldr r0, [pc, 0x3c] |
0x0003789a add r1, pc |
0x0003789c add r2, pc | r2 = 0x6f176;
0x0003789e add.w r1, r1, 0x228 | r1 = 0x6f396;
0x000378a2 add r0, pc | r0 = 0x6f17e;
0x000378a4 bl 0x42bcc | g_return_if_fail_warning ();
| do {
0x000378a8 movs r4, 0 | r4 = 0;
0x000378aa mov r0, r4 | r0 = r4;
0x000378ac add sp, 0xc |
0x000378ae pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_1:
0x000378b2 ldr r1, [pc, 0x28] |
0x000378b4 ldr r2, [pc, 0x28] |
0x000378b6 ldr r0, [pc, 0x2c] |
0x000378b8 add r1, pc |
0x000378ba add r2, pc | r2 = 0x6f19e;
0x000378bc add.w r1, r1, 0x228 | r1 = 0x6f3c2;
0x000378c0 add r0, pc | r0 = 0x6f1aa;
0x000378c2 bl 0x42bcc | g_return_if_fail_warning ();
0x000378c6 b 0x378a8 |
| } while (1);
| label_3:
0x000378c8 mov.w sl, 4 | sl = 4;
0x000378cc b 0x3786a | goto label_0;
| }
[*] Function system used 2 times libglib-2.0.so.0.7200.3