[*] Binary protection state of libxml2.so.2.9.14

  
  	Full RELRO     Canary found      NX enabled   DSO          No RPATH     No RUNPATH   No Symbols


[*] Function printf tear down of libxml2.so.2.9.14

    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libxml2.so.2.9.14 @ 0x456ec */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.000456ec ()                                      | void fcn_000456ec (int16_t arg_2ch, int16_t arg_13a0h, int16_t arg_13c0h, int16_t arg_2700h, uint32_t arg1, int16_t arg2, uint32_t arg3, uint32_t arg4) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_14h;
                                                                 |     int16_t var_18h;
                                                                 |     uint32_t var_1ch;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x000456ec push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x000456f0 mov r6, r1                                        |     r6 = r1;
    0x000456f2 ldr r4, [pc, 0x3d8]                               |     
    0x000456f4 sub.w sp, sp, 0x2740                              |     
    0x000456f8 sub sp, 4                                         |     
    0x000456fa cmp r0, 0                                         |     
    0x000456fc it ne                                             |     
                                                                 |     if (r0 != 0) {
    0x000456fe cmpne r3, 0                                       |         __asm ("cmpne r3, 0");
                                                                 |     }
    0x00045700 ldr r1, [pc, 0x3cc]                               |     r1 = *(0x45ad0);
    0x00045702 add.w r5, sp, 0x2700                              |     r5 += arg_2700h;
    0x00045706 add r4, pc                                        |     r4 = 0x8b1d8;
    0x00045708 add.w r5, r5, 0x3c                                |     r5 += 0x3c;
    0x0004570c ldr r1, [r4, r1]                                  |     
    0x0004570e ldr r1, [r1]                                      |     r1 = *(0x8b1d8);
    0x00045710 str r1, [r5]                                      |     *(r5) = r1;
    0x00045712 mov.w r1, 0                                       |     r1 = 0;
    0x00045716 str r3, [sp, 0x1c]                                |     var_1ch = r3;
    0x00045718 ldr r3, [pc, 0x3b8]                               |     
    0x0004571a ite eq                                            |     
                                                                 |     if (r0 != 0) {
    0x0004571c moveq r1, 1                                       |         r1 = 1;
                                                                 |     }
                                                                 |     if (r0 == 0) {
    0x0004571e movne r1, 0                                       |         r1 = 0;
                                                                 |     }
    0x00045720 cmp r2, 0                                         |     
    0x00045722 it eq                                             |     
                                                                 |     if (r2 != 0) {
    0x00045724 orreq r1, r1, 1                                   |         r1 |= 1;
                                                                 |     }
    0x00045728 add r3, pc                                        |     r3 = 0x8b200;
    0x0004572a str r3, [sp, 0x10]                                |     var_10h = r3;
    0x0004572c cmp r1, 0                                         |     
                                                                 |     if (r1 != 0) {
    0x0004572e bne.w 0x45a5a                                     |         goto label_14;
                                                                 |     }
    0x00045732 mov r7, r2                                        |     r7 = r2;
    0x00045734 ldr r3, [r2, 0x34]                                |     r3 = *((r2 + 0x34));
    0x00045736 ldr r2, [r2, 0x28]                                |     r2 = *((r2 + 0x28));
    0x00045738 mov r4, r0                                        |     r4 = r0;
    0x0004573a movs r5, 1                                        |     r5 = 1;
    0x0004573c str r2, [sp, 0x14]                                |     var_14h = r2;
    0x0004573e ldr r2, [r7, 8]                                   |     r2 = *((r7 + 8));
    0x00045740 str r2, [sp, 0x18]                                |     var_18h = r2;
    0x00045742 cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x00045744 beq.w 0x45a4a                                     |         goto label_15;
                                                                 |     }
                                                                 | label_9:
    0x00045748 mov r0, r3                                        |     r0 = r3;
    0x0004574a bl 0x72080                                        |     r0 = xmlRegexpIsDeterminist ();
    0x0004574e cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00045750 beq.w 0x45a5a                                     |         goto label_14;
                                                                 |     }
    0x00045754 vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00045758 add.w fp, r4, 0x10                                |     
    0x0004575c ldr r0, [r7, 0x34]                                |     r0 = *((r7 + 0x34));
    0x0004575e movs r7, 0                                        |     r7 = 0;
    0x00045760 mov r2, r7                                        |     r2 = r7;
    0x00045762 mov r1, r7                                        |     r1 = r7;
    0x00045764 vst1.32 {d16}, [fp]                               |     __asm ("vst1.32 {d16}, [fp]");
    0x00045768 str r7, [r4, 0x18]                                |     *((r4 + 0x18)) = r7;
    0x0004576a bl 0x711b0                                        |     r0 = xmlRegNewExecCtxt ();
    0x0004576e mov sb, r0                                        |     sb = r0;
    0x00045770 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00045772 beq.w 0x459f8                                     |         goto label_16;
                                                                 |     }
                                                                 |     if (r6 == 0) {
    0x00045776 cbz r6, 0x457b2                                   |         goto label_4;
                                                                 |     }
    0x00045778 mov r5, r6                                        |     r5 = r6;
                                                                 |     do {
                                                                 | label_3:
    0x0004577a ldr r3, [r5, 4]                                   |         r3 = *((r5 + 4));
    0x0004577c subs r3, 1                                        |         r3--;
    0x0004577e cmp r3, 4                                         |         
                                                                 |         if (r3 > 4) {
    0x00045780 bhi.w 0x4590c                                     |             goto label_6;
                                                                 |         }
                                                                 |         /* switch table (5 cases) at 0x45788 */
    0x00045784 tbh [pc, r3, lsl 1]                               |         __asm ("tbh [pc, r3, lsl 1]");
    0x00045792 ldr r3, [r5, 0xc]                                 |         r3 = *((r5 + 0xc));
    0x00045794 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x00045796 beq.w 0x4590c                                     |             goto label_6;
                                                                 |         }
    0x0004579a ldr r3, [r3, 0xc]                                 |         r3 = *((r3 + 0xc));
    0x0004579c cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x0004579e beq.w 0x4590c                                     |             goto label_6;
                                                                 |         }
    0x000457a2 mov r1, r5                                        |         r1 = r5;
    0x000457a4 mov r0, r4                                        |         r0 = r4;
    0x000457a6 bl 0x443c8                                        |         fcn_000443c8 (r0, r1);
    0x000457aa ldr r3, [r5, 0xc]                                 |         r3 = *((r5 + 0xc));
    0x000457ac ldr r5, [r3, 0xc]                                 |         r5 = *((r3 + 0xc));
    0x000457ae cmp r5, 0                                         |         
    0x000457b0 bne 0x4577a                                       |         
                                                                 |     } while (r5 != 0);
                                                                 | label_4:
    0x000457b2 movs r2, 0                                        |     r2 = 0;
    0x000457b4 mov r0, sb                                        |     r0 = sb;
    0x000457b6 mov r1, r2                                        |     r1 = r2;
    0x000457b8 bl 0x71310                                        |     r0 = xmlRegExecPushString ();
    0x000457bc mov r5, r0                                        |     r5 = r0;
    0x000457be mov r0, sb                                        |     r0 = sb;
    0x000457c0 adds r7, r5, 3                                    |     r7 = r5 + 3;
    0x000457c2 bic r7, r7, 4                                     |     r7 = BIT_MASK (r7, 4);
    0x000457c6 bl 0x71278                                        |     xmlRegFreeExecCtxt ();
    0x000457ca adds r3, r5, 3                                    |     r3 = r5 + 3;
    0x000457cc it eq                                             |     
                                                                 |     if (r3 != r5) {
    0x000457ce moveq r5, 1                                       |         r5 = 1;
                                                                 |     }
    0x000457d0 cmp r7, 0                                         |     
                                                                 |     if (r7 == 0) {
    0x000457d2 beq.w 0x45a0a                                     |         goto label_17;
                                                                 |     }
                                                                 | label_8:
    0x000457d6 add.w sb, sp, 0x2c                                |     sb += arg_2ch;
    0x000457da movs r5, 0                                        |     r5 = 0;
    0x000457dc movs r3, 1                                        |     r3 = 1;
    0x000457de ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x000457e0 movw r1, 0x1388                                   |     r1 = 0x1388;
    0x000457e4 mov r0, sb                                        |     r0 = sb;
    0x000457e6 strb.w r5, [sb]                                   |     *(sb) = r5;
    0x000457ea add.w r8, sp, 0x13a0                              |     r8 += arg_13a0h;
    0x000457ee bl 0x4538c                                        |     xmlSnprintfElementContent ()
    0x000457f2 add.w r3, sp, 0x13a0                              |     r3 += arg_13a0h;
    0x000457f6 add.w r8, r8, 0x14                                |     r8 += 0x14;
    0x000457fa adds r3, 0x14                                     |     r3 += 0x14;
    0x000457fc strb r5, [r3]                                     |     *(r3) = r5;
    0x000457fe cmp r6, 0                                         |     
                                                                 |     if (r6 == 0) {
    0x00045800 beq 0x458b2                                       |         goto label_11;
                                                                 |     }
    0x00045802 add.w r3, sp, 0x13c0                              |     r3 += arg_13c0h;
    0x00045806 add.w r8, sp, 0x13a0                              |     r8 += arg_13a0h;
    0x0004580a add.w r8, r8, 0x14                                |     r8 += 0x14;
    0x0004580e str r3, [sp, 0x24]                                |     var_24h = r3;
    0x00045810 b 0x45846                                         |     goto label_13;
                                                                 | label_2:
    0x00045812 mov r0, sb                                        |     r0 = sb;
    0x00045814 add.w sb, sp, 0x2c                                |     sb += arg_2ch;
    0x00045818 bl 0x71278                                        |     xmlRegFreeExecCtxt ();
    0x0004581c movs r5, 0                                        |     r5 = 0;
    0x0004581e movs r3, 1                                        |     r3 = 1;
    0x00045820 ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00045822 movw r1, 0x1388                                   |     r1 = 0x1388;
    0x00045826 mov r0, sb                                        |     r0 = sb;
    0x00045828 add.w r8, sp, 0x13a0                              |     r8 += arg_13a0h;
    0x0004582c strb.w r5, [sb]                                   |     *(sb) = r5;
    0x00045830 add.w r8, r8, 0x14                                |     r8 += 0x14;
    0x00045834 bl 0x4538c                                        |     xmlSnprintfElementContent ()
    0x00045838 add.w r3, sp, 0x13a0                              |     r3 += arg_13a0h;
    0x0004583c adds r3, 0x14                                     |     r3 += 0x14;
    0x0004583e strb r5, [r3]                                     |     *(r3) = r5;
    0x00045840 add.w r3, sp, 0x13c0                              |     r3 += arg_13c0h;
    0x00045844 str r3, [sp, 0x24]                                |     var_24h = r3;
                                                                 | label_13:
    0x00045846 ldr r3, [pc, 0x290]                               |     
    0x00045848 movw r2, 0x1388                                   |     r2 = 0x1388;
    0x0004584c ldr r1, [pc, 0x28c]                               |     
    0x0004584e mov r0, r8                                        |     r0 = r8;
    0x00045850 ldr.w sl, [pc, 0x28c]                             |     
    0x00045854 add r3, pc                                        |     r3 = 0x8b332;
    0x00045856 str r3, [sp, 0x20]                                |     var_20h = r3;
    0x00045858 add r1, pc                                        |     r1 = 0x8b338;
    0x0004585a ldr r3, [pc, 0x288]                               |     
    0x0004585c add sl, pc                                        |     sl = 0x8b340;
    0x0004585e add r3, pc                                        |     r3 = 0x8b348;
    0x00045860 str r3, [sp, 0x14]                                |     var_14h = r3;
    0x00045862 blx 0x1b674                                       |     fcn_0001b674 ();
                                                                 | label_0:
    0x00045866 mov r0, r8                                        |     r0 = r8;
    0x00045868 blx 0x1b960                                       |     r0 = fopen64 ();
    0x0004586c rsb.w r5, r0, 0x1380                              |     r5 = 0x1380 - r0;
    0x00045870 mov r7, r0                                        |     r7 = r0;
    0x00045872 adds r5, 8                                        |     r5 += 8;
    0x00045874 cmp r5, 0x31                                      |     
                                                                 |     if (r5 <= 0x31) {
    0x00045876 ble.w 0x45a60                                     |         goto label_18;
                                                                 |     }
    0x0004587a ldr r3, [r6, 4]                                   |     r3 = *((r6 + 4));
    0x0004587c subs r3, 1                                        |     r3--;
    0x0004587e cmp r3, 0x11                                      |     
                                                                 |     if (r3 > 0x11) {
    0x00045880 bhi 0x458fa                                       |         goto label_19;
                                                                 |     }
                                                                 |     /* switch table (18 cases) at 0x45886 */
    0x00045882 tbb [pc, r3]                                      |     __asm ("tbb [0x00045888]");
    0x00045898 ldr r3, [sp, 0x20]                                |     r3 = var_20h;
    0x0004589a ldr r0, [r3]                                      |     r0 = *(r3);
    0x0004589c str.w r0, [r8, r7]                                |     __asm ("str.w r0, [r8, r7]");
    0x000458a0 ldr r3, [r6, 0x18]                                |     r3 = *((r6 + 0x18));
                                                                 |     if (r3 != 0) {
    0x000458a2 cbnz r3, 0x458ee                                  |         goto label_7;
                                                                 |     }
                                                                 |     do {
                                                                 | label_1:
    0x000458a4 ldr r1, [pc, 0x240]                               |         
    0x000458a6 movw r2, 0x1388                                   |         r2 = 0x1388;
    0x000458aa mov r0, r8                                        |         r0 = r8;
    0x000458ac add r1, pc                                        |         r1 = 0x8b398;
    0x000458ae blx 0x1b674                                       |         fcn_0001b674 ();
                                                                 | label_11:
    0x000458b2 ldr r3, [sp, 0x18]                                |         r3 = var_18h;
    0x000458b4 cmp r3, 0                                         |         
                                                                 |         if (r3 == 0) {
    0x000458b6 beq.w 0x45a82                                     |             goto label_20;
                                                                 |         }
    0x000458ba str r3, [sp]                                      |         *(sp) = r3;
    0x000458bc mov.w r2, 0x1f8                                   |         r2 = 0x1f8;
    0x000458c0 ldr r3, [pc, 0x228]                               |         
    0x000458c2 mov r0, r4                                        |         r0 = r4;
    0x000458c4 ldr r1, [sp, 0x1c]                                |         r1 = var_1ch;
    0x000458c6 strd sb, r8, [sp, 4]                              |         __asm ("strd sb, r8, [sp, 4]");
    0x000458ca add r3, pc                                        |         r3 = 0x8b3ba;
    0x000458cc bl 0x43724                                        |         fcn_00043724 (r0, r1, r2, r3, r4, r5);
                                                                 | label_12:
    0x000458d0 movs r5, 0                                        |         r5 = 0;
    0x000458d2 b 0x45a0a                                         |         goto label_17;
    0x000458d4 mov r0, r6                                        |         r0 = r6;
    0x000458d6 bl 0x3a180                                        |         r0 = xmlIsBlankNode ();
                                                                 |         if (r0 != 0) {
    0x000458da cbnz r0, 0x458fa                                  |             goto label_19;
                                                                 |         }
    0x000458dc ldr r1, [sp, 0x14]                                |         r1 = var_14h;
    0x000458de movw r2, 0x1388                                   |         r2 = 0x1388;
    0x000458e2 mov r0, r8                                        |         r0 = r8;
    0x000458e4 blx 0x1b674                                       |         fcn_0001b674 ();
    0x000458e8 ldr r3, [r6, 0x18]                                |         r3 = *((r6 + 0x18));
    0x000458ea cmp r3, 0                                         |         
    0x000458ec beq 0x458a4                                       |         
                                                                 |     } while (r3 == 0);
                                                                 | label_7:
    0x000458ee movw r2, 0x1388                                   |     r2 = 0x1388;
    0x000458f2 mov r1, sl                                        |     r1 = sl;
    0x000458f4 mov r0, r8                                        |     r0 = r8;
    0x000458f6 blx 0x1b674                                       |     fcn_0001b674 ();
                                                                 | label_19:
    0x000458fa ldr r6, [r6, 0x18]                                |     r6 = *((r6 + 0x18));
    0x000458fc cmp r6, 0                                         |     
                                                                 |     if (r6 != 0) {
    0x000458fe bne 0x45866                                       |         goto label_0;
                                                                 |     }
    0x00045900 b 0x458a4                                         |     goto label_1;
    0x00045902 mov r0, r5                                        |     r0 = r5;
    0x00045904 bl 0x3a180                                        |     r0 = xmlIsBlankNode ();
    0x00045908 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004590a beq 0x45812                                       |         goto label_2;
                                                                 |     }
                                                                 | label_6:
    0x0004590c ldr r5, [r5, 0x18]                                |     r5 = *((r5 + 0x18));
    0x0004590e cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x00045910 bne.w 0x4577a                                     |         goto label_3;
                                                                 |     }
    0x00045914 ldr r3, [r4, 0x10]                                |     r3 = *((r4 + 0x10));
    0x00045916 subs r1, r3, 1                                    |     r1 = r3 - 1;
    0x00045918 lsls r1, r1, 2                                    |     r1 <<= 2;
    0x0004591a b 0x45942                                         |     goto label_21;
                                                                 | label_5:
    0x0004591c ldr r2, [r4, 0x18]                                |     r2 = *((r4 + 0x18));
    0x0004591e subs r3, 1                                        |     r3--;
    0x00045920 mov r0, r3                                        |     r0 = r3;
    0x00045922 str r3, [r4, 0x10]                                |     *((r4 + 0x10)) = r3;
    0x00045924 add r2, r1                                        |     r2 += r1;
                                                                 |     if (r3 != 0) {
    0x00045926 cbz r3, 0x4592c                                   |         
    0x00045928 ldr r0, [r2, -0x4]                                |         r0 = *((r2 - 0x4));
                                                                 |     }
    0x0004592c str r0, [r4, 0xc]                                 |     *((r4 + 0xc)) = r0;
    0x0004592e ldr r0, [r2]                                      |     r0 = *(r2);
    0x00045930 str r7, [r2]                                      |     *(r2) = r7;
    0x00045932 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x00045934 beq.w 0x457b2                                     |         goto label_4;
                                                                 |     }
    0x00045938 ldr r5, [r0, 0x18]                                |     r5 = *((r0 + 0x18));
    0x0004593a subs r1, 4                                        |     r1 -= 4;
    0x0004593c cmp r5, 0                                         |     
                                                                 |     if (r5 != 0) {
    0x0004593e bne.w 0x4577a                                     |         goto label_3;
                                                                 |     }
                                                                 | label_21:
    0x00045942 cmp r3, 0                                         |     
                                                                 |     if (r3 > 0) {
    0x00045944 bgt 0x4591c                                       |         goto label_5;
                                                                 |     }
    0x00045946 b 0x457b2                                         |     goto label_4;
    0x00045948 ldr r3, [r5, 0x24]                                |     r3 = *((r5 + 0x24));
    0x0004594a ldr r0, [r5, 8]                                   |     r0 = *((r5 + 8));
    0x0004594c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0004594e beq 0x459ec                                       |         goto label_22;
                                                                 |     }
    0x00045950 ldr r1, [r3, 0xc]                                 |     r1 = *((r3 + 0xc));
    0x00045952 cmp r1, 0                                         |     
                                                                 |     if (r1 == 0) {
    0x00045954 beq 0x459ec                                       |         goto label_22;
                                                                 |     }
    0x00045956 add.w sl, sp, 0x13c0                              |     sl += arg_13c0h;
    0x0004595a movs r3, 0x32                                     |     r3 = 0x32;
    0x0004595c sub.w r8, sl, 0xc                                 |     r8 = sl - 0xc;
    0x00045960 mov r2, r8                                        |     r2 = r8;
    0x00045962 bl 0x34260                                        |     r0 = xmlBuildQName ();
    0x00045966 mov r1, r0                                        |     r1 = r0;
    0x00045968 cmp r0, 0                                         |     
                                                                 |     if (r0 == 0) {
    0x0004596a beq.w 0x45a9e                                     |         goto label_23;
                                                                 |     }
    0x0004596e str r0, [sp, 0x20]                                |     var_20h = r0;
    0x00045970 movs r2, 0                                        |     r2 = 0;
    0x00045972 mov r0, sb                                        |     r0 = sb;
    0x00045974 bl 0x71310                                        |     xmlRegExecPushString ();
    0x00045978 ldr r1, [sp, 0x20]                                |     r1 = var_20h;
    0x0004597a cmp r1, r8                                        |     
                                                                 |     if (r1 == r8) {
    0x0004597c beq 0x4590c                                       |         goto label_6;
                                                                 |     }
    0x0004597e ldr r3, [r5, 8]                                   |     r3 = *((r5 + 8));
    0x00045980 cmp r1, r3                                        |     
                                                                 |     if (r1 == r3) {
    0x00045982 beq 0x4590c                                       |         goto label_6;
                                                                 |     }
    0x00045984 ldr r2, [sp, 0x10]                                |     r2 = var_10h;
    0x00045986 mov r0, r1                                        |     r0 = r1;
    0x00045988 ldr r3, [pc, 0x164]                               |     
    0x0004598a ldr r3, [r2, r3]                                  |     r3 = *((r2 + r3));
    0x0004598c ldr r3, [r3]                                      |     r3 = *(0x45af0);
    0x0004598e blx r3                                            |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r2, r3);
    0x00045990 b 0x4590c                                         |     goto label_6;
    0x00045992 ldr r3, [r6, 0x24]                                |     r3 = *((r6 + 0x24));
                                                                 |     if (r3 != 0) {
    0x00045994 cbz r3, 0x459cc                                   |         
    0x00045996 ldr r0, [r3, 0xc]                                 |         r0 = *((r3 + 0xc));
                                                                 |         if (r0 == 0) {
    0x00045998 cbz r0, 0x459cc                                   |             goto label_24;
                                                                 |         }
    0x0004599a bl 0x6ba24                                        |         xmlStrlen ();
    0x0004599e adds r0, 9                                        |         r0 += 9;
    0x000459a0 cmp r5, r0                                        |         
                                                                 |         if (r5 <= r0) {
    0x000459a2 ble 0x45a66                                       |             goto label_25;
                                                                 |         }
    0x000459a4 mov r0, r8                                        |         r0 = r8;
    0x000459a6 blx 0x1b960                                       |         fopen64 ();
    0x000459aa ldr r3, [r6, 0x24]                                |         r3 = *((r6 + 0x24));
    0x000459ac movw r2, 0x1388                                   |         r2 = 0x1388;
    0x000459b0 add r0, r8                                        |         r0 += r8;
    0x000459b2 ldr r1, [r3, 0xc]                                 |         r1 = *((r3 + 0xc));
    0x000459b4 blx 0x1bb08                                       |         fcn_0001bb08 ();
    0x000459b8 ldr r1, [pc, 0x138]                               |         
    0x000459ba sub.w r3, r8, r0                                  |         r3 = r8 - r0;
    0x000459be add.w r3, r3, 0x1380                              |         r3 += 0x1380;
    0x000459c2 movs r2, 2                                        |         r2 = 2;
    0x000459c4 adds r3, 8                                        |         r3 += 8;
    0x000459c6 add r1, pc                                        |         r1 = 0x8b4be;
    0x000459c8 blx 0x1b8b0                                       |         fcn_0001b8b0 ();
                                                                 |     }
                                                                 | label_24:
    0x000459cc ldr r0, [r6, 8]                                   |     r0 = *((r6 + 8));
    0x000459ce bl 0x6ba24                                        |     xmlStrlen ();
    0x000459d2 adds r0, 9                                        |     r0 += 9;
    0x000459d4 cmp r5, r0                                        |     
                                                                 |     if (r5 <= r0) {
    0x000459d6 ble 0x45a66                                       |         goto label_25;
                                                                 |     }
    0x000459d8 ldr r1, [r6, 8]                                   |     r1 = *((r6 + 8));
    0x000459da movw r2, 0x1388                                   |     r2 = 0x1388;
    0x000459de mov r0, r8                                        |     r0 = r8;
    0x000459e0 blx 0x1b674                                       |     fcn_0001b674 ();
    0x000459e4 ldr r3, [r6, 0x18]                                |     r3 = *((r6 + 0x18));
    0x000459e6 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000459e8 bne 0x458ee                                       |         goto label_7;
                                                                 |     }
    0x000459ea b 0x458a4                                         |     goto label_1;
                                                                 | label_22:
    0x000459ec mov r1, r0                                        |     r1 = r0;
    0x000459ee movs r2, 0                                        |     r2 = 0;
    0x000459f0 mov r0, sb                                        |     r0 = sb;
    0x000459f2 bl 0x71310                                        |     xmlRegExecPushString ();
    0x000459f6 b 0x4590c                                         |     goto label_6;
                                                                 | label_16:
    0x000459f8 adds r7, r5, 3                                    |     r7 = r5 + 3;
    0x000459fa adds r3, r5, 3                                    |     r3 = r5 + 3;
    0x000459fc bic r7, r7, 4                                     |     r7 = BIT_MASK (r7, 4);
    0x00045a00 it eq                                             |     
                                                                 |     if (r3 != r5) {
    0x00045a02 moveq r5, 1                                       |         r5 = 1;
                                                                 |     }
    0x00045a04 cmp r7, 0                                         |     
                                                                 |     if (r7 != 0) {
    0x00045a06 bne.w 0x457d6                                     |         goto label_8;
                                                                 |     }
                                                                 | label_17:
    0x00045a0a ldr r0, [r4, 0x18]                                |     r0 = *((r4 + 0x18));
    0x00045a0c vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00045a10 vst1.32 {d16}, [fp]                               |     __asm ("vst1.32 {d16}, [fp]");
                                                                 |     if (r0 != 0) {
    0x00045a14 cbz r0, 0x45a24                                   |         
    0x00045a16 ldr r2, [sp, 0x10]                                |         r2 = var_10h;
    0x00045a18 ldr r3, [pc, 0xd4]                                |         
    0x00045a1a ldr r3, [r2, r3]                                  |         r3 = *((r2 + r3));
    0x00045a1c ldr r3, [r3]                                      |         r3 = *(0x45af0);
    0x00045a1e blx r3                                            |         uint32_t (*r3)(uint32_t, uint32_t) (r2, r3);
    0x00045a20 movs r3, 0                                        |         r3 = 0;
    0x00045a22 str r3, [r4, 0x18]                                |         *((r4 + 0x18)) = r3;
                                                                 |     }
                                                                 | label_10:
    0x00045a24 ldr r2, [pc, 0xd0]                                |     
    0x00045a26 add.w r1, sp, 0x2700                              |     r1 += arg_2700h;
    0x00045a2a ldr r3, [pc, 0xa4]                                |     r3 = *(0x45ad2);
    0x00045a2c adds r1, 0x3c                                     |     r1 += 0x3c;
    0x00045a2e add r2, pc                                        |     r2 = 0x8b52a;
    0x00045a30 ldr r3, [r2, r3]                                  |     r3 = *(0x8b52a);
    0x00045a32 ldr r2, [r3]                                      |     r2 = *(0x8b52a);
    0x00045a34 ldr r3, [r1]                                      |     r3 = *(r1);
    0x00045a36 eors r2, r3                                       |     r2 ^= r3;
    0x00045a38 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x00045a3c bne 0x45ac6                                       |         goto label_26;
                                                                 |     }
    0x00045a3e mov r0, r5                                        |     r0 = r5;
    0x00045a40 add.w sp, sp, 0x2740                              |     
    0x00045a44 add sp, 4                                         |     
    0x00045a46 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_15:
    0x00045a4a mov r1, r7                                        |     r1 = r7;
    0x00045a4c bl 0x455d0                                        |     xmlValidBuildContentModel ();
    0x00045a50 ldr r3, [r7, 0x34]                                |     r3 = *((r7 + 0x34));
    0x00045a52 mov r5, r0                                        |     r5 = r0;
    0x00045a54 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00045a56 bne.w 0x45748                                     |         goto label_9;
                                                                 |     }
                                                                 | label_14:
    0x00045a5a mov.w r5, -1                                      |     r5 = -1;
    0x00045a5e b 0x45a24                                         |     goto label_10;
                                                                 | label_18:
    0x00045a60 cmp r5, 4                                         |     
                                                                 |     if (r5 <= 4) {
    0x00045a62 ble.w 0x458b2                                     |         goto label_11;
                                                                 |     }
                                                                 | label_25:
    0x00045a66 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x00045a68 subs r3, 0xd                                      |     r3 -= 0xd;
    0x00045a6a ldrb r3, [r3, r7]                                 |     r3 = *((r3 + r7));
    0x00045a6c cmp r3, 0x2e                                      |     
                                                                 |     if (r3 == 0x2e) {
    0x00045a6e beq.w 0x458b2                                     |         goto label_11;
                                                                 |     }
    0x00045a72 ldr r1, [pc, 0x88]                                |     
    0x00045a74 movw r2, 0x1388                                   |     r2 = 0x1388;
    0x00045a78 mov r0, r8                                        |     r0 = r8;
    0x00045a7a add r1, pc                                        |     r1 = 0x8b57c;
    0x00045a7c blx 0x1b674                                       |     fcn_0001b674 ();
    0x00045a80 b 0x458b2                                         |     goto label_11;
                                                                 | label_20:
    0x00045a82 ldr r3, [sp, 0x18]                                |     r3 = var_18h;
    0x00045a84 mov.w r2, 0x1f8                                   |     r2 = 0x1f8;
    0x00045a88 ldr r1, [sp, 0x1c]                                |     r1 = var_1ch;
    0x00045a8a mov r0, r4                                        |     r0 = r4;
    0x00045a8c str.w sb, [sp]                                    |     __asm ("str.w sb, [sp]");
    0x00045a90 strd r8, r3, [sp, 4]                              |     __asm ("strd r8, r3, [sp, 4]");
    0x00045a94 ldr r3, [pc, 0x68]                                |     
    0x00045a96 add r3, pc                                        |     r3 = 0x8b59a;
    0x00045a98 bl 0x43724                                        |     fcn_00043724 (r0, r1, r2, r3, r4, r5);
    0x00045a9c b 0x458d0                                         |     goto label_12;
                                                                 | label_23:
    0x00045a9e str.w sl, [sp, 0x24]                              |     __asm ("str.w sl, [var_24h]");
    0x00045aa2 mov sl, r0                                        |     sl = r0;
    0x00045aa4 mov r0, sb                                        |     r0 = sb;
    0x00045aa6 add.w sb, sp, 0x2c                                |     sb += arg_2ch;
    0x00045aaa bl 0x71278                                        |     xmlRegFreeExecCtxt ();
    0x00045aae ldr r2, [sp, 0x14]                                |     r2 = var_14h;
    0x00045ab0 movs r3, 1                                        |     r3 = 1;
    0x00045ab2 movw r1, 0x1388                                   |     r1 = 0x1388;
    0x00045ab6 mov r0, sb                                        |     r0 = sb;
    0x00045ab8 strb.w sl, [sb]                                   |     *(sb) = sl;
    0x00045abc bl 0x4538c                                        |     xmlSnprintfElementContent ()
    0x00045ac0 strb.w sl, [r8]                                   |     *(r8) = sl;
    0x00045ac4 b 0x45846                                         |     goto label_13;
                                                                 | label_26:
    0x00045ac6 blx 0x1bb74                                       |     fcn_0001bb74 ();
    0x00045aca nop                                               |     
    0x00045acc invalid                                           |     
                                                                 | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libxml2.so.2.9.14 @ 0x4538c */
                                                             | #include <stdint.h>
                                                             |  
    ; (fcn) sym.xmlSnprintfElementContent ()                 | void xmlSnprintfElementContent (int16_t arg1, int16_t arg2, uint32_t arg3, int16_t arg4) {
                                                             |     r0 = arg1;
                                                             |     r1 = arg2;
                                                             |     r2 = arg3;
                                                             |     r3 = arg4;
    0x0004538c invalid                                       |     
    0x00045390 strh r7, [r0, 6]                              |     *((r0 + 6)) = r7;
    0x00045392 push.w {r3, r4, r5, r6, r7, r8, sb, lr}       |     
    0x00045396 mov r4, r1                                    |     r4 = r1;
    0x00045398 mov r7, r3                                    |     r7 = r3;
    0x0004539a mov r5, r0                                    |     r5 = r0;
    0x0004539c mov r6, r2                                    |     r6 = r2;
    0x0004539e blx 0x1b960                                   |     r0 = fopen64 ();
    0x000453a2 sub.w r8, r4, r0                              |     r8 = r4 - r0;
    0x000453a6 mov r3, r0                                    |     r3 = r0;
    0x000453a8 cmp.w r8, 0x31                                |     
                                                             |     if (r8 <= 0x31) {
    0x000453ac ble 0x45402                                   |         goto label_5;
                                                             |     }
    0x000453ae cmp r7, 0                                     |     
                                                             |     if (r7 != 0) {
    0x000453b0 bne 0x45420                                   |         goto label_6;
                                                             |     }
                                                             | label_1:
    0x000453b2 ldr r3, [r6]                                  |     r3 = *(r6);
    0x000453b4 subs r3, 1                                    |     r3--;
    0x000453b6 cmp r3, 3                                     |     
                                                             |     if (r3 <= 3) {
    0x000453b8 bhi 0x453da                                   |         
                                                             |         /* switch table (4 cases) at 0x453be */
    0x000453ba tbb [pc, r3]                                  |         __asm ("tbb [0x000453c0]");
    0x000453c2 mov r0, r5                                    |         r0 = r5;
    0x000453c4 blx 0x1b960                                   |         fopen64 ();
    0x000453c8 ldr r2, [pc, 0x1d0]                           |         
    0x000453ca mov r3, r0                                    |         r3 = r0;
    0x000453cc add.w ip, r5, r0                              |         
    0x000453d0 add r2, pc                                    |         r2 = 0x8a970;
    0x000453d2 ldm r2!, {r0, r1}                             |         r0 = *(r2!);
                                                             |         r1 = *((r2! + 4));
    0x000453d4 str r0, [r5, r3]                              |         *((r5 + r3)) = r0;
    0x000453d6 str.w r1, [ip, 4]                             |         __asm ("str.w r1, [ip, 4]");
                                                             |     }
                                                             | label_2:
    0x000453da mov r0, r5                                    |     r0 = r5;
    0x000453dc blx 0x1b960                                   |     r0 = fopen64 ();
    0x000453e0 subs r4, r4, r0                               |     r4 -= r0;
    0x000453e2 cmp r4, 2                                     |     
                                                             |     if (r4 < 2) {
    0x000453e4 bls 0x453fe                                   |         goto label_0;
                                                             |     }
    0x000453e6 cmp r7, 0                                     |     
                                                             |     if (r7 != 0) {
    0x000453e8 bne.w 0x45516                                 |         goto label_7;
                                                             |     }
                                                             | label_3:
    0x000453ec ldr r3, [r6, 4]                               |     r3 = *((r6 + 4));
    0x000453ee cmp r3, 3                                     |     
                                                             |     if (r3 == 3) {
    0x000453f0 beq.w 0x45522                                 |         goto label_8;
                                                             |     }
    0x000453f4 cmp r3, 4                                     |     
                                                             |     if (r3 == 4) {
    0x000453f6 beq.w 0x45506                                 |         goto label_9;
                                                             |     }
    0x000453fa cmp r3, 2                                     |     
                                                             |     if (r3 == 2) {
    0x000453fc beq 0x454f6                                   |         goto label_10;
                                                             |     }
                                                             |     do {
                                                             | label_0:
    0x000453fe pop.w {r3, r4, r5, r6, r7, r8, sb, pc}        |         
                                                             | label_5:
    0x00045402 cmp.w r8, 4                                   |         
    0x00045406 ble 0x453fe                                   |         
                                                             |     } while (r8 <= 4);
    0x00045408 adds r2, r5, r0                               |     r2 = r5 + r0;
    0x0004540a ldrb r1, [r2, -0x1]                           |     r1 = *((r2 - 0x1));
    0x0004540e cmp r1, 0x2e                                  |     
                                                             |     if (r1 == 0x2e) {
    0x00045410 beq 0x453fe                                   |         goto label_0;
                                                             |     }
    0x00045412 ldr r1, [pc, 0x18c]                           |     
    0x00045414 add r1, pc                                    |     r1 = 0x8a9ba;
    0x00045416 ldr r0, [r1]                                  |     r0 = *(0x8a9ba);
    0x00045418 ldrb r1, [r1, 4]                              |     r1 = *((r1 + 4));
    0x0004541a str r0, [r5, r3]                              |     *((r5 + r3)) = r0;
    0x0004541c strb r1, [r2, 4]                              |     *((r2 + 4)) = r1;
    0x0004541e b 0x453fe                                     |     goto label_0;
                                                             | label_6:
    0x00045420 ldr r2, [pc, 0x180]                           |     
    0x00045422 add r2, pc                                    |     r2 = 0x8a9ca;
    0x00045424 ldrh r2, [r2]                                 |     r2 = *(r2);
    0x00045426 strh r2, [r5, r0]                             |     *((r5 + r0)) = r2;
    0x00045428 b 0x453b2                                     |     goto label_1;
    0x0004542a ldr r0, [r6, 8]                               |     r0 = *((r6 + 8));
    0x0004542c bl 0x6ba24                                    |     r0 = xmlStrlen ();
    0x00045430 mov sb, r0                                    |     sb = r0;
    0x00045432 ldr r0, [r6, 0x18]                            |     r0 = *((r6 + 0x18));
    0x00045434 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x00045436 beq.w 0x45578                                 |         goto label_11;
                                                             |     }
    0x0004543a bl 0x6ba24                                    |     xmlStrlen ();
    0x0004543e add r0, sb                                    |     r0 += sb;
    0x00045440 adds r0, 0xa                                  |     r0 += 0xa;
    0x00045442 cmp r8, r0                                    |     
                                                             |     if (r8 <= r0) {
    0x00045444 ble.w 0x45582                                 |         goto label_12;
                                                             |     }
    0x00045448 ldr.w r8, [r6, 0x18]                          |     r8 = *((r6 + 0x18));
    0x0004544c cmp.w r8, 0                                   |     
                                                             |     if (r8 != 0) {
    0x00045450 beq 0x45468                                   |         
    0x00045452 mov r0, r5                                    |         r0 = r5;
    0x00045454 blx 0x1b960                                   |         fopen64 ();
    0x00045458 mov r1, r8                                    |         r1 = r8;
    0x0004545a add r0, r5                                    |         r0 += r5;
    0x0004545c blx 0x1b724                                   |         fcn_0001b724 ();
    0x00045460 ldr r3, [pc, 0x144]                           |         
    0x00045462 add r3, pc                                    |         r3 = 0x8aa0e;
    0x00045464 ldrh r3, [r3]                                 |         r3 = *(r3);
    0x00045466 strh r3, [r0]                                 |         *(r0) = r3;
                                                             |     }
                                                             | label_4:
    0x00045468 ldr r1, [r6, 8]                               |     r1 = *((r6 + 8));
    0x0004546a cmp r1, 0                                     |     
                                                             |     if (r1 == 0) {
    0x0004546c beq 0x453da                                   |         goto label_2;
                                                             |     }
    0x0004546e mov r0, r5                                    |     r0 = r5;
    0x00045470 blx 0x1bc28                                   |     fcn_0001bc28 ();
    0x00045474 b 0x453da                                     |     goto label_2;
    0x00045476 ldr r2, [r6, 0xc]                             |     r2 = *((r6 + 0xc));
    0x00045478 mov r1, r4                                    |     r1 = r4;
    0x0004547a mov r0, r5                                    |     r0 = r5;
    0x0004547c ldr r3, [r2]                                  |     r3 = *(r2);
    0x0004547e subs r3, 3                                    |     r3 -= 3;
    0x00045480 cmp r3, 1                                     |     
    0x00045482 ite ls                                        |     
                                                             |     if (r3 > 1) {
    0x00045484 movls r3, 1                                   |         r3 = 1;
                                                             |     }
                                                             |     if (r3 <= 1) {
    0x00045486 movhi r3, 0                                   |         r3 = 0;
                                                             |     }
    0x00045488 bl 0x4538c                                    |     xmlSnprintfElementContent ()
    0x0004548c mov r0, r5                                    |     r0 = r5;
    0x0004548e blx 0x1b960                                   |     r0 = fopen64 ();
    0x00045492 subs r2, r4, r0                               |     r2 = r4 - r0;
    0x00045494 mov r3, r0                                    |     r3 = r0;
    0x00045496 cmp r2, 0x31                                  |     
                                                             |     if (r2 > 0x31) {
    0x00045498 bgt 0x4555c                                   |         goto label_13;
                                                             |     }
    0x0004549a cmp r2, 4                                     |     
                                                             |     if (r2 <= 4) {
    0x0004549c ble 0x453fe                                   |         goto label_0;
                                                             |     }
    0x0004549e adds r2, r5, r0                               |     r2 = r5 + r0;
    0x000454a0 ldrb r1, [r2, -0x1]                           |     r1 = *((r2 - 0x1));
    0x000454a4 cmp r1, 0x2e                                  |     
                                                             |     if (r1 == 0x2e) {
    0x000454a6 beq 0x453fe                                   |         goto label_0;
                                                             |     }
    0x000454a8 ldr r1, [pc, 0x100]                           |     
    0x000454aa add r1, pc                                    |     r1 = 0x8aa5a;
    0x000454ac ldr r0, [r1]                                  |     r0 = *(0x8aa5a);
    0x000454ae ldrb r1, [r1, 4]                              |     r1 = *((r1 + 4));
    0x000454b0 str r0, [r5, r3]                              |     *((r5 + r3)) = r0;
    0x000454b2 strb r1, [r2, 4]                              |     *((r2 + 4)) = r1;
    0x000454b4 b 0x453fe                                     |     goto label_0;
    0x000454b6 ldr r2, [r6, 0xc]                             |     r2 = *((r6 + 0xc));
    0x000454b8 mov r1, r4                                    |     r1 = r4;
    0x000454ba mov r0, r5                                    |     r0 = r5;
    0x000454bc ldr r3, [r2]                                  |     r3 = *(r2);
    0x000454be subs r3, 3                                    |     r3 -= 3;
    0x000454c0 cmp r3, 1                                     |     
    0x000454c2 ite ls                                        |     
                                                             |     if (r3 > 1) {
    0x000454c4 movls r3, 1                                   |         r3 = 1;
                                                             |     }
                                                             |     if (r3 <= 1) {
    0x000454c6 movhi r3, 0                                   |         r3 = 0;
                                                             |     }
    0x000454c8 bl 0x4538c                                    |     xmlSnprintfElementContent ()
    0x000454cc mov r0, r5                                    |     r0 = r5;
    0x000454ce blx 0x1b960                                   |     r0 = fopen64 ();
    0x000454d2 subs r2, r4, r0                               |     r2 = r4 - r0;
    0x000454d4 mov r3, r0                                    |     r3 = r0;
    0x000454d6 cmp r2, 0x31                                  |     
                                                             |     if (r2 > 0x31) {
    0x000454d8 bgt 0x45532                                   |         goto label_14;
                                                             |     }
    0x000454da cmp r2, 4                                     |     
                                                             |     if (r2 <= 4) {
    0x000454dc ble 0x453fe                                   |         goto label_0;
                                                             |     }
    0x000454de adds r2, r5, r0                               |     r2 = r5 + r0;
    0x000454e0 ldrb r1, [r2, -0x1]                           |     r1 = *((r2 - 0x1));
    0x000454e4 cmp r1, 0x2e                                  |     
                                                             |     if (r1 == 0x2e) {
    0x000454e6 beq 0x453fe                                   |         goto label_0;
                                                             |     }
    0x000454e8 ldr r1, [pc, 0xc4]                            |     
    0x000454ea add r1, pc                                    |     r1 = 0x8aa9e;
    0x000454ec ldr r0, [r1]                                  |     r0 = *(0x8aa9e);
    0x000454ee ldrb r1, [r1, 4]                              |     r1 = *((r1 + 4));
    0x000454f0 str r0, [r5, r3]                              |     *((r5 + r3)) = r0;
    0x000454f2 strb r1, [r2, 4]                              |     *((r2 + 4)) = r1;
    0x000454f4 b 0x453fe                                     |     goto label_0;
                                                             | label_10:
    0x000454f6 mov r0, r5                                    |     r0 = r5;
    0x000454f8 blx 0x1b960                                   |     fopen64 ();
    0x000454fc ldr r3, [pc, 0xb4]                            |     
    0x000454fe add r3, pc                                    |     r3 = 0x8aab6;
    0x00045500 ldrh r3, [r3]                                 |     r3 = *(r3);
    0x00045502 strh r3, [r5, r0]                             |     *((r5 + r0)) = r3;
    0x00045504 b 0x453fe                                     |     goto label_0;
                                                             | label_9:
    0x00045506 mov r0, r5                                    |     r0 = r5;
    0x00045508 blx 0x1b960                                   |     fopen64 ();
    0x0004550c ldr r3, [pc, 0xa8]                            |     
    0x0004550e add r3, pc                                    |     r3 = 0x8aaca;
    0x00045510 ldrh r3, [r3]                                 |     r3 = *(r3);
    0x00045512 strh r3, [r5, r0]                             |     *((r5 + r0)) = r3;
    0x00045514 b 0x453fe                                     |     goto label_0;
                                                             | label_7:
    0x00045516 ldr r3, [pc, 0xa4]                            |     
    0x00045518 add r3, pc                                    |     r3 = 0x8aada;
    0x0004551a ldrh r3, [r3]                                 |     r3 = *(r3);
    0x0004551c strh r3, [r5, r0]                             |     *((r5 + r0)) = r3;
    0x0004551e b 0x453ec                                     |     goto label_3;
    0x00045520 bx lr                                         |     return;
                                                             | label_8:
    0x00045522 mov r0, r5                                    |     r0 = r5;
    0x00045524 blx 0x1b960                                   |     fopen64 ();
    0x00045528 ldr r3, [pc, 0x94]                            |     
    0x0004552a add r3, pc                                    |     r3 = 0x8aaee;
    0x0004552c ldrh r3, [r3]                                 |     r3 = *(r3);
    0x0004552e strh r3, [r5, r0]                             |     *((r5 + r0)) = r3;
    0x00045530 b 0x453fe                                     |     goto label_0;
                                                             | label_14:
    0x00045532 ldr r2, [pc, 0x90]                            |     
    0x00045534 add r2, pc                                    |     r2 = 0x8aafe;
    0x00045536 ldr r0, [r2]                                  |     r0 = *(0x8aafe);
    0x00045538 str r0, [r5, r3]                              |     *((r5 + r3)) = r0;
    0x0004553a ldr r2, [r6, 0x10]                            |     r2 = *((r6 + 0x10));
    0x0004553c ldr r1, [r2]                                  |     r1 = *(0x8aafe);
    0x0004553e cmp r1, 3                                     |     
                                                             |     if (r1 == 3) {
    0x00045540 beq 0x4556c                                   |         goto label_15;
                                                             |     }
                                                             |     do {
    0x00045542 ldr r3, [r2, 4]                               |         r3 = *((r2 + 4));
    0x00045544 cmp r3, 1                                     |         
    0x00045546 it ne                                         |         
                                                             |         if (r3 != 1) {
    0x00045548 cmpne r1, 2                                   |             __asm ("cmpne r1, 2");
                                                             |         }
    0x0004554a ite ne                                        |         
                                                             |         if (r3 == 1) {
    0x0004554c movne r3, 1                                   |             r3 = 1;
                                                             |         }
                                                             |         if (r3 != 1) {
    0x0004554e moveq r3, 0                                   |             r3 = 0;
                                                             |         }
                                                             |         if (r3 != 1) {
    0x00045550 bne 0x4556c                                   |             goto label_15;
                                                             |         }
    0x00045552 mov r1, r4                                    |         r1 = r4;
    0x00045554 mov r0, r5                                    |         r0 = r5;
    0x00045556 bl 0x4538c                                    |         xmlSnprintfElementContent ()
    0x0004555a b 0x453da                                     |         goto label_2;
                                                             | label_13:
    0x0004555c ldr r2, [pc, 0x68]                            |         
    0x0004555e add r2, pc                                    |         r2 = 0x8ab2a;
    0x00045560 ldr r0, [r2]                                  |         r0 = *(0x8ab2a);
    0x00045562 str r0, [r5, r3]                              |         *((r5 + r3)) = r0;
    0x00045564 ldr r2, [r6, 0x10]                            |         r2 = *((r6 + 0x10));
    0x00045566 ldr r1, [r2]                                  |         r1 = *(0x8ab2a);
    0x00045568 cmp r1, 4                                     |         
    0x0004556a bne 0x45542                                   |         
                                                             |     } while (r1 != 4);
                                                             | label_15:
    0x0004556c movs r3, 1                                    |     r3 = 1;
    0x0004556e mov r1, r4                                    |     r1 = r4;
    0x00045570 mov r0, r5                                    |     r0 = r5;
    0x00045572 bl 0x4538c                                    |     xmlSnprintfElementContent ()
    0x00045576 b 0x453da                                     |     goto label_2;
                                                             | label_11:
    0x00045578 add.w r0, sb, 9                               |     r0 = sb + 9;
    0x0004557c cmp r8, r0                                    |     
                                                             |     if (r8 > r0) {
    0x0004557e bgt.w 0x45468                                 |         goto label_4;
                                                             |     }
                                                             | label_12:
    0x00045582 mov r0, r5                                    |     r0 = r5;
    0x00045584 blx 0x1b960                                   |     fopen64 ();
    0x00045588 ldr r2, [pc, 0x40]                            |     
    0x0004558a mov r3, r0                                    |     r3 = r0;
    0x0004558c adds r1, r5, r0                               |     r1 = r5 + r0;
    0x0004558e add r2, pc                                    |     r2 = 0x8ab5e;
    0x00045590 ldr r0, [r2]                                  |     r0 = *(0x8ab5e);
    0x00045592 ldrb r2, [r2, 4]                              |     r2 = *((r2 + 4));
    0x00045594 str r0, [r5, r3]                              |     *((r5 + r3)) = r0;
    0x00045596 strb r2, [r1, 4]                              |     *((r1 + 4)) = r2;
    0x00045598 b 0x453fe                                     |     goto label_0;
                                                             | }
    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libxml2.so.2.9.14 @ 0x455d0 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) sym.xmlValidBuildContentModel ()     | void xmlValidBuildContentModel (uint32_t arg1, uint32_t arg2) {
                                                 |     int16_t var_0h;
                                                 |     int32_t var_4h;
                                                 |     int32_t var_4h_2;
                                                 |     int16_t var_14h;
                                                 |     int16_t var_1380h;
                                                 |     int16_t var_1ch;
                                                 |     int16_t var_13a0h;
                                                 |     r0 = arg1;
                                                 |     r1 = arg2;
    0x000455d0 ldr r2, [pc, 0x104]               |     
    0x000455d2 cmp r1, 0                         |     
    0x000455d4 it ne                             |     
                                                 |     if (r1 != 0) {
    0x000455d6 cmpne r0, 0                       |         __asm ("cmpne r0, 0");
                                                 |     }
    0x000455d8 ldr r3, [pc, 0x100]               |     r3 = *(0x456dc);
    0x000455da push {r4, r5, r6, r7, lr}         |     
    0x000455dc sub.w sp, sp, 0x13a0              |     
    0x000455e0 add r2, pc                        |     r2 = 0x8acbc;
    0x000455e2 sub sp, 4                         |     
    0x000455e4 add.w r4, sp, 0x1380              |     r4 += var_1380h;
    0x000455e8 ldr r3, [r2, r3]                  |     
    0x000455ea add.w r4, r4, 0x1c                |     r4 += var_1ch;
    0x000455ee ldr r3, [r3]                      |     r3 = *(0x8acbc);
    0x000455f0 str r3, [r4]                      |     *(r4) = r3;
    0x000455f2 mov.w r3, 0                       |     r3 = 0;
                                                 |     if (r1 != 0) {
    0x000455f6 beq 0x45600                       |         
    0x000455f8 ldr r3, [r1, 4]                   |         r3 = *((r1 + 4));
    0x000455fa mov r4, r1                        |         r4 = r1;
    0x000455fc cmp r3, 0xf                       |         
                                                 |         if (r3 == 0xf) {
    0x000455fe beq 0x45604                       |             goto label_2;
                                                 |         }
                                                 |     }
                                                 | label_0:
    0x00045600 movs r0, 0                        |     r0 = 0;
    0x00045602 b 0x4560c                         |     goto label_3;
                                                 | label_2:
    0x00045604 ldr r3, [r1, 0x24]                |     r3 = *((r1 + 0x24));
    0x00045606 cmp r3, 4                         |     
    0x00045608 beq 0x4562e                       |     
                                                 |     while (r0 != 0) {
                                                 | label_1:
    0x0004560a movs r0, 1                        |         r0 = 1;
                                                 | label_3:
    0x0004560c ldr r2, [pc, 0xd0]                |         
    0x0004560e add.w r1, sp, 0x1380              |         r1 += var_1380h;
    0x00045610 str r4, [r3, r6]                  |         *((r3 + r6)) = r4;
    0x00045612 ldr r3, [pc, 0xc8]                |         r3 = *(0x456de);
    0x00045614 adds r1, 0x1c                     |         r1 += 0x1c;
    0x00045616 add r2, pc                        |         r2 = 0x8acfa;
    0x00045618 ldr r3, [r2, r3]                  |         r3 = *(0x8acfa);
    0x0004561a ldr r2, [r3]                      |         r2 = *(0x8acfa);
    0x0004561c ldr r3, [r1]                      |         r3 = *(r1);
    0x0004561e eors r2, r3                       |         r2 ^= r3;
    0x00045620 mov.w r3, 0                       |         r3 = 0;
                                                 |         if (r2 != r3) {
    0x00045624 bne 0x456d4                       |             goto label_4;
                                                 |         }
    0x00045626 add.w sp, sp, 0x13a0              |         
    0x0004562a add sp, 4                         |         
    0x0004562c pop {r4, r5, r6, r7, pc}          |         
    0x0004562e ldr r6, [r1, 0x34]                |         r6 = *((r1 + 0x34));
    0x00045630 mov r5, r0                        |         r5 = r0;
                                                 |         if (r6 == 0) {
    0x00045632 cbz r6, 0x45642                   |             goto label_5;
                                                 |         }
    0x00045634 mov r0, r6                        |         r0 = r6;
    0x00045636 bl 0x72080                        |         r0 = xmlRegexpIsDeterminist ();
    0x0004563a cmp r0, 0                         |         
    0x0004563c bne 0x4560a                       |         
                                                 |     }
    0x0004563e str r0, [r5, 0x24]                |     *((r5 + 0x24)) = r0;
    0x00045640 b 0x45600                         |     goto label_0;
                                                 | label_5:
    0x00045642 bl 0x72004                        |     r0 = xmlNewAutomata ();
    0x00045646 mov r2, r0                        |     r2 = r0;
    0x00045648 str r0, [r5, 0x38]                |     *((r5 + 0x38)) = r0;
    0x0004564a cmp r0, 0                         |     
                                                 |     if (r0 != 0) {
    0x0004564c beq 0x456bc                       |         
    0x0004564e bl 0x72738                        |         xmlAutomataGetInitState ();
    0x00045652 ldr r2, [r4, 8]                   |         r2 = *((r4 + 8));
    0x00045654 mov r1, r5                        |         r1 = r5;
    0x00045656 str r0, [r5, 0x3c]                |         *((r5 + 0x3c)) = r0;
    0x00045658 ldr r0, [r4, 0x28]                |         r0 = *((r4 + 0x28));
    0x0004565a bl 0x4408c                        |         fcn_0004408c (r0, r1, r2);
    0x0004565e ldrd r0, r1, [r5, 0x38]           |         __asm ("ldrd r0, r1, [r5, 0x38]");
    0x00045662 bl 0x72740                        |         xmlAutomataSetFinalState ();
    0x00045666 ldr r0, [r5, 0x38]                |         r0 = *((r5 + 0x38));
    0x00045668 bl 0x73370                        |         xmlAutomataCompile ();
    0x0004566c str r0, [r4, 0x34]                |         *((r4 + 0x34)) = r0;
    0x0004566e bl 0x72080                        |         r0 = xmlRegexpIsDeterminist ();
    0x00045672 cmp r0, 1                         |         
                                                 |         if (r0 != 1) {
    0x00045674 beq 0x456b0                       |             
    0x00045676 add r7, sp, 0x14                  |             r7 += var_14h;
    0x00045678 ldr r2, [r4, 0x28]                |             r2 = *((r4 + 0x28));
    0x0004567a movs r3, 1                        |             r3 = 1;
    0x0004567c movw r1, 0x1388                   |             r1 = 0x1388;
    0x00045680 mov r0, r7                        |             r0 = r7;
    0x00045682 strb.w r6, [sp, 0x14]             |             var_14h = r6;
    0x00045686 bl 0x4538c                        |             xmlSnprintfElementContent ()
    0x0004568a ldr r3, [r4, 8]                   |             r3 = *((r4 + 8));
    0x0004568c mov r1, r4                        |             r1 = r4;
    0x0004568e movw r2, 0x1f9                    |             r2 = 0x1f9;
    0x00045692 mov r0, r5                        |             r0 = r5;
    0x00045694 strd r7, r6, [sp, 4]              |             __asm ("strd r7, r6, [var_4h]");
    0x00045698 str r3, [sp]                      |             *(sp) = r3;
    0x0004569a ldr r3, [pc, 0x48]                |             
    0x0004569c add r3, pc                        |             r3 = 0x8ad86;
    0x0004569e bl 0x43724                        |             fcn_00043724 (r0, r1, r2, r3, r4, r5);
    0x000456a2 ldr r0, [r5, 0x38]                |             r0 = *((r5 + 0x38));
    0x000456a4 str r6, [r5, 0x24]                |             *((r5 + 0x24)) = r6;
    0x000456a6 str r6, [r5, 0x3c]                |             *((r5 + 0x3c)) = r6;
    0x000456a8 bl 0x72724                        |             xmlFreeAutomata ();
    0x000456ac str r6, [r5, 0x38]                |             *((r5 + 0x38)) = r6;
    0x000456ae b 0x45600                         |             goto label_0;
                                                 |         }
    0x000456b0 ldr r0, [r5, 0x38]                |         r0 = *((r5 + 0x38));
    0x000456b2 str r6, [r5, 0x3c]                |         *((r5 + 0x3c)) = r6;
    0x000456b4 bl 0x72724                        |         xmlFreeAutomata ();
    0x000456b8 str r6, [r5, 0x38]                |         *((r5 + 0x38)) = r6;
    0x000456ba b 0x4560a                         |         goto label_1;
                                                 |     }
    0x000456bc ldr r6, [r4, 8]                   |     r6 = *((r4 + 8));
    0x000456be mov r1, r4                        |     r1 = r4;
    0x000456c0 ldr r3, [pc, 0x24]                |     
    0x000456c2 mov r0, r5                        |     r0 = r5;
    0x000456c4 strd r2, r2, [sp, 4]              |     __asm ("strd r2, r2, [var_4h]");
    0x000456c8 movs r2, 1                        |     r2 = 1;
    0x000456ca str r6, [sp]                      |     *(sp) = r6;
    0x000456cc add r3, pc                        |     r3 = 0x8adb8;
    0x000456ce bl 0x43724                        |     fcn_00043724 (r0, r1, r2, r3, r4, r5);
    0x000456d2 b 0x45600                         |     goto label_0;
                                                 | label_4:
    0x000456d4 blx 0x1bb74                       |     fcn_0001bb74 ();
    0x000456d8 rsbs.w r0, r4, 0x880000           |     r0 = 0x880000 - r4;
    0x000456dc lsls r0, r1, 0xf                  |     r0 = r1 << 0xf;
    0x000456de movs r0, r0                       |     
    0x000456e0 invalid                           |     
                                                 | }

[*] Function printf used 10 times libxml2.so.2.9.14