[*] Binary protection state of sshd

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


[*] Function printf tear down of sshd

    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/sshd @ 0x52440 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00052440 ()                                      | void fcn_00052440 (char * arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_4h_2;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_13h;
                                                                 |     int16_t var_1bh;
                                                                 |     int16_t var_1ch;
                                                                 |     int16_t var_2ch;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00052440 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}       |     
    0x00052444 movs r5, 0                                        |     r5 = 0;
    0x00052446 sub sp, 0x34                                      |     
    0x00052448 mov sb, r3                                        |     sb = r3;
    0x0005244a cmp.w sb, 0xf                                     |     
    0x0005244e mov.w r4, 1                                       |     r4 = 1;
    0x00052452 str r5, [sp, 0x10]                                |     var_10h = r5;
    0x00052454 mov fp, r0                                        |     
    0x00052456 strb.w r2, [sp, 0x13]                             |     var_13h = r2;
    0x0005245a mov r7, r1                                        |     r7 = r1;
    0x0005245c ldr r2, [pc, 0xe0]                                |     
    0x0005245e it le                                             |     
                                                                 |     if (sb > 0xf) {
    0x00052460 addle r6, sp, 0x1c                                |         r6 += var_1ch;
                                                                 |     }
    0x00052462 ldr r3, [pc, 0xe0]                                |     r3 = *(0x52546);
    0x00052464 it le                                             |     
                                                                 |     if (sb > 0xf) {
    0x00052466 addle r8, sp, 0xc                                 |         r8 += var_ch;
                                                                 |     }
    0x0005246a strd r5, r5, [sp, 0x14]                           |     __asm ("strd r5, r5, [sp, 0x14]");
    0x0005246e add r2, pc                                        |     r2 = 0xa49b2;
    0x00052470 ldr r3, [r2, r3]                                  |     
    0x00052472 ldr r3, [r3]                                      |     r3 = *(0xa49b2);
    0x00052474 str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x00052476 mov.w r3, 0                                       |     r3 = 0;
    0x0005247a str r5, [sp, 0xc]                                 |     var_ch = r5;
    0x0005247c strb.w r4, [sp, 0x1b]                             |     var_1bh = r4;
                                                                 |     if (sb <= 0xf) {
    0x00052480 ble 0x52524                                       |         goto label_0;
                                                                 |     }
    0x00052482 sub.w r3, sb, 0x10                                |     r3 = sb - 0x10;
    0x00052486 add.w r5, r0, 0x10                                |     r5 = r0 + 0x10;
    0x0005248a lsrs r3, r3, 4                                    |     r3 >>= 4;
    0x0005248c add r6, sp, 0x1c                                  |     r6 += var_1ch;
    0x0005248e add.w r8, sp, 0xc                                 |     r8 += var_ch;
    0x00052492 add.w sl, r3, 2                                   |     sl = r3 + 2;
    0x00052496 str r3, [sp, 4]                                   |     var_4h_2 = r3;
                                                                 |     do {
    0x00052498 mov r2, r7                                        |         r2 = r7;
    0x0005249a mov r1, r6                                        |         r1 = r6;
    0x0005249c mov r0, r8                                        |         r0 = r8;
    0x0005249e adds r5, 0x10                                     |         r5 += 0x10;
    0x000524a0 blx 0x540c                                        |         printf_chk ()
    0x000524a2 invalid                                           |         
    0x000524a6 ldm.w ip!, {r0, r1, r2, r3}                       |         r0 = *(ip!);
                                                                 |         r1 = *((ip! + 4));
                                                                 |         r2 = *((ip! + 8));
                                                                 |         r3 = *((ip! + 12));
    0x000524aa str r0, [r5, -0x20]                               |         *((r5 - 0x20)) = r0;
    0x000524ae mov r0, r4                                        |         r0 = r4;
    0x000524b0 str r1, [r5, -0x1c]                               |         *((r5 - 0x1c)) = r1;
    0x000524b4 movs r1, 1                                        |         r1 = 1;
    0x000524b6 str r2, [r5, -0x18]                               |         *((r5 - 0x18)) = r2;
    0x000524ba str r3, [r5, -0x14]                               |         *((r5 - 0x14)) = r3;
    0x000524be bl 0x66c04                                        |         r0 = fcn_00066c04 (r0, r1);
    0x000524c2 cmp r0, sl                                        |         
    0x000524c4 mov r4, r0                                        |         r4 = r0;
    0x000524c6 strb.w r0, [sp, 0x1b]                             |         var_1bh = r0;
    0x000524ca bne 0x52498                                       |         
                                                                 |     } while (r0 != sl);
    0x000524cc mov r0, sb                                        |     r0 = sb;
    0x000524ce mvn r1, 0xf                                       |     r1 = ~0xf;
    0x000524d2 bl 0x66c04                                        |     fcn_00066c04 (r0, r1);
    0x000524d6 ldr r5, [sp, 4]                                   |     r5 = var_4h_2;
    0x000524d8 mov r4, r0                                        |     r4 = r0;
    0x000524da mvn r1, 0xf                                       |     r1 = ~0xf;
    0x000524de mov r0, r5                                        |     r0 = r5;
    0x000524e0 bl 0x66c38                                        |     fcn_00066c38 (r0, r1);
    0x000524e4 mov r1, r4                                        |     r1 = r4;
    0x000524e6 bl 0x66c04                                        |     fcn_00066c04 (r0, r1);
    0x000524ea mov r3, r5                                        |     r3 = r5;
    0x000524ec mov sb, r0                                        |     sb = r0;
    0x000524ee adds r3, 1                                        |     r3++;
    0x000524f0 add.w fp, fp, r3, lsl 4                           |     
    0x000524f4 cbnz r0, 0x52524                                  |     
                                                                 |     while (1) {
    0x000524f6 movs r2, 0x10                                     |         r2 = 0x10;
    0x000524f8 mov r1, r2                                        |         r1 = r2;
    0x000524fa mov r0, r8                                        |         r0 = r8;
    0x000524fc blx 0x5a78                                        |         chroot ();
    0x00052500 movs r2, 0x10                                     |         r2 = 0x10;
    0x00052502 mov r0, r6                                        |         r0 = r6;
    0x00052504 mov r1, r2                                        |         r1 = r2;
    0x00052506 blx 0x5a78                                        |         chroot ();
    0x0005250a ldr r2, [pc, 0x3c]                                |         
    0x0005250c ldr r3, [pc, 0x34]                                |         r3 = *(0x52544);
    0x0005250e add r2, pc                                        |         r2 = 0xa4a5c;
    0x00052510 ldr r3, [r2, r3]                                  |         r3 = *(0xa4a5c);
    0x00052512 ldr r2, [r3]                                      |         r2 = *(0xa4a5c);
    0x00052514 ldr r3, [sp, 0x2c]                                |         r3 = var_2ch;
    0x00052516 eors r2, r3                                       |         r2 ^= r3;
    0x00052518 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x0005251c bne 0x5253a                                       |             goto label_1;
                                                                 |         }
    0x0005251e add sp, 0x34                                      |         
    0x00052520 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_0:
    0x00052524 mov r2, r7                                        |         r2 = r7;
    0x00052526 mov r1, r6                                        |         r1 = r6;
    0x00052528 mov r0, r8                                        |         r0 = r8;
    0x0005252a blx 0x540c                                        |         printf_chk ()
    0x0005252e mov r2, sb                                        |         r2 = sb;
    0x00052530 mov r1, r6                                        |         r1 = r6;
    0x00052532 mov r0, fp                                        |         r0 = fp;
    0x00052534 blx 0x59bc                                        |         fcn_000059bc ();
    0x00052538 b 0x524f6                                         |         
                                                                 |     }
                                                                 | label_1:
    0x0005253a blx 0x5d1c                                        |     fcn_00005d1c ();
    0x0005253e nop                                               |     
    0x00052540 strb r6, [r3, 0x12]                               |     *((r3 + 0x12)) = r6;
    0x00052542 movs r5, r0                                       |     r5 = r0;
    0x00052544 lsls r0, r2, 0x1a                                 |     r0 = r2 << 0x1a;
    0x00052546 movs r0, r0                                       |     
    0x00052548 strb r6, [r7, 0xf]                                |     *((r7 + 0xf)) = r6;
    0x0005254a movs r5, r0                                       |     r5 = r0;
                                                                 | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/sshd @ 0x52a10 */
                                                                     | #include <stdint.h>
                                                                     |  
                                                                     | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                     |  
    ; (fcn) fcn.00052a10 ()                                          | void fcn_00052a10 (int16_t arg1) {
                                                                     |     int16_t var_0h;
                                                                     |     char * src;
                                                                     |     int16_t var_114h;
                                                                     |     int16_t var_154h;
                                                                     |     int16_t var_194h;
                                                                     |     r0 = arg1;
    0x00052a10 vst1.32 {d20, d21}, [pc], sb                          |     __asm ("vst1.32 {d20, d21}, [pc], sb");
    0x00052a14 str r0, [r0, 0x1c]                                    |     *((r0 + 0x1c)) = r0;
    0x00052a16 ldr r3, [pc, 0x224]                                   |     
    0x00052a18 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr}           |     
    0x00052a1c mov r4, r0                                            |     r4 = r0;
    0x00052a1e add r2, pc                                            |     r2 += pc;
    0x00052a20 vpush {d8}                                            |     __asm ("vpush {d8}");
    0x00052a24 movs r0, 1                                            |     r0 = 1;
    0x00052a26 sub sp, 0x19c                                         |     
    0x00052a28 ldr r3, [r2, r3]                                      |     r3 = *((r2 + r3));
    0x00052a2a ldr r3, [r3]                                          |     r3 = *(0x52c3e);
    0x00052a2c str r3, [sp, 0x194]                                   |     var_194h = r3;
    0x00052a2e mov.w r3, 0                                           |     r3 = 0;
    0x00052a32 bl 0x4a144                                            |     fcn_0004a144 (r0, r1);
    0x00052a34 smull r4, r6, r7, r3                                  |     r4:r6 = r7 * r3;
    0x00052a38 mov r6, r0                                            |     r6 = r0;
    0x00052a3a cmp r0, 0                                             |     
                                                                     |     if (r0 == 0) {
    0x00052a3c beq.w 0x52c06                                         |         goto label_0;
                                                                     |     }
    0x00052a40 and r6, r0, 0xf                                       |     r6 = r0 & 0xf;
    0x00052a44 mov r8, sp                                            |     r8 = sp;
    0x00052a46 rsbs.w r6, r6, 0x10                                   |     r6 = 0x10 - r6;
    0x00052a4a add.w sb, sp, 0xf4                                    |     sb += src;
    0x00052a4c lsrs r4, r6, 7                                        |     r4 = r6 >> 7;
    0x00052a4e add r6, r0                                            |     r6 += r0;
    0x00052a50 mov r2, r8                                            |     r2 = r8;
    0x00052a52 mov r0, r4                                            |     r0 = r4;
    0x00052a54 movs r1, 0x80                                         |     r1 = 0x80;
    0x00052a56 str.w r3, [r6, 0x5ec]                                 |     __asm ("str.w r3, aav.0x000000ff");
    0x00052a5a add.w r4, r6, 0x4f8                                   |     r4 = r6 + 0x4f8;
    0x00052a5e blx 0x5910                                            |     strndup (r0, r1);
    0x00052a62 movs r3, 0x10                                         |     r3 = 0x10;
    0x00052a64 movs r2, 0                                            |     r2 = 0;
    0x00052a66 mov r1, r8                                            |     r1 = r8;
    0x00052a68 mov r0, sb                                            |     r0 = sb;
    0x00052a6a bl 0x52440                                            |     fcn_00052440 (r0, r1, r2, r3);
    0x00052a6e movs r5, 0                                            |     r5 = 0;
    0x00052a70 mov r2, r4                                            |     r2 = r4;
    0x00052a72 movs r1, 0x80                                         |     r1 = 0x80;
    0x00052a74 add.w r7, r6, 0x4d8                                   |     r7 = r6 + 0x4d8;
    0x00052a78 mov r0, sb                                            |     r0 = sb;
    0x00052a7a blx 0x5910                                            |     strndup (r0, r1);
    0x00052a7e mov r2, r4                                            |     r2 = r4;
    0x00052a80 mov r1, r7                                            |     r1 = r7;
    0x00052a82 add.w r0, r6, 0x4e8                                   |     r0 = r6 + 0x4e8;
    0x00052a86 str.w r5, [r6, 0x4e8]                                 |     __asm ("str.w r5, aav.0x000000ff");
    0x00052a8a str.w r5, [r6, 0x4ec]                                 |     __asm ("str.w r5, aav.0x000000ff");
    0x00052a8e mov r4, r6                                            |     r4 = r6;
    0x00052a90 str.w r5, [r6, 0x4f0]                                 |     __asm ("str.w r5, aav.0x000000ff");
    0x00052a94 str.w r5, [r6, 0x4f4]                                 |     __asm ("str.w r5, aav.0x000000ff");
    0x00052a98 blx 0x540c                                            |     printf_chk ()
    0x00052a9c movs r2, 0x10                                         |     r2 = 0x10;
    0x00052a9e mov r0, sb                                            |     r0 = sb;
    0x00052aa0 mov r1, r2                                            |     r1 = r2;
    0x00052aa2 blx 0x5a78                                            |     chroot ();
    0x00052aa4 invalid                                               |     
    0x00052aa8 mov.w r2, 0x4d8                                       |     r2 = 0x4d8;
    0x00052aac mov r0, r6                                            |     r0 = r6;
    0x00052aae blx 0x5530                                            |     fcn_00005530 ();
    0x00052ab2 mov.w r3, 0x410                                       |     r3 = 0x410;
    0x00052ab6 movs r2, 1                                            |     r2 = 1;
    0x00052ab8 mov r1, r8                                            |     r1 = r8;
    0x00052aba mov r0, r6                                            |     r0 = r6;
    0x00052abc adds r5, r6, r3                                       |     r5 = r6 + r3;
    0x00052abe bl 0x52440                                            |     fcn_00052440 (r0, r1, r2, r3);
                                                                     |     do {
    0x00052ac2 mov r0, r4                                            |         r0 = r4;
    0x00052ac4 bl 0x4d440                                            |         fcn_0004d440 (r0);
    0x00052ac8 str r0, [r4], 4                                       |         *(r4) = r0;
                                                                     |         r4 += 4;
    0x00052acc cmp r5, r4                                            |         
    0x00052ace bne 0x52ac2                                           |         
                                                                     |     } while (r5 != r4);
    0x00052ad0 vmov.i32 d16, 0                                       |     __asm ("vmov.i32 d16, 0");
    0x00052ad4 movs r2, 0                                            |     r2 = 0;
    0x00052ad6 vldr d8, [pc, 0x158]                                  |     __asm ("vldr d8, aav.0x000000ff");
    0x00052ada add.w r3, r6, 0x460                                   |     r3 = r6 + 0x460;
    0x00052ade add.w r4, r6, 0x468                                   |     r4 = r6 + 0x468;
    0x00052ae2 mov r7, sb                                            |     r7 = sb;
    0x00052ae4 add.w sl, r6, 0x478                                   |     sl = r6 + 0x478;
    0x00052ae8 str.w r2, [r6, 0x454]                                 |     __asm ("str.w r2, aav.0x000000ff");
    0x00052aec str.w r2, [r6, 0x450]                                 |     __asm ("str.w r2, aav.0x000000ff");
    0x00052aee movs r4, 0x50                                         |     r4 = 0x50;
    0x00052af0 mov r1, r8                                            |     r1 = r8;
    0x00052af2 vstr d16, [r3, -8]                                    |     __asm ("vstr d16, [r3, -8]");
    0x00052af6 movs r2, 2                                            |     r2 = 2;
    0x00052af8 vstr d16, [r3]                                        |     __asm ("vstr d16, [r3]");
    0x00052afa lsrs r0, r0, 0xc                                      |     r0 >>= 0xc;
    0x00052afc mov r0, sb                                            |     r0 = sb;
    0x00052afe movs r3, 0xa0                                         |     r3 = 0xa0;
    0x00052b00 bl 0x52440                                            |     fcn_00052440 (r0, r1, r2, r3);
    0x00052b02 invalid                                               |     
                                                                     |     do {
    0x00052b04 mov r3, r7                                            |         r3 = r7;
    0x00052b06 adds r7, 0x18                                         |         r7 += 0x18;
    0x00052b08 ldm r3!, {r0, r1}                                     |         r0 = *(r3!);
                                                                     |         r1 = *((r3! + 4));
    0x00052b0a str r0, [r4]                                          |         *(r4) = r0;
    0x00052b0c mov r0, r4                                            |         r0 = r4;
    0x00052b0e str r1, [r0, 4]!                                      |         *((r0 += 4)) = r1;
    0x00052b12 bl 0x4d440                                            |         r0 = fcn_0004d440 (r0);
    0x00052b16 mov r5, r0                                            |         r5 = r0;
    0x00052b18 mov r0, r4                                            |         r0 = r4;
    0x00052b1a bl 0x4d440                                            |         fcn_0004d440 (r0);
    0x00052b1e bic r5, r5, 0xfe000000                                |         r5 = BIT_MASK (r5, 0xfe000000);
    0x00052b22 bic r0, r0, 0xfe000000                                |         r0 = BIT_MASK (r0, 0xfe000000);
    0x00052b26 str r5, [r4]                                          |         *(r4) = r5;
    0x00052b28 adds r4, 8                                            |         r4 += 8;
    0x00052b2a str r0, [r4, -0x4]                                    |         *((r4 - 0x4)) = r0;
    0x00052b2e vstr d8, [r4, 8]                                      |         __asm ("vstr d8, [r4, 8]");
    0x00052b32 cmp sl, r4                                            |         
    0x00052b34 bne 0x52b04                                           |         
                                                                     |     } while (sl != r4);
    0x00052b36 movs r3, 0xa0                                         |     r3 = 0xa0;
    0x00052b38 movs r2, 3                                            |     r2 = 3;
    0x00052b3a mov r1, r8                                            |     r1 = r8;
    0x00052b3c mov r0, sb                                            |     r0 = sb;
    0x00052b3e bl 0x52440                                            |     fcn_00052440 (r0, r1, r2, r3);
    0x00052b42 add.w lr, sp, 0x114                                   |     lr += var_114h;
    0x00052b46 add.w r5, r6, 0x488                                   |     r5 = r6 + 0x488;
    0x00052b4a ldm.w lr!, {r0, r1, r2, r3}                           |     r0 = *(lr!);
                                                                     |     r1 = *((lr! + 4));
                                                                     |     r2 = *((lr! + 8));
                                                                     |     r3 = *((lr! + 12));
    0x00052b4e add.w ip, sp, 0x154                                   |     
    0x00052b52 mov r4, r5                                            |     r4 = r5;
    0x00052b54 addw r7, r6, 0x48c                                    |     __asm ("addw r7, r6, aav.0x000000ff");
    0x00052b58 add.w sl, r6, 0x4c8                                   |     sl = r6 + 0x4c8;
    0x00052b5c str.w r0, [r6, 0x488]                                 |     __asm ("str.w r0, aav.0x000000ff");
    0x00052b60 str r1, [r5, 4]                                       |     *((r5 + 4)) = r1;
    0x00052b62 str r2, [r5, 8]                                       |     *((r5 + 8)) = r2;
    0x00052b64 str r3, [r5, 0xc]                                     |     *((r5 + 0xc)) = r3;
    0x00052b66 ldm.w lr!, {r0, r1, r2, r3}                           |     r0 = *(lr!);
                                                                     |     r1 = *((lr! + 4));
                                                                     |     r2 = *((lr! + 8));
                                                                     |     r3 = *((lr! + 12));
    0x00052b6a str r0, [r5, 0x10]                                    |     *((r5 + 0x10)) = r0;
    0x00052b6c str r1, [r5, 0x14]                                    |     *((r5 + 0x14)) = r1;
    0x00052b6e str r2, [r5, 0x18]                                    |     *((r5 + 0x18)) = r2;
    0x00052b70 str r3, [r5, 0x1c]                                    |     *((r5 + 0x1c)) = r3;
    0x00052b72 ldm.w ip!, {r0, r1, r2, r3}                           |     r0 = *(ip!);
                                                                     |     r1 = *((ip! + 4));
                                                                     |     r2 = *((ip! + 8));
                                                                     |     r3 = *((ip! + 12));
    0x00052b76 str.w r0, [r6, 0x4a8]                                 |     __asm ("str.w r0, aav.0x000000ff");
    0x00052b7a str.w r1, [r6, 0x4ac]                                 |     __asm ("str.w r1, aav.0x000000ff");
    0x00052b7e str.w r2, [r6, 0x4b0]                                 |     __asm ("str.w r2, aav.0x000000ff");
    0x00052b82 str.w r3, [r6, 0x4b4]                                 |     __asm ("str.w r3, aav.0x000000ff");
    0x00052b86 ldm.w ip!, {r0, r1, r2, r3}                           |     r0 = *(ip!);
                                                                     |     r1 = *((ip! + 4));
                                                                     |     r2 = *((ip! + 8));
                                                                     |     r3 = *((ip! + 12));
    0x00052b8a str.w r0, [r6, 0x4b8]                                 |     __asm ("str.w r0, aav.0x000000ff");
    0x00052b8e str.w r1, [r6, 0x4bc]                                 |     __asm ("str.w r1, aav.0x000000ff");
    0x00052b92 str.w r2, [r6, 0x4c0]                                 |     __asm ("str.w r2, aav.0x000000ff");
    0x00052b96 str.w r3, [r6, 0x4c4]                                 |     __asm ("str.w r3, aav.0x000000ff");
                                                                     |     do {
    0x00052b9a mov r0, r7                                            |         r0 = r7;
    0x00052b9c adds r7, 8                                            |         r7 += 8;
    0x00052b9e bl 0x4d440                                            |         r0 = fcn_0004d440 (r0);
    0x00052ba2 mov fp, r0                                            |         
    0x00052ba4 mov r0, r4                                            |         r0 = r4;
    0x00052ba6 bl 0x4d440                                            |         fcn_0004d440 (r0);
    0x00052baa adds r4, 8                                            |         r4 += 8;
    0x00052bac str r0, [r4, -0x4]                                    |         *((r4 - 0x4)) = r0;
    0x00052bb0 cmp sl, r4                                            |         
    0x00052bb2 str fp, [r7, -0xc]                                    |         *((r7 - 0xc)) = fp;
    0x00052bb6 bne 0x52b9a                                           |         
                                                                     |     } while (sl != r4);
                                                                     |     do {
    0x00052bb8 ldrd r0, r1, [r5]                                     |         __asm ("ldrd r0, r1, [r5]");
    0x00052bbc mvn r2, 4                                             |         r2 = ~4;
    0x00052bc0 movs r3, 0xf                                          |         r3 = 0xf;
    0x00052bc2 bl 0x66bc8                                            |         fcn_00066bc8 (r0, r1, r2, r3);
    0x00052bc4 invalid                                               |         
    0x00052bc8 movs r3, 2                                            |         r3 = 2;
    0x00052bca cmp r5, sl                                            |         
    0x00052bcc bne 0x52bb8                                           |         
                                                                     |     } while (r5 != sl);
    0x00052bce movs r3, 8                                            |     r3 = 8;
    0x00052bd0 mov r1, r8                                            |     r1 = r8;
    0x00052bd2 movs r2, 4                                            |     r2 = 4;
    0x00052bd4 mov r0, r5                                            |     r0 = r5;
    0x00052bd6 bl 0x52440                                            |     fcn_00052440 (r0, r1, r2, r3);
    0x00052bda mov r0, r5                                            |     r0 = r5;
    0x00052bdc bl 0x4d440                                            |     fcn_0004d440 (r0);
    0x00052be0 str.w r0, [r6, 0x4c8]                                 |     __asm ("str.w r0, aav.0x000000ff");
    0x00052be4 addw r0, r6, 0x4cc                                    |     __asm ("addw r0, r6, aav.0x000000ff");
    0x00052be8 bl 0x4d440                                            |     fcn_0004d440 (r0);
    0x00052bec movs r2, 0xa0                                         |     r2 = 0xa0;
    0x00052bee mov r3, r0                                            |     r3 = r0;
    0x00052bf0 mov r1, r2                                            |     r1 = r2;
    0x00052bf2 mov r0, sb                                            |     r0 = sb;
    0x00052bf4 str.w r3, [r6, 0x4cc]                                 |     __asm ("str.w r3, aav.0x000000ff");
    0x00052bf8 blx 0x5a78                                            |     chroot ();
    0x00052bfc movs r2, 0xf4                                         |     r2 = 0xf4;
    0x00052bfe mov r0, r8                                            |     r0 = r8;
    0x00052c00 mov r1, r2                                            |     r1 = r2;
    0x00052c02 blx 0x5a78                                            |     chroot ();
    0x00052c04 invalid                                               |     
                                                                     | label_0:
    0x00052c06 ldr r2, [pc, 0x38]                                    |     
    0x00052c08 ldr r3, [pc, 0x30]                                    |     r3 = *(0x52c3c);
    0x00052c0a add r2, pc                                            |     r2 = 0xa5850;
    0x00052c0c ldr r3, [r2, r3]                                      |     r3 = *(0xa5850);
    0x00052c0e ldr r2, [r3]                                          |     r2 = *(0xa5850);
    0x00052c10 ldr r3, [sp, 0x194]                                   |     r3 = var_194h;
    0x00052c12 eors r2, r3                                           |     r2 ^= r3;
    0x00052c14 mov.w r3, 0                                           |     r3 = 0;
                                                                     |     if (r2 == r3) {
    0x00052c18 bne 0x52c26                                           |         
    0x00052c1a mov r0, r6                                            |         r0 = r6;
    0x00052c1c add sp, 0x19c                                         |         
    0x00052c1e vpop {d8}                                             |         __asm ("vpop {d8}");
    0x00052c22 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}            |         
                                                                     |     }
    0x00052c26 blx 0x5d1c                                            |     fcn_00005d1c ();
    0x00052c2a nop                                                   |     
    0x00052c2c nop.w                                                 |     
    0x00052c30 movs r1, r0                                           |     r1 = r0;
    0x00052c32 movs r0, r0                                           |     
    0x00052c34 movs r0, r0                                           |     
    0x00052c36 movs r0, r0                                           |     
    0x00052c38 ldr r6, [r5, 0x6c]                                    |     r6 = *((r5 + 0x6c));
    0x00052c3a movs r5, r0                                           |     r5 = r0;
    0x00052c3c lsls r0, r2, 0x1a                                     |     r0 = r2 << 0x1a;
    0x00052c3e movs r0, r0                                           |     
    0x00052c40 ldr r2, [r0, 0x50]                                    |     r2 = *((r0 + 0x50));
    0x00052c42 movs r5, r0                                           |     r5 = r0;
                                                                     | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/sshd @ 0x52c44 */
                                                                 | #include <stdint.h>
                                                                 |  
                                                                 | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                                 |  
    ; (fcn) fcn.00052c44 ()                                      | void fcn_00052c44 (int16_t arg_0h, int16_t arg_4h, int16_t arg_7h, int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_4h_3;
                                                                 |     int16_t var_8h_3;
                                                                 |     int16_t var_ch_2;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_24h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x00052c44 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x00052c48 sub sp, 0x2c                                      |     
    0x00052c4a ldr r6, [pc, 0x300]                               |     
    0x00052c4c mov r4, r0                                        |     r4 = r0;
    0x00052c4e mov r7, r1                                        |     r7 = r1;
    0x00052c50 mov fp, r2                                        |     
    0x00052c52 ldr r5, [pc, 0x2fc]                               |     r5 = *(0x52f52);
    0x00052c54 ldr.w r3, [r0, 0x4d0]                             |     r3 = *(arg_0hx4d0);
    0x00052c58 add r6, pc                                        |     r6 = 0xa5baa;
    0x00052c5a ldr r5, [r6, r5]                                  |     
    0x00052c5c cmp.w r3, 0x400                                   |     
    0x00052c60 ldr r5, [r5]                                      |     r5 = *(0xa5baa);
    0x00052c62 str r5, [sp, 0x24]                                |     var_24h = r5;
    0x00052c64 mov.w r5, 0                                       |     r5 = 0;
                                                                 |     if (r3 < 0x400) {
    0x00052c68 bls.w 0x52e12                                     |         goto label_1;
                                                                 |     }
    0x00052c6c ubfx r3, r3, 0, 0xa                               |     r3 = (r3 >> 0) & ((1 << 0xa) - 1);
    0x00052c70 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x00052c72 bne.w 0x52e00                                     |         goto label_2;
                                                                 |     }
    0x00052c76 add.w r6, r4, 0x478                               |     r6 = r4 + 0x478;
    0x00052c7a mov r8, r7                                        |     r8 = r7;
    0x00052c7c mov sl, r4                                        |     sl = r4;
    0x00052c7e add.w r3, r4, 0x4c8                               |     r3 = r4 + 0x4c8;
    0x00052c82 add.w r5, r4, 0x488                               |     r5 = r4 + 0x488;
    0x00052c86 str r7, [sp, 0xc]                                 |     var_ch_2 = r7;
    0x00052c88 str r5, [sp, 8]                                   |     var_8h_3 = r5;
    0x00052c8a str r3, [sp, 4]                                   |     *(arg_4h) = r3;
                                                                 |     do {
    0x00052c8c ldrd r2, r1, [r6]                                 |         __asm ("ldrd r2, r1, [r6]");
    0x00052c90 adds r6, 8                                        |         r6 += 8;
    0x00052c92 cmn.w r2, 0x3b                                    |         
    0x00052c96 sbcs r3, r1, -1                                   |         __asm ("sbcs r3, r1, -1");
                                                                 |         if (r2 >= 0x3b) {
    0x00052c9a bhs.w 0x52df0                                     |             goto label_3;
                                                                 |         }
    0x00052c9e uxth r3, r2                                       |         r3 = (int16_t) r2;
    0x00052ca0 mov.w ip, 0                                       |         
                                                                 | label_0:
    0x00052ca4 ldr r4, [r5, 0x1c]                                |         r4 = *((r5 + 0x1c));
    0x00052ca6 lsr.w sb, r1, 0x10                                |         sb = r1 >> 0x10;
    0x00052caa ldr r0, [r5, 0x18]                                |         r0 = *((r5 + 0x18));
    0x00052cac uxth r1, r1                                       |         r1 = (int16_t) r1;
    0x00052cae ldr r7, [r5, 8]                                   |         r7 = *((r5 + 8));
    0x00052cb0 lsrs r2, r2, 0x10                                 |         r2 >>= 0x10;
    0x00052cb2 mul r4, r3, r4                                    |         r4 = r3 * r4;
    0x00052cb6 mla r4, ip, r0, r4                                |         __asm ("mla r4, ip, r0, r4");
    0x00052cba umull r3, r0, r0, r3                              |         r3:r0 = r0 * r3;
    0x00052cbe add r4, r0                                        |         r4 += r0;
    0x00052cc0 ldr r0, [r5]                                      |         r0 = *(r5);
    0x00052cc2 umull ip, r0, r0, sb                              |         ip:r0 = r0 * sb;
    0x00052cc6 adds.w r3, ip, r3                                 |         r3 = ip + r3;
    0x00052cca umull lr, ip, r7, r1                              |         lr:ip = r7 * r1;
    0x00052cce ldr r7, [r5, 4]                                   |         r7 = *((r5 + 4));
    0x00052cd0 mla r0, sb, r7, r0                                |         __asm ("mla r0, sb, r7, r0");
    0x00052cd2 movs r7, r0                                       |         r7 = r0;
    0x00052cd4 adc.w sb, r0, r4                                  |         __asm ("adc.w sb, r0, r4");
    0x00052cd8 ldr r0, [r5, 0x10]                                |         r0 = *((r5 + 0x10));
    0x00052cda adds.w r3, r3, lr                                 |         r3 += lr;
    0x00052cde umull lr, r4, r0, r2                              |         lr:r4 = r0 * r2;
    0x00052ce2 ldr r0, [r5, 0xc]                                 |         r0 = *((r5 + 0xc));
    0x00052ce4 mla ip, r1, r0, ip                                |         __asm ("mla ip, r1, r0, ip");
    0x00052ce8 ldr r0, [r5, 0x14]                                |         r0 = *((r5 + 0x14));
    0x00052cea mla r4, r2, r0, r4                                |         __asm ("mla r4, r2, r0, r4");
    0x00052cee adc.w ip, ip, sb                                  |         __asm ("adc.w ip, ip, sb");
    0x00052cf2 adds.w r3, r3, lr                                 |         r3 += lr;
    0x00052cf6 adc.w r4, r4, ip                                  |         __asm ("adc.w r4, r4, ip");
    0x00052cfa lsrs r2, r4, 4                                    |         r2 = r4 >> 4;
    0x00052cfc and r4, r4, 0xf                                   |         r4 &= 0xf;
    0x00052d00 lsls r1, r2, 2                                    |         r1 = r2 << 2;
    0x00052d02 adds r1, r1, r2                                   |         r1 += r2;
    0x00052d04 mov.w r2, 0                                       |         r2 = 0;
    0x00052d08 adcs r2, r2                                       |         __asm ("adcs r2, r2");
    0x00052d0a adds.w lr, r1, r3                                 |         lr = r1 + r3;
    0x00052d0e adc.w r3, r2, r4                                  |         __asm ("adc.w r3, r2, r4");
    0x00052d12 mvn r2, 5                                         |         r2 = ~5;
    0x00052d16 cmp r2, lr                                        |         
    0x00052d18 mov.w r2, 0xf                                     |         r2 = 0xf;
    0x00052d1c sbcs.w r3, r2, r3                                 |         __asm ("sbcs.w r3, r2, r3");
                                                                 |         if (r2 < lr) {
    0x00052d20 bhs 0x52d26                                       |             
    0x00052d22 adds.w lr, lr, 5                                  |             lr += 5;
                                                                 |         }
    0x00052d26 ldr r3, [sp, 4]                                   |         r3 = *(arg_4h);
    0x00052d28 mov r0, r8                                        |         r0 = r8;
    0x00052d2a adds r5, 0x20                                     |         r5 += 0x20;
    0x00052d2c add.w r8, r8, 4                                   |         r8 += 4;
    0x00052d30 ldr r1, [r3], 4                                   |         r1 = *(r3);
                                                                 |         r3 += 4;
    0x00052d34 eor.w r1, r1, lr                                  |         r1 ^= lr;
    0x00052d38 str r3, [sp, 4]                                   |         *(arg_4h) = r3;
    0x00052d3a bl 0x4d47c                                        |         fcn_0004d47c (r0, r1);
    0x00052d3e ldr r3, [sp, 8]                                   |         r3 = var_8h_3;
    0x00052d40 cmp r3, r6                                        |         
    0x00052d42 bne 0x52c8c                                       |         
                                                                 |     } while (r3 != r6);
    0x00052d44 ldr r7, [sp, 0xc]                                 |     r7 = var_ch_2;
    0x00052d46 mov r4, sl                                        |     r4 = sl;
                                                                 |     do {
    0x00052d48 vmov.i32 d16, 0                                   |         __asm ("vmov.i32 d16, 0");
    0x00052d4c movs r2, 0                                        |         r2 = 0;
    0x00052d4e add.w r3, r4, 0x460                               |         r3 = r4 + 0x460;
    0x00052d52 str.w r2, [r4, 0x454]                             |         __asm ("str.w r2, aav.0x000000ff");
    0x00052d56 str.w r2, [r4, 0x450]                             |         __asm ("str.w r2, aav.0x000000ff");
    0x00052d5a movs r1, 0                                        |         r1 = 0;
    0x00052d5c vstr d16, [r3, -8]                                |         __asm ("vstr d16, [r3, -8]");
    0x00052d60 movs r0, 1                                        |         r0 = 1;
    0x00052d62 vstr d16, [r3]                                    |         __asm ("vstr d16, [r3]");
    0x00052d66 add.w r3, r4, 0x480                               |         r3 = r4 + 0x480;
    0x00052d68 str r0, [r2, 0x38]                                |         *((r2 + 0x38)) = r0;
    0x00052d6a str.w r2, [r4, 0x4d0]                             |         __asm ("str.w r2, aav.0x000000ff");
    0x00052d6e add.w r6, r4, 0x4d8                               |         r6 = r4 + 0x4d8;
    0x00052d72 strd r0, r1, [r3, -0x8]                           |         __asm ("strd r0, r1, [r3, -0x8]");
    0x00052d76 strd r0, r1, [r3]                                 |         __asm ("strd r0, r1, [r3]");
    0x00052d7a ldr.w r3, [fp, 4]                                 |         r3 = *(arg_4h);
    0x00052d7e ldr.w r1, [r4, 0x4ec]                             |         r1 = *((r4 + 0x4ec));
    0x00052d82 ldrb.w r5, [fp, 7]                                |         r5 = *(arg_7h);
    0x00052d86 ubfx r2, r3, 0x18, 8                              |         r2 = (r3 >> 0x18) & ((1 << 8) - 1);
    0x00052d8a bic r2, r2, 1                                     |         r2 = BIT_MASK (r2, 1);
    0x00052d8c lsls r1, r0, 8                                    |         r1 = r0 << 8;
    0x00052d8e bfi r3, r2, 0x18, 8                               |         value_0 = BIT_MASK (0x18, 8);
                                                                 |         value_1 = r2 & value_0;
                                                                 |         value_0 = ~value_0;
                                                                 |         r3 &= value_0;
                                                                 |         r3 |= value_1;
    0x00052d92 and r5, r5, 1                                     |         r5 &= 1;
    0x00052d96 cmp r3, r1                                        |         
    0x00052d98 ldr.w r2, [fp]                                    |         r2 = *(fp);
                                                                 |         if (r3 == r1) {
    0x00052d9c bne 0x52da6                                       |             
    0x00052d9e ldr.w r1, [r4, 0x4e8]                             |             r1 = *((r4 + 0x4e8));
    0x00052da2 cmp r2, r1                                        |             
                                                                 |             if (r2 == r1) {
    0x00052da4 beq 0x52dbc                                       |                 goto label_4;
                                                                 |             }
                                                                 |         }
    0x00052da6 str.w r2, [r4, 0x4e8]                             |         __asm ("str.w r2, aav.0x000000ff");
    0x00052daa add.w r0, r4, 0x4e8                               |         r0 = r4 + 0x4e8;
    0x00052dae add.w r2, r4, 0x4f8                               |         r2 = r4 + 0x4f8;
    0x00052db2 mov r1, r6                                        |         r1 = r6;
    0x00052db4 str.w r3, [r4, 0x4ec]                             |         __asm ("str.w r3, aav.0x000000ff");
    0x00052db8 blx 0x540c                                        |         printf_chk ()
                                                                 | label_4:
    0x00052dbc add.w r1, r6, r5, lsl 3                           |         r1 = r6 + (r5 << 3);
    0x00052dc0 ldrd r2, r3, [r7]                                 |         __asm ("ldrd r2, r3, [r7]");
    0x00052dc4 ldr.w r0, [r6, r5, lsl 3]                         |         offset_2 = r5 << 3;
                                                                 |         r0 = *((r6 + offset_2));
    0x00052dc8 ldr r1, [r1, 4]                                   |         r1 = *((r1 + 4));
    0x00052dca eors r2, r0                                       |         r2 ^= r0;
    0x00052dcc eors r3, r1                                       |         r3 ^= r1;
    0x00052dce strd r2, r3, [r7]                                 |         __asm ("strd r2, r3, [r7]");
    0x00052dd2 ldr r2, [pc, 0x180]                               |         
    0x00052dd4 ldr r3, [pc, 0x178]                               |         r3 = *(0x52f50);
    0x00052dd6 add r2, pc                                        |         r2 = 0xa5d30;
    0x00052dd8 ldr r3, [r2, r3]                                  |         r3 = *(0xa5d30);
    0x00052dda ldr r2, [r3]                                      |         r2 = *(0xa5d30);
    0x00052ddc ldr r3, [sp, 0x24]                                |         r3 = var_24h;
    0x00052dde eors r2, r3                                       |         r2 ^= r3;
    0x00052de0 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00052de4 bne.w 0x52f48                                     |             goto label_5;
                                                                 |         }
    0x00052de8 movs r0, 1                                        |         r0 = 1;
    0x00052dea add sp, 0x2c                                      |         
    0x00052dec pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_3:
    0x00052df0 adds r2, 0x3b                                     |         r2 += 0x3b;
    0x00052df2 adc r1, r1, 0                                     |         __asm ("adc r1, r1, 0");
    0x00052df6 mov r3, r2                                        |         r3 = r2;
    0x00052df8 mov ip, r1                                        |         
    0x00052dfa strd r2, r1, [r6, -0x8]                           |         __asm ("strd r2, r1, [r6, -0x8]");
    0x00052dfe b 0x52ca4                                         |         goto label_0;
                                                                 | label_2:
    0x00052e00 add r5, sp, 0x10                                  |         r5 += var_10h;
    0x00052e02 mov r1, r5                                        |         r1 = r5;
    0x00052e04 bl 0x52728                                        |         fcn_00052728 (r0, r1);
    0x00052e08 mov r1, r5                                        |         r1 = r5;
    0x00052e0a mov r0, r4                                        |         r0 = r4;
    0x00052e0c bl 0x52854                                        |         fcn_00052854 (r0, r1, r2);
    0x00052e0e stc2 p7, c14, [r2, -0xc4]!                        |         __asm ("stc2 p7, c14, [r2, -0xc4]!");
                                                                 | label_1:
    0x00052e12 add r1, sp, 0x10                                  |         r1 += var_10h;
    0x00052e14 bl 0x52728                                        |         fcn_00052728 (r0, r1);
    0x00052e18 ldrd r6, r3, [sp, 0x10]                           |         __asm ("ldrd r6, r3, [var_10h]");
    0x00052e1a str r4, [r0, 0x30]                                |         *((r0 + 0x30)) = r4;
    0x00052e1c ldr.w r1, [r4, 0x490]                             |         r1 = *((r4 + 0x490));
    0x00052e20 ldr.w r0, [r4, 0x488]                             |         r0 = *((r4 + 0x488));
    0x00052e24 ldr.w r5, [r4, 0x48c]                             |         r5 = *((r4 + 0x48c));
    0x00052e28 uxth.w sl, r3                                     |         sl = (int16_t) r3;
    0x00052e2c lsr.w r8, r3, 0x10                                |         r8 = r3 >> 0x10;
    0x00052e30 lsr.w lr, r6, 0x10                                |         lr = r6 >> 0x10;
    0x00052e34 uxth.w ip, r6                                     |         ip = (int16_t) r6;
    0x00052e38 umull sb, r1, r1, sl                              |         sb:r1 = r1 * sl;
    0x00052e3c ldr.w r3, [r4, 0x494]                             |         r3 = *((r4 + 0x494));
    0x00052e40 ldr.w r2, [r4, 0x498]                             |         r2 = *((r4 + 0x498));
    0x00052e44 umull r0, r6, r0, r8                              |         r0:r6 = r0 * r8;
    0x00052e48 mla r1, sl, r3, r1                                |         __asm ("mla r1, sl, r3, r1");
    0x00052e4c ldr.w r3, [r4, 0x4a0]                             |         r3 = *((r4 + 0x4a0));
    0x00052e50 adds.w r0, sb, r0                                 |         r0 = sb + r0;
    0x00052e54 mla r5, r8, r5, r6                                |         __asm ("mla r5, r8, r5, r6");
    0x00052e58 umull r2, r6, r2, lr                              |         r2:r6 = r2 * lr;
    0x00052e5c adc.w r1, r1, r5                                  |         __asm ("adc.w r1, r1, r5");
    0x00052e60 ldr.w r5, [r4, 0x49c]                             |         r5 = *((r4 + 0x49c));
    0x00052e64 adds r2, r2, r0                                   |         r2 += r0;
    0x00052e66 umull r3, r0, r3, ip                              |         r3:r0 = r3 * ip;
    0x00052e6a mla r5, lr, r5, r6                                |         __asm ("mla r5, lr, r5, r6");
    0x00052e6e mvn r6, 5                                         |         r6 = ~5;
    0x00052e70 lsls r5, r0, 0x18                                 |         r5 = r0 << 0x18;
    0x00052e72 adc.w r1, r5, r1                                  |         __asm ("adc.w r1, r5, r1");
    0x00052e76 adds r5, r3, r2                                   |         r5 = r3 + r2;
    0x00052e78 ldr.w r3, [r4, 0x4a4]                             |         r3 = *((r4 + 0x4a4));
    0x00052e7c mla r2, ip, r3, r0                                |         __asm ("mla r2, ip, r3, r0");
    0x00052e80 adc.w r2, r2, r1                                  |         __asm ("adc.w r2, r2, r1");
    0x00052e84 movs r1, 0                                        |         r1 = 0;
    0x00052e86 lsrs r0, r2, 4                                    |         r0 = r2 >> 4;
    0x00052e88 and r2, r2, 0xf                                   |         r2 &= 0xf;
    0x00052e8c lsls r3, r0, 2                                    |         r3 = r0 << 2;
    0x00052e8e adds r3, r3, r0                                   |         r3 += r0;
    0x00052e90 adcs r1, r1                                       |         __asm ("adcs r1, r1");
    0x00052e92 adds r3, r3, r5                                   |         r3 += r5;
    0x00052e94 adc.w r1, r1, r2                                  |         __asm ("adc.w r1, r1, r2");
    0x00052e98 movs r2, 0xf                                      |         r2 = 0xf;
    0x00052e9a cmp r6, r3                                        |         
    0x00052e9c sbcs r2, r1                                       |         __asm ("sbcs r2, r1");
                                                                 |         if (r6 < r3) {
    0x00052e9e bhs 0x52ea2                                       |             
    0x00052ea0 adds r3, 5                                        |             r3 += 5;
                                                                 |         }
    0x00052ea2 ldr.w r1, [r4, 0x4c8]                             |         r1 = *((r4 + 0x4c8));
    0x00052ea6 mov r0, r7                                        |         r0 = r7;
    0x00052ea8 eors r1, r3                                       |         r1 ^= r3;
    0x00052eaa bl 0x4d47c                                        |         fcn_0004d47c (r0, r1);
    0x00052eae ldrd r6, r3, [sp, 0x18]                           |         __asm ("ldrd r6, r3, [var_18h]");
    0x00052eb2 ldr.w r1, [r4, 0x4b0]                             |         r1 = *((r4 + 0x4b0));
    0x00052eb6 ldr.w r0, [r4, 0x4a8]                             |         r0 = *((r4 + 0x4a8));
    0x00052eba ldr.w r5, [r4, 0x4ac]                             |         r5 = *((r4 + 0x4ac));
    0x00052ebe uxth.w sl, r3                                     |         sl = (int16_t) r3;
    0x00052ec2 lsr.w sb, r3, 0x10                                |         sb = r3 >> 0x10;
    0x00052ec4 ldr r1, [pc, 0x4c]                                |         r1 = *(0x52f14);
    0x00052ec6 lsr.w lr, r6, 0x10                                |         lr = r6 >> 0x10;
    0x00052eca uxth.w ip, r6                                     |         ip = (int16_t) r6;
    0x00052ece umull r8, r1, r1, sl                              |         r8:r1 = r1 * sl;
    0x00052ed2 ldr.w r3, [r4, 0x4b4]                             |         r3 = *((r4 + 0x4b4));
    0x00052ed6 ldr.w r2, [r4, 0x4b8]                             |         r2 = *((r4 + 0x4b8));
    0x00052eda umull r0, r6, r0, sb                              |         r0:r6 = r0 * sb;
    0x00052ede mla r1, sl, r3, r1                                |         __asm ("mla r1, sl, r3, r1");
    0x00052ee2 ldr.w r3, [r4, 0x4c0]                             |         r3 = *((r4 + 0x4c0));
    0x00052ee6 adds.w r0, r8, r0                                 |         r0 = r8 + r0;
    0x00052eea mla r5, sb, r5, r6                                |         __asm ("mla r5, sb, r5, r6");
    0x00052eee umull r2, r6, r2, lr                              |         r2:r6 = r2 * lr;
    0x00052ef2 adc.w r1, r1, r5                                  |         __asm ("adc.w r1, r1, r5");
    0x00052ef6 ldr.w r5, [r4, 0x4bc]                             |         r5 = *((r4 + 0x4bc));
    0x00052ef8 strb r4, [r7, r2]                                 |         *((r7 + r2)) = r4;
    0x00052efa adds r2, r2, r0                                   |         r2 += r0;
    0x00052efc umull r3, r0, r3, ip                              |         r3:r0 = r3 * ip;
    0x00052f00 mla r5, lr, r5, r6                                |         __asm ("mla r5, lr, r5, r6");
    0x00052f04 mvn r6, 5                                         |         r6 = ~5;
    0x00052f08 adc.w r1, r5, r1                                  |         __asm ("adc.w r1, r5, r1");
    0x00052f0c adds r5, r3, r2                                   |         r5 = r3 + r2;
    0x00052f0e ldr.w r3, [r4, 0x4c4]                             |         r3 = *((r4 + 0x4c4));
    0x00052f12 mla r2, ip, r3, r0                                |         __asm ("mla r2, ip, r3, r0");
    0x00052f16 adc.w r2, r2, r1                                  |         __asm ("adc.w r2, r2, r1");
    0x00052f1a movs r1, 0                                        |         r1 = 0;
    0x00052f1c lsrs r0, r2, 4                                    |         r0 = r2 >> 4;
    0x00052f1e and r2, r2, 0xf                                   |         r2 &= 0xf;
    0x00052f22 lsls r3, r0, 2                                    |         r3 = r0 << 2;
    0x00052f24 adds r3, r3, r0                                   |         r3 += r0;
    0x00052f26 add.w r0, r7, 4                                   |         r0 = r7 + 4;
    0x00052f2a adcs r1, r1                                       |         __asm ("adcs r1, r1");
    0x00052f2c adds r3, r3, r5                                   |         r3 += r5;
    0x00052f2e adc.w r1, r1, r2                                  |         __asm ("adc.w r1, r1, r2");
    0x00052f32 movs r2, 0xf                                      |         r2 = 0xf;
    0x00052f34 cmp r6, r3                                        |         
    0x00052f36 sbcs r2, r1                                       |         __asm ("sbcs r2, r1");
                                                                 |         if (r6 < r3) {
    0x00052f38 bhs 0x52f3c                                       |             
    0x00052f3a adds r3, 5                                        |             r3 += 5;
                                                                 |         }
    0x00052f3c ldr.w r1, [r4, 0x4cc]                             |         r1 = *((r4 + 0x4cc));
    0x00052f40 eors r1, r3                                       |         r1 ^= r3;
    0x00052f42 bl 0x4d47c                                        |         fcn_0004d47c (r0, r1);
    0x00052f46 b 0x52d48                                         |         
                                                                 |     } while (1);
                                                                 | label_5:
    0x00052f48 blx 0x5d1c                                        |     fcn_00005d1c ();
    0x00052f4c ldr r4, [r6, 0x48]                                |     r4 = *((r6 + 0x48));
    0x00052f4e movs r5, r0                                       |     r5 = r0;
    0x00052f50 lsls r0, r2, 0x1a                                 |     r0 = r2 << 0x1a;
    0x00052f52 movs r0, r0                                       |     
    0x00052f54 ldr r6, [r6, 0x30]                                |     r6 = *((r6 + 0x30));
    0x00052f56 movs r5, r0                                       |     r5 = r0;
                                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/sshd @ 0x53098 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.00053098 ()                                      | void fcn_00053098 (char * arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
                                                                 |     int16_t var_bp_10h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_bh;
                                                                 |     int16_t var_13h;
                                                                 |     int16_t var_14h_2;
                                                                 |     int16_t var_24h_2;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
                                                                 |     r3 = arg4;
    0x00053098 svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x0005309c mov fp, r3                                        |     
    0x0005309e sub sp, 0x2c                                      |     
    0x000530a0 movs r3, 0                                        |     r3 = 0;
    0x000530a2 mov r7, r1                                        |     r7 = r1;
    0x000530a4 sub.w sl, fp, 0x10                                |     sl = fp - 0x10;
    0x000530a8 ldr r1, [pc, 0xc0]                                |     
    0x000530aa lsr.w sl, sl, 4                                   |     sl >>= 4;
    0x000530ae str r3, [sp, 8]                                   |     var_8h = r3;
    0x000530b0 add.w r5, r0, 0x10                                |     r5 = r0 + 0x10;
    0x000530b4 strb.w r2, [sp, 0xb]                              |     var_bh = r2;
    0x000530b8 add r6, sp, 0x14                                  |     r6 += var_14h_2;
    0x000530ba ldr r2, [pc, 0xb4]                                |     r2 = *(0x53172);
    0x000530bc add r1, pc                                        |     r1 = 0xa622c;
    0x000530be strd r3, r3, [sp, 0xc]                            |     __asm ("strd r3, r3, [sp, 0xc]");
    0x000530c2 add.w r8, sp, 4                                   |     r8 += var_4h;
    0x000530c6 add.w sb, sl, 2                                   |     sb = sl + 2;
    0x000530ca movs r4, 1                                        |     r4 = 1;
    0x000530cc ldr r2, [r1, r2]                                  |     
    0x000530ce ldr r2, [r2]                                      |     r2 = *(0xa622c);
    0x000530d0 str r2, [sp, 0x24]                                |     var_24h_2 = r2;
    0x000530d2 mov.w r2, 0                                       |     r2 = 0;
    0x000530d6 str r3, [sp, 4]                                   |     var_4h = r3;
    0x000530d8 strb.w r4, [sp, 0x13]                             |     var_13h = r4;
                                                                 |     do {
    0x000530dc mov r2, r7                                        |         r2 = r7;
    0x000530de mov r1, r6                                        |         r1 = r6;
    0x000530e0 mov r0, r8                                        |         r0 = r8;
    0x000530e2 adds r5, 0x10                                     |         r5 += 0x10;
    0x000530e4 blx 0x540c                                        |         printf_chk ()
    0x000530e8 mov ip, r6                                        |         
    0x000530ea ldm.w ip!, {r0, r1, r2, r3}                       |         r0 = *(ip!);
                                                                 |         r1 = *((ip! + 4));
                                                                 |         r2 = *((ip! + 8));
                                                                 |         r3 = *((ip! + 12));
    0x000530ee str r0, [r5, -0x20]                               |         *((r5 - 0x20)) = r0;
    0x000530f2 mov r0, r4                                        |         r0 = r4;
    0x000530f4 str r1, [r5, -0x1c]                               |         *((r5 - 0x1c)) = r1;
    0x000530f8 movs r1, 1                                        |         r1 = 1;
    0x000530fa str r2, [r5, -0x18]                               |         *((r5 - 0x18)) = r2;
    0x000530fe str r3, [r5, -0x14]                               |         *((r5 - 0x14)) = r3;
    0x00053102 bl 0x66c04                                        |         r0 = fcn_00066c04 (r0, r1);
    0x00053106 cmp r0, sb                                        |         
    0x00053108 mov r4, r0                                        |         r4 = r0;
    0x0005310a strb.w r0, [sp, 0x13]                             |         var_13h = r0;
    0x0005310e bne 0x530dc                                       |         
                                                                 |     } while (r0 != sb);
    0x00053110 mvn r1, 0xf                                       |     r1 = ~0xf;
    0x00053114 mov r0, fp                                        |     r0 = fp;
    0x00053116 bl 0x66c04                                        |     fcn_00066c04 (r0, r1);
    0x0005311a mvn r1, 0xf                                       |     r1 = ~0xf;
    0x0005311e mov r4, r0                                        |     r4 = r0;
    0x00053120 mov r0, sl                                        |     r0 = sl;
    0x00053122 bl 0x66c38                                        |     fcn_00066c38 (r0, r1);
    0x00053126 mov r1, r4                                        |     r1 = r4;
    0x00053128 bl 0x66c04                                        |     r0 = fcn_00066c04 (r0, r1);
    0x0005312c cbnz r0, 0x5315c                                  |     
                                                                 |     while (1) {
    0x0005312e movs r2, 0x10                                     |         r2 = 0x10;
    0x00053130 mov r0, r8                                        |         r0 = r8;
    0x00053132 mov r1, r2                                        |         r1 = r2;
    0x00053134 blx 0x5a78                                        |         chroot ();
    0x00053138 movs r2, 0x10                                     |         r2 = 0x10;
    0x0005313a mov r0, r6                                        |         r0 = r6;
    0x0005313c mov r1, r2                                        |         r1 = r2;
    0x0005313e blx 0x5a78                                        |         chroot ();
    0x00053142 ldr r2, [pc, 0x30]                                |         
    0x00053144 ldr r3, [pc, 0x28]                                |         r3 = *(0x53170);
    0x00053146 add r2, pc                                        |         r2 = 0xa62c0;
    0x00053148 ldr r3, [r2, r3]                                  |         r3 = *(0xa62c0);
    0x0005314a ldr r2, [r3]                                      |         r2 = *(0xa62c0);
    0x0005314c ldr r3, [sp, 0x24]                                |         r3 = var_24h_2;
    0x0005314e eors r2, r3                                       |         r2 ^= r3;
    0x00053150 mov.w r3, 0                                       |         r3 = 0;
    0x00053152 lsls r0, r0, 0xc                                  |         r0 <<= 0xc;
                                                                 |         if (r0 != r0) {
    0x00053154 bne 0x53168                                       |             goto label_0;
                                                                 |         }
    0x00053156 add sp, 0x2c                                      |         
    0x00053158 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
    0x0005315c mov r2, r7                                        |         r2 = r7;
    0x0005315e mov r1, r6                                        |         r1 = r6;
    0x00053160 mov r0, r8                                        |         r0 = r8;
    0x00053162 blx 0x540c                                        |         printf_chk ()
    0x00053166 b 0x5312e                                         |         
                                                                 |     }
                                                                 | label_0:
    0x00053168 blx 0x5d1c                                        |     fcn_00005d1c ();
    0x0005316c ldr r0, [r2, 4]                                   |     r0 = *((r2 + 4));
    0x0005316e movs r5, r0                                       |     r5 = r0;
    0x00053170 lsls r0, r2, 0x1a                                 |     r0 = r2 << 0x1a;
    0x00053172 movs r0, r0                                       |     
    0x00053174 str r6, [r0, 0x7c]                                |     *((r0 + 0x7c)) = r6;
    0x00053176 movs r5, r0                                       |     r5 = r0;
                                                                 | }
    ; assembly                                               | /* r2dec pseudo code output */
                                                             | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/sshd @ 0x53788 */
                                                             | #include <stdint.h>
                                                             |  
                                                             | #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
                                                             |  
    ; (fcn) fcn.00053788 ()                                  | void fcn_00053788 (int16_t arg1) {
                                                             |     int16_t var_0h;
                                                             |     char * src;
                                                             |     int16_t var_114h;
                                                             |     int16_t var_40h;
                                                             |     int16_t var_214h;
                                                             |     int16_t var_218h;
                                                             |     r0 = arg1;
    0x00053788 vst1.32 {d20, d21}, [pc], sb                  |     __asm ("vst1.32 {d20, d21}, [pc], sb");
    0x0005378c str r3, [r2, 0x1c]                            |     *((r2 + 0x1c)) = r3;
    0x0005378e ldr r3, [pc, 0x224]                           |     
    0x00053790 push.w {r4, r5, r6, r7, r8, sb, sl, lr}       |     
    0x00053794 mov r4, r0                                    |     r4 = r0;
    0x00053796 add r2, pc                                    |     r2 += pc;
    0x00053798 vpush {d8}                                    |     __asm ("vpush {d8}");
    0x0005379c movs r0, 1                                    |     r0 = 1;
    0x0005379e sub.w sp, sp, 0x218                           |     
    0x000537a2 ldr r3, [r2, r3]                              |     r3 = *((r2 + r3));
    0x000537a4 ldr r3, [r3]                                  |     r3 = *(0x539b6);
    0x000537a6 str r3, [sp, 0x214]                           |     var_214h = r3;
    0x000537a8 mov.w r3, 0                                   |     r3 = 0;
    0x000537ac bl 0x4a144                                    |     r0 = fcn_0004a144 (r0, r1);
    0x000537b0 mov r3, r0                                    |     r3 = r0;
    0x000537b2 mov r7, r0                                    |     r7 = r0;
    0x000537b4 cmp r0, 0                                     |     
                                                             |     if (r0 == 0) {
    0x000537b6 beq.w 0x53982                                 |         goto label_0;
                                                             |     }
    0x000537ba and r7, r0, 0xf                               |     r7 = r0 & 0xf;
    0x000537be mov r8, sp                                    |     r8 = sp;
    0x000537c0 rsbs.w r7, r7, 0x10                           |     r7 = 0x10 - r7;
    0x000537c4 add.w sb, sp, 0xf4                            |     sb += src;
    0x000537c8 add r7, r0                                    |     r7 += r0;
    0x000537ca mov r2, r8                                    |     r2 = r8;
    0x000537cc mov r0, r4                                    |     r0 = r4;
    0x000537ce movs r1, 0x80                                 |     r1 = 0x80;
    0x000537d0 str.w r3, [r7, 0x684]                         |     __asm ("str.w r3, aav.0x000000ff");
    0x000537d4 add.w r4, r7, 0x590                           |     r4 = r7 + 0x590;
    0x000537d8 blx 0x5910                                    |     strndup (r0, r1);
    0x000537dc movs r3, 0x10                                 |     r3 = 0x10;
    0x000537de movs r2, 0                                    |     r2 = 0;
    0x000537e0 mov r1, r8                                    |     r1 = r8;
    0x000537e2 mov r0, sb                                    |     r0 = sb;
    0x000537e4 bl 0x53098                                    |     fcn_00053098 (r0, r1, r2, r3);
    0x000537e6 mrrc2 p5, 0, r2, r8, c0                       |     __asm ("mrrc2 p5, 0, r2, r8, c0");
    0x000537ea mov r2, r4                                    |     r2 = r4;
    0x000537ec movs r1, 0x80                                 |     r1 = 0x80;
    0x000537ee add.w r6, r7, 0x570                           |     r6 = r7 + 0x570;
    0x000537f2 mov r0, sb                                    |     r0 = sb;
    0x000537f4 blx 0x5910                                    |     strndup (r0, r1);
    0x000537f8 mov r2, r4                                    |     r2 = r4;
    0x000537fa mov r1, r6                                    |     r1 = r6;
    0x000537fc add.w r0, r7, 0x580                           |     r0 = r7 + 0x580;
    0x00053800 str.w r5, [r7, 0x580]                         |     __asm ("str.w r5, aav.0x000000ff");
    0x00053804 str.w r5, [r7, 0x584]                         |     __asm ("str.w r5, aav.0x000000ff");
    0x00053808 mov r4, r7                                    |     r4 = r7;
    0x0005380a str.w r5, [r7, 0x588]                         |     __asm ("str.w r5, aav.0x000000ff");
    0x0005380e str.w r5, [r7, 0x58c]                         |     __asm ("str.w r5, aav.0x000000ff");
    0x00053812 blx 0x540c                                    |     printf_chk ()
    0x00053816 movs r2, 0x10                                 |     r2 = 0x10;
    0x00053818 mov r0, sb                                    |     r0 = sb;
    0x0005381a mov r1, r2                                    |     r1 = r2;
    0x0005381c blx 0x5a78                                    |     chroot ();
    0x00053820 mov r1, r5                                    |     r1 = r5;
    0x00053822 mov.w r2, 0x570                               |     r2 = 0x570;
    0x00053826 mov r0, r7                                    |     r0 = r7;
    0x00053828 blx 0x5530                                    |     fcn_00005530 ();
    0x0005382c mov.w r3, 0x430                               |     r3 = 0x430;
    0x0005382e str r6, [r0, 0x38]                            |     *((r0 + 0x38)) = r6;
    0x00053830 movs r2, 1                                    |     r2 = 1;
    0x00053832 mov r1, r8                                    |     r1 = r8;
    0x00053834 mov r0, r7                                    |     r0 = r7;
    0x00053836 adds r5, r7, r3                               |     r5 = r7 + r3;
    0x00053838 bl 0x53098                                    |     fcn_00053098 (r0, r1, r2, r3);
                                                             |     do {
    0x0005383c mov r0, r4                                    |         r0 = r4;
    0x0005383e bl 0x4d440                                    |         fcn_0004d440 (r0);
    0x00053842 str r0, [r4], 4                               |         *(r4) = r0;
                                                             |         r4 += 4;
    0x00053846 cmp r4, r5                                    |         
    0x00053848 bne 0x5383c                                   |         
                                                             |     } while (r4 != r5);
    0x0005384a vmov.i32 d16, 0                               |     __asm ("vmov.i32 d16, 0");
    0x0005384e movs r2, 0                                    |     r2 = 0;
    0x00053850 vldr d8, [pc, 0x154]                          |     __asm ("vldr d8, aav.0x000000ff");
    0x00053854 add.w r3, r7, 0x480                           |     r3 = r7 + 0x480;
    0x00053858 str.w r2, [r7, 0x474]                         |     __asm ("str.w r2, aav.0x000000ff");
    0x0005385c add.w r4, r7, 0x498                           |     r4 = r7 + 0x498;
    0x00053860 str.w r2, [r7, 0x470]                         |     __asm ("str.w r2, aav.0x000000ff");
    0x00053864 mov r6, sb                                    |     r6 = sb;
    0x00053866 add.w r2, r7, 0x490                           |     r2 = r7 + 0x490;
    0x0005386a add.w sl, r7, 0x4b8                           |     sl = r7 + 0x4b8;
    0x0005386e vstr d16, [r3, -8]                            |     __asm ("vstr d16, [r3, -8]");
    0x00053872 mov r1, r8                                    |     r1 = r8;
    0x00053874 vstr d16, [r3]                                |     __asm ("vstr d16, [r3]");
    0x00053878 mov r0, sb                                    |     r0 = sb;
    0x0005387a vstr d16, [r2, -8]                            |     __asm ("vstr d16, [r2, -8]");
    0x0005387e mov.w r3, 0x120                               |     r3 = 0x120;
    0x00053882 vstr d16, [r2]                                |     __asm ("vstr d16, [r2]");
    0x00053886 movs r2, 2                                    |     r2 = 2;
    0x00053888 bl 0x53098                                    |     fcn_00053098 (r0, r1, r2, r3);
                                                             |     do {
    0x0005388c mov r3, r6                                    |         r3 = r6;
    0x0005388e mov r2, r4                                    |         r2 = r4;
    0x00053890 ldm r3!, {r0, r1}                             |         r0 = *(r3!);
                                                             |         r1 = *((r3! + 4));
    0x00053892 adds r6, 0x18                                 |         r6 += 0x18;
    0x00053894 str r0, [r4]                                  |         *(r4) = r0;
    0x00053896 str r1, [r2, 4]!                              |         *((r2 += 4)) = r1;
    0x0005389a mov r0, r2                                    |         r0 = r2;
    0x0005389c bl 0x4d440                                    |         r0 = fcn_0004d440 (r0);
    0x000538a0 mov r5, r0                                    |         r5 = r0;
    0x000538a2 mov r0, r4                                    |         r0 = r4;
    0x000538a4 bl 0x4d440                                    |         fcn_0004d440 (r0);
    0x000538a8 bic r5, r5, 0xfe000000                        |         r5 = BIT_MASK (r5, 0xfe000000);
    0x000538ac bic r0, r0, 0xfe000000                        |         r0 = BIT_MASK (r0, 0xfe000000);
    0x000538b0 vstr d8, [r4, 0x20]                           |         __asm ("vstr d8, [r4, 0x20]");
    0x000538b4 strd r5, r0, [r4]                             |         __asm ("strd r5, r0, [r4]");
    0x000538b8 adds r4, 8                                    |         r4 += 8;
    0x000538ba cmp r4, sl                                    |         
    0x000538bc bne 0x5388c                                   |         
                                                             |     } while (r4 != sl);
    0x000538be mov.w r3, 0x120                               |     r3 = 0x120;
    0x000538c2 movs r2, 3                                    |     r2 = 3;
    0x000538c4 mov r1, r8                                    |     r1 = r8;
    0x000538c6 mov r0, sb                                    |     r0 = sb;
    0x000538c8 add.w r6, r7, 0x4d8                           |     r6 = r7 + 0x4d8;
    0x000538cc add.w r5, r7, 0x558                           |     r5 = r7 + 0x558;
    0x000538d0 bl 0x53098                                    |     fcn_00053098 (r0, r1, r2, r3);
    0x000538d2 invalid                                       |     
    0x000538d6 add.w lr, sp, 0x114                           |     lr += var_114h;
                                                             |     do {
    0x000538da mov r4, lr                                    |         r4 = lr;
    0x000538dc add.w ip, ip, 0x20                            |         
    0x000538e0 ldm r4!, {r0, r1, r2, r3}                     |         r0 = *(r4!);
                                                             |         r1 = *((r4! + 4));
                                                             |         r2 = *((r4! + 8));
                                                             |         r3 = *((r4! + 12));
    0x000538e2 add.w lr, lr, 0x40                            |         lr += var_40h;
    0x000538e6 str r0, [ip, -0x20]                           |         *((ip - 0x20)) = r0;
    0x000538ea str r1, [ip, -0x1c]                           |         *((ip - 0x1c)) = r1;
    0x000538ee str r2, [ip, -0x18]                           |         *((ip - 0x18)) = r2;
    0x000538f2 str r3, [ip, -0x14]                           |         *((ip - 0x14)) = r3;
    0x000538f6 ldm r4!, {r0, r1, r2, r3}                     |         r0 = *(r4!);
                                                             |         r1 = *((r4! + 4));
                                                             |         r2 = *((r4! + 8));
                                                             |         r3 = *((r4! + 12));
    0x000538f8 str r0, [ip, -0x10]                           |         *((ip - 0x10)) = r0;
    0x000538fc str r1, [ip, -0xc]                            |         *((ip - 0xc)) = r1;
    0x00053900 str r2, [ip, -0x8]                            |         *((ip - 0x8)) = r2;
    0x00053904 str r3, [ip, -0x4]                            |         *((ip - 0x4)) = r3;
    0x00053908 cmp ip, r5                                    |         
    0x0005390a bne 0x538da                                   |         
                                                             |     } while (ip != r5);
    0x0005390c addw r4, r7, 0x4dc                            |     __asm ("addw r4, r7, aav.0x000000ff");
                                                             |     do {
    0x00053910 mov r0, r4                                    |         r0 = r4;
    0x00053912 adds r4, 8                                    |         r4 += 8;
    0x00053914 bl 0x4d440                                    |         r0 = fcn_0004d440 (r0);
    0x00053918 mov sl, r0                                    |         sl = r0;
    0x0005391a mov r0, r6                                    |         r0 = r6;
    0x0005391c bl 0x4d440                                    |         fcn_0004d440 (r0);
    0x00053920 adds r6, 8                                    |         r6 += 8;
    0x00053922 str r0, [r6, -0x4]                            |         *((r6 - 0x4)) = r0;
    0x00053926 cmp r5, r6                                    |         
    0x00053928 str sl, [r4, -0xc]                            |         *((r4 - 0xc)) = sl;
    0x0005392c bne 0x53910                                   |         
                                                             |     } while (r5 != r6);
    0x0005392e add.w r4, r7, 0x4d0                           |     r4 = r7 + 0x4d0;
    0x00053932 add.w r6, r7, 0x550                           |     r6 = r7 + 0x550;
                                                             |     do {
    0x00053936 ldrd r0, r1, [r4, 8]!                         |         __asm ("ldrd r0, r1, [r4, 8]!");
    0x0005393a mvn r2, 4                                     |         r2 = ~4;
    0x0005393e movs r3, 0xf                                  |         r3 = 0xf;
    0x00053940 bl 0x66bc8                                    |         fcn_00066bc8 (r0, r1, r2, r3);
    0x00053944 cmp r6, r4                                    |         
    0x00053946 strd r2, r3, [r4]                             |         __asm ("strd r2, r3, [r4]");
    0x0005394a bne 0x53936                                   |         
                                                             |     } while (r6 != r4);
    0x0005394c mov r4, r5                                    |     r4 = r5;
    0x0005394e movs r3, 0x10                                 |     r3 = 0x10;
    0x00053950 movs r2, 4                                    |     r2 = 4;
    0x00053952 mov r1, r8                                    |     r1 = r8;
    0x00053954 mov r0, r4                                    |     r0 = r4;
    0x00053956 add.w r5, r7, 0x568                           |     r5 = r7 + 0x568;
    0x0005395a bl 0x53098                                    |     fcn_00053098 (r0, r1, r2, r3);
                                                             |     do {
    0x0005395e mov r0, r4                                    |         r0 = r4;
    0x00053960 bl 0x4d440                                    |         fcn_0004d440 (r0);
    0x00053964 str r0, [r4], 4                               |         *(r4) = r0;
                                                             |         r4 += 4;
    0x00053968 cmp r5, r4                                    |         
    0x0005396a bne 0x5395e                                   |         
                                                             |     } while (r5 != r4);
    0x0005396c mov.w r2, 0x120                               |     r2 = 0x120;
    0x00053970 mov r0, sb                                    |     r0 = sb;
    0x00053972 mov r1, r2                                    |     r1 = r2;
    0x00053974 blx 0x5a78                                    |     chroot ();
    0x00053978 movs r2, 0xf4                                 |     r2 = 0xf4;
    0x0005397a mov r0, r8                                    |     r0 = r8;
    0x0005397c mov r1, r2                                    |     r1 = r2;
    0x0005397e blx 0x5a78                                    |     chroot ();
                                                             | label_0:
    0x00053982 ldr r2, [pc, 0x34]                            |     
    0x00053984 ldr r3, [pc, 0x2c]                            |     r3 = *(0x539b4);
    0x00053986 add r2, pc                                    |     r2 = 0xa7344;
    0x00053988 ldr r3, [r2, r3]                              |     r3 = *(0xa7344);
    0x0005398a ldr r2, [r3]                                  |     r2 = *(0xa7344);
    0x0005398c ldr r3, [sp, 0x214]                           |     r3 = var_214h;
    0x0005398e eors r2, r3                                   |     r2 ^= r3;
    0x00053990 mov.w r3, 0                                   |     r3 = 0;
                                                             |     if (r2 == r3) {
    0x00053994 bne 0x539a4                                   |         
    0x00053996 mov r0, r7                                    |         r0 = r7;
    0x00053998 add.w sp, sp, 0x218                           |         
    0x0005399c vpop {d8}                                     |         __asm ("vpop {d8}");
    0x000539a0 pop.w {r4, r5, r6, r7, r8, sb, sl, pc}        |         
                                                             |     }
    0x000539a4 blx 0x5d1c                                    |     r0 = fcn_00005d1c ();
    0x000539a8 movs r1, r0                                   |     r1 = r0;
    0x000539aa movs r0, r0                                   |     
    0x000539ac movs r0, r0                                   |     
    0x000539ae movs r0, r0                                   |     
    0x000539b0 str r6, [r6, 0x14]                            |     *((r6 + 0x14)) = r6;
    0x000539b2 movs r5, r0                                   |     r5 = r0;
    0x000539b4 lsls r0, r2, 0x1a                             |     r0 = r2 << 0x1a;
    0x000539b6 movs r0, r0                                   |     
    0x000539b8 ldrsh r6, [r0, r6]                            |     r6 = *((r0 + r6));
    0x000539ba movs r5, r0                                   |     r5 = r0;
                                                             | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/sbin/sshd @ 0x539bc */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.000539bc ()                                      | void fcn_000539bc (int16_t arg1, int16_t arg2, int16_t arg3) {
                                                                 |     int16_t var_0h;
                                                                 |     int16_t var_4h;
                                                                 |     int16_t var_8h;
                                                                 |     int16_t var_ch;
                                                                 |     int16_t var_10h;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_34h;
                                                                 |     r0 = arg1;
                                                                 |     r1 = arg2;
                                                                 |     r2 = arg3;
    0x000539bc svcmi 0xf0e92d                                    |     __asm ("svcmi aav.0x000000ff");
    0x000539c0 sub sp, 0x3c                                      |     
    0x000539c2 ldr.w r6, [pc, 0x450]                             |     
    0x000539c6 mov r4, r0                                        |     r4 = r0;
    0x000539c8 mov r7, r1                                        |     r7 = r1;
    0x000539ca ldr.w r5, [pc, 0x44c]                             |     r5 = *(0x53e1a);
    0x000539ce ldr.w r3, [r0, 0x568]                             |     r3 = *(var_0hx568);
    0x000539d2 add r6, pc                                        |     r6 = 0xa77ec;
    0x000539d4 ldr r5, [r6, r5]                                  |     
    0x000539d6 cmp.w r3, 0x400                                   |     
    0x000539da ldr r5, [r5]                                      |     r5 = *(0xa77ec);
    0x000539dc str r5, [sp, 0x34]                                |     var_34h = r5;
    0x000539de mov.w r5, 0                                       |     r5 = 0;
    0x000539e2 str r2, [sp, 8]                                   |     var_8h = r2;
                                                                 |     if (r3 < 0x400) {
    0x000539e4 bls.w 0x53ba8                                     |         goto label_3;
                                                                 |     }
    0x000539e8 ubfx r3, r3, 0, 0xa                               |     r3 = (r3 >> 0) & ((1 << 0xa) - 1);
    0x000539ec cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x000539ee bne.w 0x53b92                                     |         goto label_4;
                                                                 |     }
                                                                 | label_1:
    0x000539f2 add.w r6, r4, 0x4b8                               |     r6 = r4 + 0x4b8;
    0x000539f6 add.w fp, r4, 0x558                               |     
    0x000539fa mov r8, r7                                        |     r8 = r7;
    0x000539fc mov sl, r4                                        |     sl = r4;
    0x000539fe add.w r5, r4, 0x4d8                               |     r5 = r4 + 0x4d8;
    0x00053a02 str r7, [sp, 0xc]                                 |     var_ch = r7;
    0x00053a04 str r5, [sp, 4]                                   |     var_4h = r5;
                                                                 |     do {
    0x00053a06 ldrd r2, r1, [r6]                                 |         __asm ("ldrd r2, r1, [r6]");
    0x00053a0a adds r6, 8                                        |         r6 += 8;
    0x00053a0c cmn.w r2, 0x3b                                    |         
    0x00053a10 sbcs r3, r1, -1                                   |         __asm ("sbcs r3, r1, -1");
                                                                 |         if (r2 >= 0x3b) {
    0x00053a14 bhs.w 0x53b82                                     |             goto label_5;
                                                                 |         }
    0x00053a18 uxth r3, r2                                       |         r3 = (int16_t) r2;
    0x00053a1a mov.w ip, 0                                       |         
                                                                 | label_0:
    0x00053a1e ldr r4, [r5, 0x1c]                                |         r4 = *((r5 + 0x1c));
    0x00053a20 lsr.w sb, r1, 0x10                                |         sb = r1 >> 0x10;
    0x00053a24 ldr r0, [r5, 0x18]                                |         r0 = *((r5 + 0x18));
    0x00053a26 uxth r1, r1                                       |         r1 = (int16_t) r1;
    0x00053a28 ldr r7, [r5, 8]                                   |         r7 = *((r5 + 8));
    0x00053a2a lsrs r2, r2, 0x10                                 |         r2 >>= 0x10;
    0x00053a2c mul r4, r3, r4                                    |         r4 = r3 * r4;
    0x00053a30 mla r4, ip, r0, r4                                |         __asm ("mla r4, ip, r0, r4");
    0x00053a34 umull r3, r0, r0, r3                              |         r3:r0 = r0 * r3;
    0x00053a38 add r4, r0                                        |         r4 += r0;
    0x00053a3a ldr r0, [r5]                                      |         r0 = *(r5);
    0x00053a3c umull ip, r0, r0, sb                              |         ip:r0 = r0 * sb;
    0x00053a40 adds.w r3, ip, r3                                 |         r3 = ip + r3;
    0x00053a44 umull lr, ip, r7, r1                              |         lr:ip = r7 * r1;
    0x00053a48 ldr r7, [r5, 4]                                   |         r7 = *((r5 + 4));
    0x00053a4a mla r0, sb, r7, r0                                |         __asm ("mla r0, sb, r7, r0");
    0x00053a4c movs r7, r0                                       |         r7 = r0;
    0x00053a4e adc.w sb, r0, r4                                  |         __asm ("adc.w sb, r0, r4");
    0x00053a52 ldr r0, [r5, 0x10]                                |         r0 = *((r5 + 0x10));
    0x00053a54 adds.w r3, r3, lr                                 |         r3 += lr;
    0x00053a58 umull lr, r4, r0, r2                              |         lr:r4 = r0 * r2;
    0x00053a5c ldr r0, [r5, 0xc]                                 |         r0 = *((r5 + 0xc));
    0x00053a5e mla ip, r1, r0, ip                                |         __asm ("mla ip, r1, r0, ip");
    0x00053a62 ldr r0, [r5, 0x14]                                |         r0 = *((r5 + 0x14));
    0x00053a64 mla r4, r2, r0, r4                                |         __asm ("mla r4, r2, r0, r4");
    0x00053a68 adc.w ip, ip, sb                                  |         __asm ("adc.w ip, ip, sb");
    0x00053a6c adds.w lr, r3, lr                                 |         lr = r3 + lr;
    0x00053a70 mvn r2, 5                                         |         r2 = ~5;
    0x00053a74 adc.w r4, r4, ip                                  |         __asm ("adc.w r4, r4, ip");
    0x00053a78 lsrs r3, r4, 4                                    |         r3 = r4 >> 4;
    0x00053a7a and r4, r4, 0xf                                   |         r4 &= 0xf;
    0x00053a7e lsls r1, r3, 2                                    |         r1 = r3 << 2;
    0x00053a80 adds r1, r1, r3                                   |         r1 += r3;
    0x00053a82 mov.w r3, 0                                       |         r3 = 0;
    0x00053a86 adcs r3, r3                                       |         __asm ("adcs r3, r3");
    0x00053a88 adds.w lr, r1, lr                                 |         lr = r1 + lr;
    0x00053a8a lsrs r6, r1, 0x18                                 |         r6 = r1 >> 0x18;
    0x00053a8c adc.w r3, r3, r4                                  |         __asm ("adc.w r3, r3, r4");
    0x00053a90 cmp r2, lr                                        |         
    0x00053a92 mov.w r2, 0xf                                     |         r2 = 0xf;
    0x00053a96 sbcs.w r3, r2, r3                                 |         __asm ("sbcs.w r3, r2, r3");
                                                                 |         if (r2 < lr) {
    0x00053a9a bhs 0x53aa0                                       |             
    0x00053a9c adds.w lr, lr, 5                                  |             lr += 5;
                                                                 |         }
    0x00053aa0 ldr r1, [fp], 4                                   |         r1 = *(fp);
                                                                 |         fp += 4;
    0x00053aa4 mov r0, r8                                        |         r0 = r8;
    0x00053aa6 adds r5, 0x20                                     |         r5 += 0x20;
    0x00053aa8 add.w r8, r8, 4                                   |         r8 += 4;
    0x00053aac eor.w r1, r1, lr                                  |         r1 ^= lr;
    0x00053ab0 bl 0x4d47c                                        |         fcn_0004d47c (r0, r1);
    0x00053ab4 ldr r3, [sp, 4]                                   |         r3 = var_4h;
    0x00053ab6 cmp r3, r6                                        |         
    0x00053ab8 bne 0x53a06                                       |         
                                                                 |     } while (r3 != r6);
    0x00053aba ldr r7, [sp, 0xc]                                 |     r7 = var_ch;
    0x00053abc mov r4, sl                                        |     r4 = sl;
                                                                 | label_2:
    0x00053abe vmov.i32 d16, 0                                   |     __asm ("vmov.i32 d16, 0");
    0x00053ac2 movs r1, 0                                        |     r1 = 0;
    0x00053ac4 add.w r3, r4, 0x480                               |     r3 = r4 + 0x480;
    0x00053ac8 str.w r1, [r4, 0x474]                             |     __asm ("str.w r1, aav.0x000000ff");
    0x00053acc str.w r1, [r4, 0x470]                             |     __asm ("str.w r1, aav.0x000000ff");
    0x00053ad0 movs r0, 1                                        |     r0 = 1;
    0x00053ad2 vstr d16, [r3, -8]                                |     __asm ("vstr d16, [r3, -8]");
    0x00053ad6 add.w r2, r4, 0x4c0                               |     r2 = r4 + 0x4c0;
    0x00053ada vstr d16, [r3]                                    |     __asm ("vstr d16, [r3]");
    0x00053adc lsrs r0, r0, 0xc                                  |     r0 >>= 0xc;
    0x00053ade add.w r3, r4, 0x490                               |     r3 = r4 + 0x490;
    0x00053ae2 vstr d16, [r3, -8]                                |     __asm ("vstr d16, [r3, -8]");
    0x00053ae6 add.w r5, r4, 0x570                               |     r5 = r4 + 0x570;
    0x00053aea vstr d16, [r3]                                    |     __asm ("vstr d16, [r3]");
    0x00053aee add.w r3, r4, 0x4d0                               |     r3 = r4 + 0x4d0;
    0x00053af2 str.w r1, [r4, 0x568]                             |     __asm ("str.w r1, aav.0x000000ff");
    0x00053af6 movs r1, 0                                        |     r1 = 0;
    0x00053af8 strd r0, r1, [r2, -0x8]                           |     __asm ("strd r0, r1, [r2, -0x8]");
    0x00053afc strd r0, r1, [r2]                                 |     __asm ("strd r0, r1, [r2]");
    0x00053b00 strd r0, r1, [r3, -0x8]                           |     __asm ("strd r0, r1, [r3, -0x8]");
    0x00053b02 lsls r2, r0, 4                                    |     r2 = r0 << 4;
    0x00053b04 strd r0, r1, [r3]                                 |     __asm ("strd r0, r1, [r3]");
    0x00053b08 ldr r1, [sp, 8]                                   |     r1 = var_8h;
    0x00053b0a ldr.w r2, [r4, 0x584]                             |     r2 = *((r4 + 0x584));
    0x00053b0e ldr r3, [r1, 4]                                   |     r3 = *((r1 + 4));
    0x00053b10 cmp r3, r2                                        |     
                                                                 |     if (r3 != r2) {
    0x00053b12 bne 0x53ba4                                       |         goto label_6;
                                                                 |     }
    0x00053b14 ldr r2, [sp, 8]                                   |     r2 = var_8h;
    0x00053b16 ldr.w r1, [r4, 0x580]                             |     r1 = *((r4 + 0x580));
    0x00053b1a ldr r2, [r2]                                      |     r2 = *(r2);
    0x00053b1c cmp r2, r1                                        |     
    0x00053b1e it eq                                             |     
                                                                 |     if (r2 != r1) {
    0x00053b20 addeq r6, r4, 0x580                               |         r6 = r4 + 0x580;
                                                                 |     }
    0x00053b24 beq 0x53b3e                                       |     
                                                                 |     while (1) {
    0x00053b26 add.w r6, r4, 0x580                               |         r6 = r4 + 0x580;
    0x00053b2a str.w r2, [r4, 0x580]                             |         __asm ("str.w r2, aav.0x000000ff");
    0x00053b2e mov r1, r5                                        |         r1 = r5;
    0x00053b30 add.w r2, r4, 0x590                               |         r2 = r4 + 0x590;
    0x00053b34 mov r0, r6                                        |         r0 = r6;
    0x00053b36 str.w r3, [r4, 0x584]                             |         __asm ("str.w r3, aav.0x000000ff");
    0x00053b3a blx 0x540c                                        |         printf_chk ()
    0x00053b3e ldr.w r2, [r4, 0x570]                             |         r2 = *((r4 + 0x570));
    0x00053b42 ldr r3, [r7]                                      |         r3 = *(r7);
    0x00053b44 ldr r1, [r5, 4]                                   |         r1 = *((r5 + 4));
    0x00053b46 eors r3, r2                                       |         r3 ^= r2;
    0x00053b48 ldr r2, [r7, 8]                                   |         r2 = *((r7 + 8));
    0x00053b4a str r3, [r7]                                      |         *(r7) = r3;
    0x00053b4c ldr r3, [r7, 4]                                   |         r3 = *((r7 + 4));
    0x00053b4e eors r3, r1                                       |         r3 ^= r1;
    0x00053b50 str r3, [r7, 4]                                   |         *((r7 + 4)) = r3;
    0x00053b52 ldr r1, [r6, -0x8]                                |         r1 = *((r6 - 0x8));
    0x00053b56 ldr r3, [r7, 0xc]                                 |         r3 = *((r7 + 0xc));
    0x00053b58 eors r2, r1                                       |         r2 ^= r1;
    0x00053b5a ldr r1, [r6, -0x4]                                |         r1 = *((r6 - 0x4));
    0x00053b5e str r2, [r7, 8]                                   |         *((r7 + 8)) = r2;
    0x00053b60 ldr r2, [pc, 0x2b8]                               |         
    0x00053b62 eors r3, r1                                       |         r3 ^= r1;
    0x00053b64 str r3, [r7, 0xc]                                 |         *((r7 + 0xc)) = r3;
    0x00053b66 ldr r3, [pc, 0x2b0]                               |         r3 = *(0x53e1a);
    0x00053b68 add r2, pc                                        |         r2 = 0xa7988;
    0x00053b6a ldr r3, [r2, r3]                                  |         r3 = *(0xa7988);
    0x00053b6c ldr r2, [r3]                                      |         r2 = *(0xa7988);
    0x00053b6e ldr r3, [sp, 0x34]                                |         r3 = var_34h;
    0x00053b70 eors r2, r3                                       |         r2 ^= r3;
    0x00053b72 mov.w r3, 0                                       |         r3 = 0;
                                                                 |         if (r2 != r3) {
    0x00053b76 bne.w 0x53e0e                                     |             goto label_7;
                                                                 |         }
    0x00053b7a movs r0, 1                                        |         r0 = 1;
    0x00053b7c add sp, 0x3c                                      |         
    0x00053b7e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |         
                                                                 | label_5:
    0x00053b82 adds r2, 0x3b                                     |         r2 += 0x3b;
    0x00053b84 adc r1, r1, 0                                     |         __asm ("adc r1, r1, 0");
    0x00053b86 lsls r0, r0, 4                                    |         r0 <<= 4;
    0x00053b88 mov r3, r2                                        |         r3 = r2;
    0x00053b8a mov ip, r1                                        |         
    0x00053b8c strd r2, r1, [r6, -0x8]                           |         __asm ("strd r2, r1, [r6, -0x8]");
    0x00053b90 b 0x53a1e                                         |         goto label_0;
                                                                 | label_4:
    0x00053b92 add r5, sp, 0x10                                  |         r5 += var_10h;
    0x00053b94 mov r1, r5                                        |         r1 = r5;
    0x00053b96 bl 0x53614                                        |         fcn_00053614 (r0, r1);
    0x00053b9a mov r1, r5                                        |         r1 = r5;
    0x00053b9c mov r0, r4                                        |         r0 = r4;
    0x00053b9e bl 0x53470                                        |         fcn_00053470 (r0, r1, r2);
    0x00053ba2 b 0x539f2                                         |         goto label_1;
                                                                 | label_6:
    0x00053ba4 ldr r2, [r1]                                      |         r2 = *(r1);
    0x00053ba6 b 0x53b26                                         |         
                                                                 |     }
                                                                 | label_3:
    0x00053ba8 add r1, sp, 0x10                                  |     r1 += var_10h;
    0x00053baa bl 0x53614                                        |     fcn_00053614 (r0, r1);
    0x00053bae ldrd r6, r3, [sp, 0x10]                           |     __asm ("ldrd r6, r3, [var_10h]");
    0x00053bb2 ldr.w r1, [r4, 0x4e0]                             |     r1 = *((r4 + 0x4e0));
    0x00053bb6 ldr.w r0, [r4, 0x4d8]                             |     r0 = *((r4 + 0x4d8));
    0x00053bba ldr.w r5, [r4, 0x4dc]                             |     r5 = *((r4 + 0x4dc));
    0x00053bbe uxth.w sl, r3                                     |     sl = (int16_t) r3;
    0x00053bc2 lsr.w r8, r3, 0x10                                |     r8 = r3 >> 0x10;
    0x00053bc6 lsr.w lr, r6, 0x10                                |     lr = r6 >> 0x10;
    0x00053bca uxth.w ip, r6                                     |     ip = (int16_t) r6;
    0x00053bce umull sb, r1, r1, sl                              |     sb:r1 = r1 * sl;
    0x00053bd2 ldr.w r3, [r4, 0x4e4]                             |     r3 = *((r4 + 0x4e4));
    0x00053bd6 ldr.w r2, [r4, 0x4e8]                             |     r2 = *((r4 + 0x4e8));
    0x00053bda umull r0, r6, r0, r8                              |     r0:r6 = r0 * r8;
    0x00053bde mla r1, sl, r3, r1                                |     __asm ("mla r1, sl, r3, r1");
    0x00053be2 ldr.w r3, [r4, 0x4f0]                             |     r3 = *((r4 + 0x4f0));
    0x00053be6 adds.w r0, sb, r0                                 |     r0 = sb + r0;
    0x00053be8 movs r0, r0                                       |     
    0x00053bea mla r5, r8, r5, r6                                |     __asm ("mla r5, r8, r5, r6");
    0x00053bee umull r2, r6, r2, lr                              |     r2:r6 = r2 * lr;
    0x00053bf2 adc.w r1, r1, r5                                  |     __asm ("adc.w r1, r1, r5");
    0x00053bf6 ldr.w r5, [r4, 0x4ec]                             |     r5 = *((r4 + 0x4ec));
    0x00053bfa adds r2, r2, r0                                   |     r2 += r0;
    0x00053bfc umull r3, r0, r3, ip                              |     r3:r0 = r3 * ip;
    0x00053c00 mla r5, lr, r5, r6                                |     __asm ("mla r5, lr, r5, r6");
    0x00053c04 mvn r6, 5                                         |     r6 = ~5;
    0x00053c08 adc.w r1, r5, r1                                  |     __asm ("adc.w r1, r5, r1");
    0x00053c0a lsls r1, r0, 4                                    |     r1 = r0 << 4;
    0x00053c0c adds r5, r3, r2                                   |     r5 = r3 + r2;
    0x00053c0e ldr.w r3, [r4, 0x4f4]                             |     r3 = *((r4 + 0x4f4));
    0x00053c12 mla r2, ip, r3, r0                                |     __asm ("mla r2, ip, r3, r0");
    0x00053c16 adc.w r2, r2, r1                                  |     __asm ("adc.w r2, r2, r1");
    0x00053c1a movs r1, 0                                        |     r1 = 0;
    0x00053c1c lsrs r0, r2, 4                                    |     r0 = r2 >> 4;
    0x00053c1e and r2, r2, 0xf                                   |     r2 &= 0xf;
    0x00053c22 lsls r3, r0, 2                                    |     r3 = r0 << 2;
    0x00053c24 adds r3, r3, r0                                   |     r3 += r0;
    0x00053c26 adcs r1, r1                                       |     __asm ("adcs r1, r1");
    0x00053c28 adds r3, r3, r5                                   |     r3 += r5;
    0x00053c2a adc.w r1, r1, r2                                  |     __asm ("adc.w r1, r1, r2");
    0x00053c2e movs r2, 0xf                                      |     r2 = 0xf;
    0x00053c30 cmp r6, r3                                        |     
    0x00053c32 sbcs r2, r1                                       |     __asm ("sbcs r2, r1");
                                                                 |     if (r6 < r3) {
    0x00053c34 bhs 0x53c38                                       |         
    0x00053c36 adds r3, 5                                        |         r3 += 5;
                                                                 |     }
    0x00053c38 ldr.w r1, [r4, 0x558]                             |     r1 = *((r4 + 0x558));
    0x00053c3c mov r0, r7                                        |     r0 = r7;
    0x00053c3e eors r1, r3                                       |     r1 ^= r3;
    0x00053c40 bl 0x4d47c                                        |     fcn_0004d47c (r0, r1);
    0x00053c44 ldrd r6, r3, [sp, 0x18]                           |     __asm ("ldrd r6, r3, [var_18h]");
    0x00053c48 ldr.w r1, [r4, 0x500]                             |     r1 = *((r4 + 0x500));
    0x00053c4c ldr.w r0, [r4, 0x4f8]                             |     r0 = *((r4 + 0x4f8));
    0x00053c50 ldr.w r5, [r4, 0x4fc]                             |     r5 = *((r4 + 0x4fc));
    0x00053c54 uxth.w sl, r3                                     |     sl = (int16_t) r3;
    0x00053c58 lsr.w r8, r3, 0x10                                |     r8 = r3 >> 0x10;
    0x00053c5c lsr.w lr, r6, 0x10                                |     lr = r6 >> 0x10;
    0x00053c60 uxth.w ip, r6                                     |     ip = (int16_t) r6;
    0x00053c64 umull sb, r1, r1, sl                              |     sb:r1 = r1 * sl;
    0x00053c68 ldr.w r3, [r4, 0x504]                             |     r3 = *((r4 + 0x504));
    0x00053c6c ldr.w r2, [r4, 0x508]                             |     r2 = *((r4 + 0x508));
    0x00053c70 umull r0, r6, r0, r8                              |     r0:r6 = r0 * r8;
    0x00053c72 lsls r0, r1, 0x18                                 |     r0 = r1 << 0x18;
    0x00053c74 mla r1, sl, r3, r1                                |     __asm ("mla r1, sl, r3, r1");
    0x00053c78 ldr.w r3, [r4, 0x510]                             |     r3 = *((r4 + 0x510));
    0x00053c7c adds.w r0, sb, r0                                 |     r0 = sb + r0;
    0x00053c80 mla r5, r8, r5, r6                                |     __asm ("mla r5, r8, r5, r6");
    0x00053c82 str r5, [r0, 0x50]                                |     *((r0 + 0x50)) = r5;
    0x00053c84 umull r2, r6, r2, lr                              |     r2:r6 = r2 * lr;
    0x00053c88 adc.w r1, r1, r5                                  |     __asm ("adc.w r1, r1, r5");
    0x00053c8c ldr.w r5, [r4, 0x50c]                             |     r5 = *((r4 + 0x50c));
    0x00053c90 adds r2, r2, r0                                   |     r2 += r0;
    0x00053c92 umull r3, r0, r3, ip                              |     r3:r0 = r3 * ip;
    0x00053c94 adds r0, 0xc                                      |     r0 += 0xc;
    0x00053c96 mla r5, lr, r5, r6                                |     __asm ("mla r5, lr, r5, r6");
    0x00053c9a mvn r6, 5                                         |     r6 = ~5;
    0x00053c9e adc.w r1, r5, r1                                  |     __asm ("adc.w r1, r5, r1");
    0x00053ca2 adds r5, r3, r2                                   |     r5 = r3 + r2;
    0x00053ca4 ldr.w r3, [r4, 0x514]                             |     r3 = *((r4 + 0x514));
    0x00053ca8 mla r2, ip, r3, r0                                |     __asm ("mla r2, ip, r3, r0");
    0x00053caa lsls r3, r0, 8                                    |     r3 = r0 << 8;
    0x00053cac adc.w r2, r2, r1                                  |     __asm ("adc.w r2, r2, r1");
    0x00053cb0 movs r1, 0                                        |     r1 = 0;
    0x00053cb2 lsrs r0, r2, 4                                    |     r0 = r2 >> 4;
    0x00053cb4 and r2, r2, 0xf                                   |     r2 &= 0xf;
    0x00053cb8 lsls r3, r0, 2                                    |     r3 = r0 << 2;
    0x00053cba adds r3, r3, r0                                   |     r3 += r0;
    0x00053cbc add.w r0, r7, 4                                   |     r0 = r7 + 4;
    0x00053cc0 adcs r1, r1                                       |     __asm ("adcs r1, r1");
    0x00053cc2 adds r3, r3, r5                                   |     r3 += r5;
    0x00053cc4 adc.w r1, r1, r2                                  |     __asm ("adc.w r1, r1, r2");
    0x00053cc8 movs r2, 0xf                                      |     r2 = 0xf;
    0x00053cca cmp r6, r3                                        |     
    0x00053ccc sbcs r2, r1                                       |     __asm ("sbcs r2, r1");
                                                                 |     if (r6 < r3) {
    0x00053cce bhs 0x53cd2                                       |         
    0x00053cd0 adds r3, 5                                        |         r3 += 5;
                                                                 |     }
    0x00053cd2 ldr.w r1, [r4, 0x55c]                             |     r1 = *((r4 + 0x55c));
    0x00053cd6 eors r1, r3                                       |     r1 ^= r3;
    0x00053cd8 bl 0x4d47c                                        |     fcn_0004d47c (r0, r1);
    0x00053cdc ldrd r6, r3, [sp, 0x20]                           |     __asm ("ldrd r6, r3, [var_20h]");
    0x00053ce0 ldr.w r1, [r4, 0x520]                             |     r1 = *((r4 + 0x520));
    0x00053ce4 ldr.w r0, [r4, 0x518]                             |     r0 = *((r4 + 0x518));
    0x00053ce8 ldr.w r5, [r4, 0x51c]                             |     r5 = *((r4 + 0x51c));
    0x00053cec uxth.w sl, r3                                     |     sl = (int16_t) r3;
    0x00053cf0 lsr.w r8, r3, 0x10                                |     r8 = r3 >> 0x10;
    0x00053cf4 lsr.w lr, r6, 0x10                                |     lr = r6 >> 0x10;
    0x00053cf8 uxth.w ip, r6                                     |     ip = (int16_t) r6;
    0x00053cfc umull sb, r1, r1, sl                              |     sb:r1 = r1 * sl;
    0x00053d00 ldr.w r3, [r4, 0x524]                             |     r3 = *((r4 + 0x524));
    0x00053d04 ldr.w r2, [r4, 0x528]                             |     r2 = *((r4 + 0x528));
    0x00053d08 umull r0, r6, r0, r8                              |     r0:r6 = r0 * r8;
    0x00053d0c mla r1, sl, r3, r1                                |     __asm ("mla r1, sl, r3, r1");
    0x00053d10 ldr.w r3, [r4, 0x530]                             |     r3 = *((r4 + 0x530));
    0x00053d14 adds.w r0, sb, r0                                 |     r0 = sb + r0;
    0x00053d16 movs r0, r0                                       |     
    0x00053d18 mla r5, r8, r5, r6                                |     __asm ("mla r5, r8, r5, r6");
    0x00053d1c umull r2, r6, r2, lr                              |     r2:r6 = r2 * lr;
    0x00053d20 adc.w r1, r1, r5                                  |     __asm ("adc.w r1, r1, r5");
    0x00053d24 ldr.w r5, [r4, 0x52c]                             |     r5 = *((r4 + 0x52c));
    0x00053d28 adds r2, r2, r0                                   |     r2 += r0;
    0x00053d2a umull r3, r0, r3, ip                              |     r3:r0 = r3 * ip;
    0x00053d2e mla r5, lr, r5, r6                                |     __asm ("mla r5, lr, r5, r6");
    0x00053d32 mvn r6, 5                                         |     r6 = ~5;
    0x00053d36 adc.w r1, r5, r1                                  |     __asm ("adc.w r1, r5, r1");
    0x00053d38 lsls r1, r0, 4                                    |     r1 = r0 << 4;
    0x00053d3a adds r5, r3, r2                                   |     r5 = r3 + r2;
    0x00053d3c ldr.w r3, [r4, 0x534]                             |     r3 = *((r4 + 0x534));
    0x00053d40 mla r2, ip, r3, r0                                |     __asm ("mla r2, ip, r3, r0");
    0x00053d44 adc.w r2, r2, r1                                  |     __asm ("adc.w r2, r2, r1");
    0x00053d48 movs r1, 0                                        |     r1 = 0;
    0x00053d4a lsrs r0, r2, 4                                    |     r0 = r2 >> 4;
    0x00053d4c and r2, r2, 0xf                                   |     r2 &= 0xf;
    0x00053d50 lsls r3, r0, 2                                    |     r3 = r0 << 2;
    0x00053d52 adds r3, r3, r0                                   |     r3 += r0;
    0x00053d54 add.w r0, r7, 8                                   |     r0 = r7 + 8;
    0x00053d58 adcs r1, r1                                       |     __asm ("adcs r1, r1");
    0x00053d5a adds r3, r3, r5                                   |     r3 += r5;
    0x00053d5c adc.w r1, r1, r2                                  |     __asm ("adc.w r1, r1, r2");
    0x00053d60 movs r2, 0xf                                      |     r2 = 0xf;
    0x00053d62 cmp r6, r3                                        |     
    0x00053d64 sbcs r2, r1                                       |     __asm ("sbcs r2, r1");
                                                                 |     if (r6 < r3) {
    0x00053d66 bhs 0x53d6a                                       |         
    0x00053d68 adds r3, 5                                        |         r3 += 5;
                                                                 |     }
    0x00053d6a ldr.w r1, [r4, 0x560]                             |     r1 = *((r4 + 0x560));
    0x00053d6e eors r1, r3                                       |     r1 ^= r3;
    0x00053d70 bl 0x4d47c                                        |     fcn_0004d47c (r0, r1);
    0x00053d74 ldrd r6, r3, [sp, 0x28]                           |     __asm ("ldrd r6, r3, [var_28h]");
    0x00053d78 ldr.w r1, [r4, 0x540]                             |     r1 = *((r4 + 0x540));
    0x00053d7c ldr.w r0, [r4, 0x538]                             |     r0 = *((r4 + 0x538));
    0x00053d80 ldr.w r5, [r4, 0x53c]                             |     r5 = *((r4 + 0x53c));
    0x00053d84 uxth.w sl, r3                                     |     sl = (int16_t) r3;
    0x00053d88 lsr.w sb, r3, 0x10                                |     sb = r3 >> 0x10;
    0x00053d8c lsr.w lr, r6, 0x10                                |     lr = r6 >> 0x10;
    0x00053d90 uxth.w ip, r6                                     |     ip = (int16_t) r6;
    0x00053d94 umull r8, r1, r1, sl                              |     r8:r1 = r1 * sl;
    0x00053d96 strh r2, [r1, 8]                                  |     *((r1 + 8)) = r2;
    0x00053d98 ldr.w r3, [r4, 0x544]                             |     r3 = *((r4 + 0x544));
    0x00053d9c ldr.w r2, [r4, 0x548]                             |     r2 = *((r4 + 0x548));
    0x00053da0 umull r0, r6, r0, sb                              |     r0:r6 = r0 * sb;
    0x00053da4 mla r1, sl, r3, r1                                |     __asm ("mla r1, sl, r3, r1");
    0x00053da8 ldr.w r3, [r4, 0x550]                             |     r3 = *((r4 + 0x550));
    0x00053dac adds.w r0, r8, r0                                 |     r0 = r8 + r0;
    0x00053db0 mla r5, sb, r5, r6                                |     __asm ("mla r5, sb, r5, r6");
    0x00053db4 umull r2, r6, r2, lr                              |     r2:r6 = r2 * lr;
    0x00053db6 movs r6, 0xe                                      |     r6 = 0xe;
    0x00053db8 adc.w r1, r1, r5                                  |     __asm ("adc.w r1, r1, r5");
    0x00053dbc ldr.w r5, [r4, 0x54c]                             |     r5 = *((r4 + 0x54c));
    0x00053dc0 adds r2, r2, r0                                   |     r2 += r0;
    0x00053dc2 umull r3, r0, r3, ip                              |     r3:r0 = r3 * ip;
    0x00053dc6 mla r5, lr, r5, r6                                |     __asm ("mla r5, lr, r5, r6");
    0x00053dca mvn r6, 5                                         |     r6 = ~5;
    0x00053dce adc.w r1, r5, r1                                  |     __asm ("adc.w r1, r5, r1");
    0x00053dd2 adds r5, r3, r2                                   |     r5 = r3 + r2;
    0x00053dd4 ldr.w r3, [r4, 0x554]                             |     r3 = *((r4 + 0x554));
    0x00053dd8 mla r2, ip, r3, r0                                |     __asm ("mla r2, ip, r3, r0");
    0x00053ddc adc.w r2, r2, r1                                  |     __asm ("adc.w r2, r2, r1");
    0x00053de0 movs r1, 0                                        |     r1 = 0;
    0x00053de2 lsrs r0, r2, 4                                    |     r0 = r2 >> 4;
    0x00053de4 and r2, r2, 0xf                                   |     r2 &= 0xf;
    0x00053de8 lsls r3, r0, 2                                    |     r3 = r0 << 2;
    0x00053dea adds r3, r3, r0                                   |     r3 += r0;
    0x00053dec add.w r0, r7, 0xc                                 |     r0 = r7 + 0xc;
    0x00053df0 adcs r1, r1                                       |     __asm ("adcs r1, r1");
    0x00053df2 adds r3, r3, r5                                   |     r3 += r5;
    0x00053df4 adc.w r1, r1, r2                                  |     __asm ("adc.w r1, r1, r2");
    0x00053df8 movs r2, 0xf                                      |     r2 = 0xf;
    0x00053dfa cmp r6, r3                                        |     
    0x00053dfc sbcs r2, r1                                       |     __asm ("sbcs r2, r1");
                                                                 |     if (r6 < r3) {
    0x00053dfe bhs 0x53e02                                       |         
    0x00053e00 adds r3, 5                                        |         r3 += 5;
                                                                 |     }
    0x00053e02 ldr.w r1, [r4, 0x564]                             |     r1 = *((r4 + 0x564));
    0x00053e06 eors r1, r3                                       |     r1 ^= r3;
    0x00053e08 bl 0x4d47c                                        |     fcn_0004d47c (r0, r1);
    0x00053e0c b 0x53abe                                         |     goto label_2;
                                                                 | label_7:
    0x00053e0e blx 0x5d1c                                        |     fcn_00005d1c ();
    0x00053e12 nop                                               |     
    0x00053e14 ldrsh r2, [r7, r4]                                |     r2 = *((r7 + r4));
    0x00053e16 movs r5, r0                                       |     r5 = r0;
    0x00053e18 lsls r0, r2, 0x1a                                 |     r0 = r2 << 0x1a;
    0x00053e1a movs r0, r0                                       |     
    0x00053e1c ldrb r4, [r4, r6]                                 |     r4 = *((r4 + r6));
    0x00053e1e movs r5, r0                                       |     r5 = r0;
                                                                 | }

[*] Function printf used 9 times sshd