[*] Binary protection state of libpaho-mqtt3c.so.1.3.9

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


[*] Function strcpy tear down of libpaho-mqtt3c.so.1.3.9

    ; assembly                                   | /* r2dec pseudo code output */
                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3c.so.1.3.9 @ 0xa3c8 */
                                                 | #include <stdint.h>
                                                 |  
    ; (fcn) fcn.0000a3c8 ()                      | void fcn_0000a3c8 (int16_t arg_70h, int16_t arg_100h, int16_t arg_120h, int16_t arg_1c0h, int16_t arg_200h, int16_t arg_310h, int16_t arg_370h, int16_t arg_380h, int16_t arg1) {
                                                 |     int16_t var_0h_4;
                                                 |     int16_t var_4h_4;
                                                 |     int16_t var_0h_2;
                                                 |     int16_t var_4h_2;
                                                 |     int16_t var_ch;
                                                 |     int16_t var_0h;
                                                 |     int16_t var_4h;
                                                 |     int16_t var_0h_3;
                                                 |     int16_t var_4h_3;
                                                 |     int16_t var_ch_2;
                                                 |     r0 = arg1;
                                                 |     do {
    0x0000a2ac mrsle r3, apsr                    |         __asm ("mrsle r3, apsr");
    0x0000a2b0 blx 0x2568                        |         r0 = fcn_00002568 ();
    0x0000a2b4 ldr r3, [r0]                      |         r3 = *(r0);
    0x0000a2b6 cmp r3, 0xb                       |         
    0x0000a2b8 str r3, [sp]                      |         *(sp) = r3;
                                                 |         if (r3 != 0xb) {
    0x0000a2ba bne 0xa302                        |             goto label_4;
                                                 |         }
    0x0000a2bc movw r0, 0x2710                   |         r0 = 0x2710;
    0x0000a2c0 adds r4, 1                        |         r4++;
    0x0000a2c2 blx 0x2438                        |         strcpy (r0, r1)
    0x0000a2c6 cmp r5, r4                        |         
                                                 |         if (r5 == r4) {
    0x0000a2c8 beq 0xa2d6                        |             goto label_5;
                                                 |         }
    0x0000a2ca mov r0, r6                        |         r0 = r6;
                                                 | label_1:
    0x0000a2cc blx 0x2368                        |         fcn_00002368 ();
    0x0000a2d0 str r0, [sp]                      |         *(sp) = r0;
    0x0000a2d2 cmp r0, 0                         |         
    0x0000a2d4 bne 0xa2ac                        |         
                                                 |     } while (r0 != 0);
                                                 |     do {
                                                 | label_5:
    0x0000a2d6 ldr r0, [pc, 0x40]                |         
    0x0000a2d8 movs r3, 3                        |         r3 = 3;
    0x0000a2da mov r2, sp                        |         r2 = sp;
    0x0000a2dc movw r1, 0x111                    |         r1 = 0x111;
    0x0000a2e0 add r0, pc                        |         r0 = 0x145fe;
    0x0000a2e2 adds r0, 0x50                     |         r0 += 0x50;
                                                 | label_0:
    0x0000a2e4 bl 0xece0                         |         fcn_0000ece0 (r0, r1, r2, r3);
    0x0000a2e8 ldr r2, [pc, 0x30]                |         
    0x0000a2ea ldr r3, [pc, 0x24]                |         r3 = *(0xa312);
    0x0000a2ec ldr r0, [sp]                      |         r0 = *(sp);
    0x0000a2ee add r2, pc                        |         r2 = 0x1460e;
    0x0000a2f0 ldr r3, [r2, r3]                  |         r3 = *(0x1460e);
    0x0000a2f2 ldr r2, [r3]                      |         r2 = *(0x1460e);
    0x0000a2f4 ldr r3, [sp, 4]                   |         r3 = var_4h;
    0x0000a2f6 eors r2, r3                       |         r2 ^= r3;
    0x0000a2f8 mov.w r3, 0                       |         r3 = 0;
                                                 |         if (r2 != r3) {
    0x0000a2fc bne 0xa308                        |             goto label_6;
                                                 |         }
    0x0000a2fe add sp, 8                         |         
    0x0000a300 pop {r4, r5, r6, pc}              |         
                                                 | label_4:
    0x0000a302 movs r3, 0                        |         r3 = 0;
    0x0000a304 str r3, [sp]                      |         *(sp) = r3;
    0x0000a306 b 0xa2d6                          |         
                                                 |     } while (1);
                                                 | label_6:
    0x0000a308 blx 0x2390                        |     pthread_cond_init ();
                                                 |     if (r3 < 0) {
    0x0000a30c blt 0xa3cc                        |         goto label_7;
                                                 |     }
    0x0000a30e movs r1, r0                       |     r1 = r0;
    0x0000a310 lsls r0, r5, 7                    |     r0 = r5 << 7;
    0x0000a312 movs r0, r0                       |     
    0x0000a314 add r3, sp, 0x100                 |     r3 += arg_100h;
    0x0000a316 movs r0, r0                       |     
    0x0000a318 add r2, sp, 0x380                 |     r2 += arg_380h;
    0x0000a31a movs r0, r0                       |     
                                                 |     if (r0 >= r0) {
    0x0000a31c bge 0xa2e4                        |         goto label_0;
                                                 |     }
    0x0000a31e movs r1, r0                       |     r1 = r0;
    0x0000a320 push {r3, lr}                     |     
    0x0000a322 blx 0x2368                        |     r0 = fcn_00002368 ();
    0x0000a326 clz r0, r0                        |     r0 &= r0;
    0x0000a32a lsrs r0, r0, 5                    |     r0 >>= 5;
    0x0000a32c pop {r3, pc}                      |     
                                                 |     do {
    0x0000a36e ldr r0, [pc, 0x50]                |         
    0x0000a370 movs r3, 3                        |         r3 = 3;
    0x0000a372 add r2, sp, 4                     |         r2 += var_4h_2;
    0x0000a374 movw r1, 0x145                    |         r1 = 0x145;
    0x0000a378 add r0, pc                        |         r0 = 0x1473e;
    0x0000a37a adds r0, 0x60                     |         r0 += 0x60;
    0x0000a37c bl 0xece0                         |         fcn_0000ece0 (r0, r1, r2, r3);
    0x0000a380 ldr r2, [pc, 0x40]                |         
    0x0000a382 ldr r3, [pc, 0x38]                |         r3 = *(0xa3be);
    0x0000a384 ldr r0, [sp, 4]                   |         r0 = var_4h_2;
    0x0000a386 add r2, pc                        |         r2 = 0x1474e;
    0x0000a388 ldr r3, [r2, r3]                  |         r3 = *(0x1474e);
    0x0000a38a ldr r2, [r3]                      |         r2 = *(0x1474e);
    0x0000a38c ldr r3, [sp, 0xc]                 |         r3 = var_4h_3;
    0x0000a38e eors r2, r3                       |         r2 ^= r3;
    0x0000a390 mov.w r3, 0                       |         r3 = 0;
                                                 |         if (r2 != r3) {
    0x0000a394 bne 0xa3ae                        |             goto label_8;
                                                 |         }
    0x0000a396 add sp, 0x14                      |         
    0x0000a398 pop {r4, r5, pc}                  |         
                                                 | label_2:
    0x0000a3ac b 0xa36e                          |         
                                                 |     } while (1);
                                                 | label_8:
    0x0000a3ae blx 0x2390                        |     pthread_cond_init ();
    0x0000a3b2 nop                               |     
    0x0000a3b4 add r2, sp, 0x200                 |     r2 += arg_200h;
    0x0000a3b6 movs r0, r0                       |     
                                                 |     if (r0 >= r0) {
    0x0000a3b8 bge 0xa2cc                        |         goto label_1;
                                                 |     }
    0x0000a3ba movs r1, r0                       |     r1 = r0;
    0x0000a3bc lsls r0, r5, 7                    |     r0 = r5 << 7;
    0x0000a3be movs r0, r0                       |     
    0x0000a3c0 add r2, sp, 0x120                 |     r2 += arg_120h;
    0x0000a3c2 movs r0, r0                       |     
                                                 |     if (r0 >= r0) {
    0x0000a3c4 bge 0xa45c                        |         goto label_9;
                                                 |     }
    0x0000a3c6 movs r1, r0                       |     r1 = r0;
    0x0000a3c8 ldr.w ip, [pc, 0x68]              |     ip = *(0x0000a434);
                                                 | label_7:
    0x0000a3cc movs r2, 3                        |     r2 = 3;
    0x0000a3ce push {r4, r5, lr}                 |     
    0x0000a3d0 mov r5, r0                        |     r5 = r0;
    0x0000a3d2 ldr r0, [pc, 0x64]                |     
    0x0000a3d4 sub sp, 0xc                       |     
    0x0000a3d6 add ip, pc                        |     
    0x0000a3d8 mov.w r1, 0x152                   |     r1 = 0x152;
    0x0000a3dc ldr r4, [pc, 0x5c]                |     
    0x0000a3de movs r3, 0                        |     r3 = 0;
    0x0000a3e0 ldr.w r0, [ip, r0]                |     r0 = *((ip + r0));
    0x0000a3e4 add r4, pc                        |     r4 = 0x14824;
    0x0000a3e6 adds r4, 0x70                     |     r4 += 0x70;
    0x0000a3e8 ldr r0, [r0]                      |     r0 = *(0xa43a);
    0x0000a3ea str r0, [sp, 4]                   |     var_4h_2 = r0;
    0x0000a3ec mov.w r0, 0                       |     r0 = 0;
    0x0000a3f0 mov r0, r4                        |     r0 = r4;
    0x0000a3f2 str r3, [sp]                      |     *(sp) = r3;
    0x0000a3f4 bl 0xec40                         |     fcn_0000ec40 (r0, r1, r2);
    0x0000a3f6 stc2 p6, c4, [r4], -0xa0          |     __asm ("stc2 p6, c4, [r4], -0xa0");
    0x0000a3fa blx 0x2768                        |     r0 = fcn_00002768 ();
    0x0000a3fe mov r3, r0                        |     r3 = r0;
    0x0000a400 mov r0, r5                        |     r0 = r5;
    0x0000a402 str r3, [sp]                      |     *(sp) = r3;
    0x0000a404 blx 0x22c4                        |     fgets (r0, r1, r2);
    0x0000a408 movs r3, 3                        |     r3 = 3;
    0x0000a40a mov r2, sp                        |     r2 = sp;
    0x0000a40c mov r0, r4                        |     r0 = r4;
    0x0000a40e movw r1, 0x15b                    |     r1 = 0x15b;
    0x0000a412 bl 0xece0                         |     fcn_0000ece0 (r0, r1, r2, r3);
    0x0000a416 ldr r2, [pc, 0x28]                |     
    0x0000a418 ldr r3, [pc, 0x1c]                |     r3 = *(0xa438);
    0x0000a41a ldr r0, [sp]                      |     r0 = *(sp);
    0x0000a41c add r2, pc                        |     r2 = 0x14862;
    0x0000a41e ldr r3, [r2, r3]                  |     r3 = *(0x14862);
    0x0000a420 ldr r2, [r3]                      |     r2 = *(0x14862);
    0x0000a422 ldr r3, [sp, 4]                   |     r3 = var_4h_2;
    0x0000a424 eors r2, r3                       |     r2 ^= r3;
    0x0000a426 mov.w r3, 0                       |     r3 = 0;
    0x0000a42a bne 0xa430                        |     
                                                 |     while (r2 < r3) {
    0x0000a42c add sp, 0xc                       |         
    0x0000a42e pop {r4, r5, pc}                  |         
    0x0000a430 blx 0x2390                        |         pthread_cond_init ();
    0x0000a434 bls 0xa42c                        |         
                                                 |     }
    0x0000a436 movs r1, r0                       |     r1 = r0;
    0x0000a438 lsls r0, r5, 7                    |     r0 = r5 << 7;
    0x0000a43a movs r0, r0                       |     
    0x0000a43c add r1, sp, 0x370                 |     r1 += arg_370h;
    0x0000a43e movs r0, r0                       |     
                                                 |     if (r0 < r0) {
    0x0000a440 bls 0xa3ac                        |         goto label_2;
                                                 |     }
    0x0000a442 movs r1, r0                       |     r1 = r0;
    0x0000a444 ldr r3, [pc, 0x84]                |     
    0x0000a446 movs r2, 3                        |     r2 = 3;
    0x0000a448 push {r4, r5, r6, lr}             |     
    0x0000a44a mov r4, r0                        |     r4 = r0;
    0x0000a44c ldr r5, [pc, 0x80]                |     r5 = *(0xa4d0);
    0x0000a44e sub sp, 8                         |     
    0x0000a450 add r3, pc                        |     r3 = 0x14920;
    0x0000a452 movw r1, 0x16b                    |     r1 = 0x16b;
    0x0000a456 add.w r0, r3, 0x84                |     r0 = r3 + 0x84;
    0x0000a45a ldr r3, [pc, 0x78]                |     r3 = *(0xa4d6);
                                                 | label_9:
    0x0000a45c add r5, pc                        |     r5 += pc;
    0x0000a45e mov r6, sp                        |     r6 = sp;
    0x0000a460 ldr r3, [r5, r3]                  |     r3 = *((r5 + r3));
    0x0000a462 ldr r3, [r3]                      |     r3 = *(r3);
    0x0000a464 str r3, [sp, 4]                   |     var_4h_2 = r3;
    0x0000a466 mov.w r3, 0                       |     r3 = 0;
    0x0000a468 lsls r0, r0, 0xc                  |     r0 <<= 0xc;
    0x0000a46a bl 0xec40                         |     fcn_0000ec40 (r0, r1, r2);
    0x0000a46e mov.w r3, -1                      |     r3 = -1;
    0x0000a472 mov r0, r6                        |     r0 = r6;
    0x0000a474 str r3, [r4]                      |     *(r4) = r3;
    0x0000a476 blx 0x239c                        |     unlink (r0);
    0x0000a47a movs r0, 0x48                     |     r0 = 0x48;
    0x0000a47c blx 0x24bc                        |     r0 = strftime (r0, r1, r2, r3);
    0x0000a480 mov r5, r0                        |     r5 = r0;
                                                 |     if (r0 != 0) {
    0x0000a482 cbz r0, 0xa49a                    |         
    0x0000a484 mov r1, r6                        |         r1 = r6;
    0x0000a486 blx 0x23a8                        |         r0 = realloc (r0, r1);
    0x0000a48a mov r3, r0                        |         r3 = r0;
    0x0000a48c movs r1, 0                        |         r1 = 0;
    0x0000a48e add.w r0, r5, 0x30                |         r0 = r5 + 0x30;
                                                 | label_3:
    0x0000a490 movs r0, r6                       |         r0 = r6;
    0x0000a492 str r3, [r4]                      |         *(r4) = r3;
    0x0000a494 blx 0x232c                        |         fcn_0000232c ();
    0x0000a498 str r0, [r4]                      |         *(r4) = r0;
                                                 |     }
    0x0000a49a ldr r0, [pc, 0x3c]                |     
    0x0000a49c movs r3, 3                        |     r3 = 3;
    0x0000a49e mov r2, r4                        |     r2 = r4;
    0x0000a4a0 mov.w r1, 0x180                   |     r1 = 0x180;
    0x0000a4a4 add r0, pc                        |     r0 = 0x14982;
    0x0000a4a6 adds r0, 0x84                     |     r0 += 0x84;
    0x0000a4a8 bl 0xece0                         |     fcn_0000ece0 (r0, r1, r2, r3);
    0x0000a4ac ldr r2, [pc, 0x2c]                |     
    0x0000a4ae ldr r3, [pc, 0x24]                |     r3 = *(0xa4d6);
    0x0000a4b0 add r2, pc                        |     r2 = 0x14990;
    0x0000a4b2 ldr r3, [r2, r3]                  |     r3 = *(0x14990);
    0x0000a4b4 ldr r2, [r3]                      |     r2 = *(0x14990);
    0x0000a4b6 ldr r3, [sp, 4]                   |     r3 = var_4h_2;
    0x0000a4b8 eors r2, r3                       |     r2 ^= r3;
    0x0000a4ba mov.w r3, 0                       |     r3 = 0;
                                                 |     if (r2 == r3) {
    0x0000a4be bne 0xa4c6                        |         
    0x0000a4c0 mov r0, r5                        |         r0 = r5;
    0x0000a4c2 add sp, 8                         |         
    0x0000a4c4 pop {r4, r5, r6, pc}              |         
                                                 |     }
    0x0000a4c6 blx 0x2390                        |     pthread_cond_init ();
    0x0000a4ca nop                               |     
    0x0000a4cc add r1, sp, 0x1c0                 |     r1 += arg_1c0h;
    0x0000a4ce movs r0, r0                       |     
                                                 |     if (r0 < r0) {
    0x0000a4d0 bls 0xa5bc                        |         goto label_10;
                                                 |     }
    0x0000a4d2 movs r1, r0                       |     r1 = r0;
    0x0000a4d4 lsls r0, r5, 7                    |     r0 = r5 << 7;
    0x0000a4d6 movs r0, r0                       |     
    0x0000a4d8 add r1, sp, 0x70                  |     r1 += arg_70h;
    0x0000a4da movs r0, r0                       |     
                                                 |     if (r0 < r0) {
    0x0000a4dc bls 0xa520                        |         goto label_11;
                                                 |     }
    0x0000a4de movs r1, r0                       |     r1 = r0;
    0x0000a4e0 push {r4, r5, r6, lr}             |     
    0x0000a4e2 mov r5, r0                        |     r5 = r0;
    0x0000a4e4 ldr r6, [pc, 0x6c]                |     
    0x0000a4e6 sub sp, 8                         |     
    0x0000a4e8 movs r2, 3                        |     r2 = 3;
    0x0000a4ea mov.w r1, 0x18c                   |     r1 = 0x18c;
    0x0000a4ee ldr r0, [pc, 0x68]                |     r0 = *(0xa55a);
    0x0000a4f0 movs r3, 0                        |     r3 = 0;
    0x0000a4f2 ldr r4, [pc, 0x68]                |     
    0x0000a4f4 add r6, pc                        |     r6 = 0x14a4c;
    0x0000a4f6 ldr r0, [r6, r0]                  |     
    0x0000a4f8 add.w r6, r5, 0x30                |     r6 = r5 + 0x30;
    0x0000a4fc add r4, pc                        |     r4 = 0x14a5e;
    0x0000a4fe adds r4, 0x98                     |     r4 += 0x98;
    0x0000a500 ldr r0, [r0]                      |     r0 = *(0x14a4c);
    0x0000a502 str r0, [sp, 4]                   |     var_4h_4 = r0;
    0x0000a504 mov.w r0, 0                       |     r0 = 0;
    0x0000a508 mov r0, r4                        |     r0 = r4;
    0x0000a50a str r3, [sp]                      |     *(sp) = r3;
    0x0000a50c bl 0xec40                         |     fcn_0000ec40 (r0, r1, r2);
                                                 |     do {
    0x0000a510 mov r0, r6                        |         r0 = r6;
    0x0000a512 blx 0x22e0                        |         fcn_000022e0 ();
    0x0000a516 mov r0, r5                        |         r0 = r5;
    0x0000a518 blx 0x2744                        |         r0 = sem_destroy ();
    0x0000a51c mov r3, r0                        |         r3 = r0;
    0x0000a51e mov r0, r6                        |         r0 = r6;
                                                 | label_11:
    0x0000a520 str r3, [sp]                      |         *(sp) = r3;
    0x0000a522 blx 0x2220                        |         fcn_00002220 ();
    0x0000a526 movs r3, 3                        |         r3 = 3;
    0x0000a528 mov r2, sp                        |         r2 = sp;
    0x0000a52a mov r0, r4                        |         r0 = r4;
    0x0000a52c movw r1, 0x191                    |         r1 = 0x191;
    0x0000a530 bl 0xece0                         |         fcn_0000ece0 (r0, r1, r2, r3);
    0x0000a534 ldr r2, [pc, 0x28]                |         
    0x0000a536 ldr r3, [pc, 0x20]                |         r3 = *(0xa55a);
    0x0000a538 ldr r0, [sp]                      |         r0 = *(sp);
    0x0000a53a add r2, pc                        |         r2 = 0x14a9e;
    0x0000a53c ldr r3, [r2, r3]                  |         r3 = *(0x14a9e);
    0x0000a53e ldr r2, [r3]                      |         r2 = *(0x14a9e);
    0x0000a540 ldr r3, [sp, 4]                   |         r3 = var_4h_2;
    0x0000a542 eors r2, r3                       |         r2 ^= r3;
    0x0000a544 mov.w r3, 0                       |         r3 = 0;
                                                 |         if (r2 == r3) {
    0x0000a548 bne 0xa54e                        |             
    0x0000a54a add sp, 8                         |             
    0x0000a54c pop {r4, r5, r6, pc}              |             
                                                 |         }
    0x0000a54e blx 0x2390                        |         pthread_cond_init ();
    0x0000a552 nop                               |         
    0x0000a554 bhi 0xa510                        |         
                                                 |     } while (r2 > r3);
    0x0000a556 movs r1, r0                       |     r1 = r0;
    0x0000a558 lsls r0, r5, 7                    |     r0 = r5 << 7;
    0x0000a55a movs r0, r0                       |     
    0x0000a55c add r0, sp, 0x310                 |     r0 += arg_310h;
    0x0000a55e movs r0, r0                       |     
                                                 |     if (r0 > r0) {
    0x0000a560 bhi 0xa490                        |         goto label_3;
                                                 |     }
    0x0000a562 movs r1, r0                       |     r1 = r0;
    0x0000a564 push {r4, r5, r6, r7, lr}         |     
    0x0000a566 mov r7, r1                        |     r7 = r1;
    0x0000a568 ldr r1, [pc, 0x80]                |     
    0x0000a56a sub sp, 0x14                      |     
    0x0000a56c movs r2, 3                        |     r2 = 3;
    0x0000a56e movs r6, 0                        |     r6 = 0;
    0x0000a570 ldr r4, [pc, 0x7c]                |     
    0x0000a572 mov r5, r0                        |     r5 = r0;
    0x0000a574 ldr r3, [pc, 0x7c]                |     r3 = *(0xa5f4);
    0x0000a576 add r1, pc                        |     r1 = 0x14b66;
    0x0000a578 add r4, pc                        |     r4 = 0x14b6c;
    0x0000a57a ldr r3, [r1, r3]                  |     
    0x0000a57c adds r4, 0xac                     |     r4 += 0xac;
    0x0000a57e mov.w r1, 0x19e                   |     r1 = 0x19e;
    0x0000a582 mov r0, r4                        |     r0 = r4;
    0x0000a584 ldr r3, [r3]                      |     r3 = *(0x14b66);
    0x0000a586 str r3, [sp, 0xc]                 |     var_ch_2 = r3;
    0x0000a588 mov.w r3, 0                       |     r3 = 0;
    0x0000a58c str r6, [sp]                      |     *(sp) = r6;
    0x0000a58e bl 0xec40                         |     fcn_0000ec40 (r0, r1, r2);
    0x0000a592 mov r0, r6                        |     r0 = r6;
    0x0000a594 add r6, sp, 4                     |     r6 += var_4h_3;
    0x0000a596 mov r1, r6                        |     r1 = r6;
    0x0000a598 blx 0x22ec                        |     fcn_000022ec ();
    0x0000a59c ldr r3, [sp, 4]                   |     r3 = var_4h_3;
    0x0000a59e add r3, r7                        |     r3 += r7;
    0x0000a5a0 add.w r7, r5, 0x30                |     r7 = r5 + 0x30;
    0x0000a5a4 mov r0, r7                        |     r0 = r7;
    0x0000a5a6 str r3, [sp, 4]                   |     var_4h_3 = r3;
    0x0000a5a8 blx 0x22e0                        |     fcn_000022e0 ();
    0x0000a5ac mov r2, r6                        |     r2 = r6;
    0x0000a5ae mov r1, r7                        |     r1 = r7;
    0x0000a5b0 mov r0, r5                        |     r0 = r5;
    0x0000a5b2 blx 0x2678                        |     r0 = strrchr (r0, r1);
    0x0000a5b6 mov r3, r0                        |     r3 = r0;
    0x0000a5b8 mov r0, r7                        |     r0 = r7;
    0x0000a5ba str r3, [sp]                      |     *(sp) = r3;
                                                 | label_10:
    0x0000a5bc blx 0x2220                        |     fcn_00002220 ();
    0x0000a5c0 movs r3, 3                        |     r3 = 3;
    0x0000a5c2 mov r2, sp                        |     r2 = sp;
    0x0000a5c4 mov r0, r4                        |     r0 = r4;
    0x0000a5c6 movw r1, 0x1ad                    |     r1 = 0x1ad;
    0x0000a5ca bl 0xece0                         |     fcn_0000ece0 (r0, r1, r2, r3);
    0x0000a5ce ldr r2, [pc, 0x28]                |     
    0x0000a5d0 ldr r3, [pc, 0x20]                |     r3 = *(0xa5f4);
    0x0000a5d2 ldr r0, [sp]                      |     r0 = *(sp);
    0x0000a5d4 add r2, pc                        |     r2 = 0x14bd2;
    0x0000a5d6 ldr r3, [r2, r3]                  |     r3 = *(0x14bd2);
    0x0000a5d8 ldr r2, [r3]                      |     r2 = *(0x14bd2);
    0x0000a5da ldr r3, [sp, 0xc]                 |     r3 = var_ch_2;
    0x0000a5dc eors r2, r3                       |     r2 ^= r3;
    0x0000a5de mov.w r3, 0                       |     r3 = 0;
                                                 |     if (r2 == r3) {
    0x0000a5e2 bne 0xa5e8                        |         
    0x0000a5e4 add sp, 0x14                      |         
    0x0000a5e6 pop {r4, r5, r6, r7, pc}          |         
                                                 |     }
    0x0000a5e8 blx 0x2390                        |     pthread_cond_init ();
                                                 |     if (r2 > r3) {
    0x0000a5ec bhi 0xa6a4                        |         void (*0xa6a4)() ();
                                                 |     }
    0x0000a5ee movs r1, r0                       |     r1 = r0;
    0x0000a5f0 add r0, sp, 0x120                 |     r0 += arg_120h;
    0x0000a5f2 movs r0, r0                       |     
                                                 |     do {
    0x0000a5f4 lsls r0, r5, 7                    |         r0 = r5 << 7;
    0x0000a5f6 movs r0, r0                       |         
    0x0000a5f8 bvc 0xa5f4                        |         __asm ("bvc 0xa5f4");
                                                 |     } while (1);
    0x0000a5fa movs r1, r0                       |     r1 = r0;
    0x0000a5fc push {r3, r4, r5, lr}             |     
    0x0000a5fe mov r4, r0                        |     r4 = r0;
    0x0000a600 adds r0, 0x30                     |     r0 += 0x30;
    0x0000a602 blx 0x22a8                        |     fcn_000022a8 ();
    0x0000a606 mov r0, r4                        |     r0 = r4;
    0x0000a608 blx 0x2408                        |     r0 = getsockopt ();
    0x0000a60c mov r5, r0                        |     r5 = r0;
    0x0000a60e mov r0, r4                        |     r0 = r4;
    0x0000a610 blx 0x22c4                        |     fgets (r0, r1, r2);
    0x0000a614 mov r0, r5                        |     r0 = r5;
    0x0000a616 pop {r3, r4, r5, pc}              |     
                                                 | }
    ; assembly                                                   | /* r2dec pseudo code output */
                                                                 | /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqtt3c.so.1.3.9 @ 0xe988 */
                                                                 | #include <stdint.h>
                                                                 |  
    ; (fcn) fcn.0000e988 ()                                      | void fcn_0000e988 (int16_t arg_48h, int16_t arg_10ch, int16_t arg_2d8h, int16_t arg1, int16_t arg3) {
                                                                 |     int16_t var_0h;
                                                                 |     int32_t var_4h;
                                                                 |     int32_t var_4h_2;
                                                                 |     int16_t var_ch;
                                                                 |     int32_t var_10h;
                                                                 |     int32_t var_10h_2;
                                                                 |     int16_t var_18h;
                                                                 |     int16_t var_20h;
                                                                 |     int16_t var_24h;
                                                                 |     int16_t var_28h;
                                                                 |     int16_t var_2ch;
                                                                 |     int16_t var_30h;
                                                                 |     int16_t var_34h;
                                                                 |     int8_t var_5h;
                                                                 |     int16_t var_38h;
                                                                 |     int16_t var_3ch;
                                                                 |     int16_t var_40h;
                                                                 |     int16_t var_44h;
                                                                 |     int8_t var_13h;
                                                                 |     int32_t var_0h_2;
                                                                 |     int16_t var_54h;
                                                                 |     r0 = arg1;
                                                                 |     r2 = arg3;
    0x0000e988 svcmi 0xf0e92d                                    |     __asm ("svcmi 0xf0e92d");
    0x0000e98c mov r7, r2                                        |     r7 = r2;
    0x0000e98e ldr r2, [pc, 0x1f8]                               |     
    0x0000e990 sub sp, 0x5c                                      |     
    0x0000e992 mov r4, r0                                        |     r4 = r0;
    0x0000e994 add.w ip, sp, 0x40                                |     
    0x0000e998 ldr r3, [pc, 0x1f0]                               |     r3 = *(0xeb8c);
    0x0000e99a mov.w sb, 0                                       |     sb = 0;
    0x0000e99e add r2, pc                                        |     r2 = 0x1d52c;
    0x0000e9a0 ldr.w fp, [pc, 0x1ec]                             |     fp = fcn.00007570;
    0x0000e9a4 mov r6, sb                                        |     r6 = sb;
    0x0000e9a6 mov r5, sb                                        |     r5 = sb;
    0x0000e9a8 ldr r3, [r2, r3]                                  |     
    0x0000e9aa mov r8, sb                                        |     r8 = sb;
    0x0000e9ac add fp, pc                                        |     
    0x0000e9ae ldr.w sl, [pc, 0x1e4]                             |     
    0x0000e9b2 add.w lr, fp, 0x48                                |     lr += arg_48h;
    0x0000e9b6 ldr r3, [r3]                                      |     r3 = *(0x1d52c);
    0x0000e9b8 str r3, [sp, 0x54]                                |     var_54h = r3;
    0x0000e9ba mov.w r3, 0                                       |     r3 = 0;
    0x0000e9be ldr r3, [pc, 0x1d8]                               |     
    0x0000e9c0 strd sb, sb, [sp, 0x2c]                           |     __asm ("strd sb, sb, [var_2ch]");
    0x0000e9c4 add sl, pc                                        |     sl = 0x1d55e;
    0x0000e9c6 add r3, pc                                        |     r3 = 0x1d564;
    0x0000e9c8 str r3, [sp, 0x24]                                |     var_24h = r3;
    0x0000e9ca ldr r3, [pc, 0x1d0]                               |     
    0x0000e9cc add r3, pc                                        |     r3 = 0x1d56e;
    0x0000e9ce str r3, [sp, 0x20]                                |     var_20h = r3;
    0x0000e9d0 ldm.w lr!, {r0, r1, r2, r3}                       |     r0 = *(lr!);
                                                                 |     r1 = *((lr! + 4));
                                                                 |     r2 = *((lr! + 8));
                                                                 |     r3 = *((lr! + 12));
    0x0000e9d4 stm.w ip!, {r0, r1, r2, r3}                       |     *(ip!) = r0;
                                                                 |     *((ip! + 4)) = r1;
                                                                 |     *((ip! + 8)) = r2;
                                                                 |     *((ip! + 12)) = r3;
    0x0000e9d8 add.w r0, fp, 0x10c                               |     r0 += arg_10ch;
    0x0000e9dc ldr.w r3, [lr]                                    |     r3 = *(lr);
    0x0000e9e0 movs r2, 3                                        |     r2 = 3;
    0x0000e9e2 movw r1, 0x5b3                                    |     r1 = 0x5b3;
    0x0000e9e6 str.w r3, [ip]                                    |     __asm ("str.w r3, [ip]");
    0x0000e9ea bl 0xec40                                         |     fcn_0000ec40 (r0, r1, r2);
    0x0000e9ee mov r2, sb                                        |     r2 = sb;
    0x0000e9f0 movs r3, 0x50                                     |     r3 = 0x50;
    0x0000e9f2 mov r0, r7                                        |     r0 = r7;
    0x0000e9f4 mov sb, r4                                        |     sb = r4;
    0x0000e9f6 add r1, sp, 0x28                                  |     r1 += var_28h;
    0x0000e9f8 bl 0xa618                                         |     fcn_0000a618 (r0, r1, r2, r3);
    0x0000e9fc ldr.w r3, [sb, 0x20]                              |     r3 = *((sb + 0x20));
    0x0000ea00 mov r2, r7                                        |     r2 = r7;
    0x0000ea02 mov r4, r2                                        |     r4 = r2;
    0x0000ea04 ldr.w fp, [sp, 0x20]                              |     fp = var_20h;
    0x0000ea08 ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x0000ea0a mov r7, r0                                        |     r7 = r0;
    0x0000ea0c cmp r3, 0                                         |     
                                                                 |     if (r3 == 0) {
    0x0000ea0e beq.w 0xeb62                                      |         goto label_4;
                                                                 |     }
                                                                 | label_2:
    0x0000ea12 mov r1, r5                                        |     r1 = r5;
    0x0000ea14 str r3, [sp, 0x18]                                |     var_18h = r3;
    0x0000ea16 str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x0000ea18 mov.w r3, -1                                      |     r3 = -1;
    0x0000ea1c movs r2, 1                                        |     r2 = 1;
    0x0000ea1e mov r0, r6                                        |     r0 = r6;
    0x0000ea20 strd r7, r4, [sp, 0x10]                           |     __asm ("strd r7, r4, [var_10h]");
    0x0000ea24 strd r7, r4, [sp, 4]                              |     __asm ("strd r7, r4, [var_4h]");
    0x0000ea28 str.w fp, [sp]                                    |     __asm ("str.w fp, [sp]");
    0x0000ea2c blx 0x2798                                        |     r0 = fcn_00002798 ();
    0x0000ea30 mov r5, r0                                        |     r5 = r0;
                                                                 | label_3:
    0x0000ea32 eor r3, r8, 1                                     |     r3 = r8 ^ 1;
    0x0000ea36 cmp r5, 0                                         |     
    0x0000ea38 ite le                                            |     
                                                                 |     if (r5 > 0) {
    0x0000ea3a movle r3, 0                                       |         r3 = 0;
                                                                 |     }
                                                                 |     if (r5 <= 0) {
    0x0000ea3c andgt r3, r3, 1                                   |         r3 &= 1;
                                                                 |     }
    0x0000ea40 cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0000ea42 bne 0xeb30                                        |         goto label_5;
                                                                 |     }
                                                                 | label_0:
    0x0000ea44 cmp.w r8, 0                                       |     
                                                                 |     if (r8 == 0) {
    0x0000ea48 beq.w 0xeb52                                      |         goto label_6;
                                                                 |     }
    0x0000ea4c ldr r2, [pc, 0x150]                               |     
    0x0000ea4e mov r3, r6                                        |     r3 = r6;
    0x0000ea50 mov.w r1, -1                                      |     r1 = -1;
    0x0000ea54 movs r0, 4                                        |     r0 = 4;
    0x0000ea56 mov r4, sb                                        |     r4 = sb;
    0x0000ea58 movw sb, 0xd090                                   |     
    0x0000ea5c add r2, pc                                        |     r2 = 0x1d600;
    0x0000ea5e movt sb, 3                                        |     sb = 0x3d090;
    0x0000ea62 bl 0x8980                                         |     fcn_00008980 (r0, r1);
    0x0000ea66 add r3, sp, 0x44                                  |     r3 += var_44h;
    0x0000ea68 add.w r8, sp, 0x2c                                |     r8 += var_2ch;
    0x0000ea6c ldm r3, {r0, r1, r2, r3}                          |     r0 = *(r3);
                                                                 |     r1 = *((r3 + 4));
                                                                 |     r2 = *((r3 + 8));
                                                                 |     r3 = *((r3 + 12));
    0x0000ea6e add r7, sp, 0x30                                  |     r7 += var_30h;
    0x0000ea70 add.w sl, sp, 0x34                                |     sl += var_34h;
    0x0000ea74 stm.w sp, {r0, r1, r2, r3}                        |     *(sp) = r0;
                                                                 |     *((sp + 4)) = r1;
                                                                 |     *((sp + 8)) = r2;
                                                                 |     *((sp + 12)) = r3;
    0x0000ea78 mov r2, r5                                        |     r2 = r5;
    0x0000ea7a ldr r3, [sp, 0x40]                                |     r3 = var_40h;
    0x0000ea7c mov r1, r6                                        |     r1 = r6;
    0x0000ea7e ldr r0, [r4]                                      |     r0 = *(r4);
    0x0000ea80 bl 0x7328                                         |     fcn_00007328 (r0, r1, r2, r3);
    0x0000ea84 ldr r0, [pc, 0x11c]                               |     
    0x0000ea86 mov r2, r6                                        |     r2 = r6;
    0x0000ea88 movw r1, 0x5e9                                    |     r1 = 0x5e9;
    0x0000ea8c add r0, pc                                        |     r0 = 0x1d634;
    0x0000ea8e bl 0xf284                                         |     fcn_0000f284 (r0, r1, r2);
    0x0000ea92 add r0, sp, 0x38                                  |     r0 += var_38h;
    0x0000ea94 blx 0x2344                                        |     fcn_00002344 ();
    0x0000ea98 ldr r3, [sp, 0x38]                                |     r3 = var_38h;
    0x0000ea9a adds r3, 0xa                                      |     r3 += 0xa;
    0x0000ea9c str r3, [sp, 0x38]                                |     var_38h = r3;
    0x0000ea9e b 0xeab4                                          |     
                                                                 |     while (r3 == 0) {
    0x0000eaa0 mov r0, sl                                        |         r0 = sl;
    0x0000eaa2 blx 0x2344                                        |         fcn_00002344 ();
    0x0000eaa6 ldrd r2, r3, [sp, 0x34]                           |         __asm ("ldrd r2, r3, [var_34h]");
    0x0000eaaa cmp r2, r3                                        |         
                                                                 |         if (r2 > r3) {
    0x0000eaac bgt 0xeae2                                        |             goto label_7;
                                                                 |         }
    0x0000eaae mov r0, sb                                        |         r0 = sb;
    0x0000eab0 blx 0x2438                                        |         strcpy (r0, r1)
    0x0000eab4 mov r3, r8                                        |         r3 = r8;
    0x0000eab6 ldr r0, [r4]                                      |         r0 = *(r4);
    0x0000eab8 mov r2, r7                                        |         r2 = r7;
    0x0000eaba movs r1, 0xc                                      |         r1 = 0xc;
    0x0000eabc bl 0x7158                                         |         fcn_00007158 (r0, r1, r2, r3);
    0x0000eac0 ldr r3, [sp, 0x30]                                |         r3 = var_30h;
    0x0000eac2 mov r5, r0                                        |         r5 = r0;
    0x0000eac4 cmp r3, 0                                         |         
    0x0000eac6 beq 0xeaa0                                        |         
                                                                 |     }
    0x0000eac8 ldr r1, [pc, 0xdc]                                |     
    0x0000eaca movs r2, 0xc                                      |     r2 = 0xc;
    0x0000eacc add r1, pc                                        |     r1 = 0x1d678;
    0x0000eace blx 0x2738                                        |     r0 = close (r0);
                                                                 |     if (r0 != 0) {
    0x0000ead2 cbz r0, 0xeae8                                    |         
    0x0000ead4 ldr r1, [pc, 0xd4]                                |         
    0x0000ead6 movs r2, 0xc                                      |         r2 = 0xc;
    0x0000ead8 mov r0, r5                                        |         r0 = r5;
    0x0000eada add r1, pc                                        |         r1 = 0x1d68a;
    0x0000eadc blx 0x2738                                        |         r0 = close (r0);
                                                                 |         if (r0 == 0) {
    0x0000eae0 cbz r0, 0xeae8                                    |             goto label_8;
                                                                 |         }
                                                                 | label_7:
    0x0000eae2 mov.w r3, -1                                      |         r3 = -1;
    0x0000eae6 str r3, [sp, 0x2c]                                |         var_2ch = r3;
                                                                 |     }
                                                                 | label_8:
    0x0000eae8 add r5, sp, 0x3c                                  |     r5 += var_3ch;
    0x0000eaea movs r3, 1                                        |     r3 = 1;
    0x0000eaec str r3, [sp, 0x30]                                |     var_30h = r3;
                                                                 |     do {
    0x0000eaee movs r1, 1                                        |         r1 = 1;
    0x0000eaf0 ldr r0, [r4]                                      |         r0 = *(r4);
    0x0000eaf2 mov r3, r5                                        |         r3 = r5;
    0x0000eaf4 mov r2, r7                                        |         r2 = r7;
    0x0000eaf6 bl 0x7158                                         |         fcn_00007158 (r0, r1, r2, r3);
    0x0000eafa ldr r1, [sp, 0x30]                                |         r1 = var_30h;
    0x0000eafc cmp r1, 0                                         |         
    0x0000eafe bne 0xeaee                                        |         
                                                                 |     } while (r1 != 0);
                                                                 | label_1:
    0x0000eb00 ldr r0, [pc, 0xac]                                |     
    0x0000eb02 movs r3, 3                                        |     r3 = 3;
    0x0000eb04 mov r2, r8                                        |     r2 = r8;
    0x0000eb06 movw r1, 0x60e                                    |     r1 = 0x60e;
    0x0000eb0a add r0, pc                                        |     
    0x0000eb0c add.w r0, r0, 0x10c                               |     r0 = 0x1d7ca;
    0x0000eb10 bl 0xece0                                         |     fcn_0000ece0 (r0, r1, r2, r3);
    0x0000eb14 ldr r2, [pc, 0x9c]                                |     
    0x0000eb16 ldr r3, [pc, 0x74]                                |     r3 = *(0xeb8e);
    0x0000eb18 ldr r0, [sp, 0x2c]                                |     r0 = var_2ch;
    0x0000eb1a add r2, pc                                        |     r2 = 0x1d6d2;
    0x0000eb1c ldr r3, [r2, r3]                                  |     r3 = *(0x1d6d2);
    0x0000eb1e ldr r2, [r3]                                      |     r2 = *(0x1d6d2);
    0x0000eb20 ldr r3, [sp, 0x54]                                |     r3 = var_54h;
    0x0000eb22 eors r2, r3                                       |     r2 ^= r3;
    0x0000eb24 mov.w r3, 0                                       |     r3 = 0;
                                                                 |     if (r2 != r3) {
    0x0000eb28 bne 0xeb82                                        |         goto label_9;
                                                                 |     }
    0x0000eb2a add sp, 0x5c                                      |     
    0x0000eb2c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc}        |     
                                                                 | label_5:
    0x0000eb30 adds r5, 1                                        |     r5++;
    0x0000eb32 movw r1, 0x5de                                    |     r1 = 0x5de;
    0x0000eb36 mov r2, r5                                        |     r2 = r5;
    0x0000eb38 mov r0, sl                                        |     r0 = sl;
    0x0000eb3a bl 0xf14c                                         |     r0 = fcn_0000f14c (r0, r1, r2);
    0x0000eb3e mov r6, r0                                        |     r6 = r0;
    0x0000eb40 cmp r0, 0                                         |     
                                                                 |     if (r0 != 0) {
    0x0000eb42 bne.w 0xea44                                      |         goto label_0;
                                                                 |     }
    0x0000eb46 mvn r3, 0x62                                      |     r3 = ~0x62;
    0x0000eb4a add.w r8, sp, 0x2c                                |     r8 += var_2ch;
    0x0000eb4e str r3, [sp, 0x2c]                                |     var_2ch = r3;
    0x0000eb50 b 0xeb00                                          |     goto label_1;
                                                                 | label_6:
    0x0000eb52 ldr.w r3, [sb, 0x20]                              |     r3 = *((sb + 0x20));
    0x0000eb56 mov.w r8, 1                                       |     r8 = 1;
    0x0000eb5a ldr r2, [sp, 0x28]                                |     r2 = var_28h;
    0x0000eb5c cmp r3, 0                                         |     
                                                                 |     if (r3 != 0) {
    0x0000eb5e bne.w 0xea12                                      |         goto label_2;
                                                                 |     }
                                                                 | label_4:
    0x0000eb62 ldr r3, [sp, 0x24]                                |     r3 = var_24h;
    0x0000eb64 mov r1, r5                                        |     r1 = r5;
    0x0000eb66 str r2, [sp, 0xc]                                 |     var_ch = r2;
    0x0000eb68 mov r0, r6                                        |     r0 = r6;
    0x0000eb6a movs r2, 1                                        |     r2 = 1;
    0x0000eb6c strd r7, r4, [sp, 0x10]                           |     __asm ("strd r7, r4, [var_10h]");
    0x0000eb70 str r3, [sp]                                      |     *(sp) = r3;
    0x0000eb72 mov.w r3, -1                                      |     r3 = -1;
    0x0000eb76 strd r7, r4, [sp, 4]                              |     __asm ("strd r7, r4, [var_4h]");
    0x0000eb7a blx 0x2798                                        |     r0 = fcn_00002798 ();
    0x0000eb7e mov r5, r0                                        |     r5 = r0;
    0x0000eb80 b 0xea32                                          |     goto label_3;
                                                                 | label_9:
    0x0000eb82 blx 0x2390                                        |     pthread_cond_init ();
    0x0000eb86 nop                                               |     
    0x0000eb88 str r4, [sp, 0xc8]                                |     *(arg_48h) = r4;
    0x0000eb8a movs r1, r0                                       |     r1 = r0;
    0x0000eb8c lsls r0, r5, 7                                    |     r0 = r5 << 7;
    0x0000eb8e movs r0, r0                                       |     
    0x0000eb90 strb r0, [r6, 0x15]                               |     *((r6 + 0x15)) = r0;
    0x0000eb92 movs r0, r0                                       |     
    0x0000eb94 strb r4, [r0, 9]                                  |     *((r0 + 9)) = r4;
    0x0000eb96 movs r0, r0                                       |     
    0x0000eb98 strb r2, [r5, 0x13]                               |     var_13h = r2;
    0x0000eb9a movs r0, r0                                       |     
    0x0000eb9c strb r4, [r3, 0x12]                               |     *((r3 + 0x12)) = r4;
    0x0000eb9e movs r0, r0                                       |     
    0x0000eba0 strb r0, [r0, 0x12]                               |     *((r0 + 0x12)) = r0;
    0x0000eba2 movs r0, r0                                       |     
    0x0000eba4 strb r4, [r7, 5]                                  |     var_5h = r4;
    0x0000eba6 movs r0, r0                                       |     
    0x0000eba8 strb r0, [r6, 0x10]                               |     *((r6 + 0x10)) = r0;
    0x0000ebaa movs r0, r0                                       |     
    0x0000ebac strb r2, [r6, 0x10]                               |     *((r6 + 0x10)) = r2;
    0x0000ebae movs r0, r0                                       |     
    0x0000ebb0 strb r2, [r2, 0x10]                               |     *((r2 + 0x10)) = r2;
    0x0000ebb2 movs r0, r0                                       |     
    0x0000ebb4 str r2, [sp, 0x2d8]                               |     *(arg_2d8h) = r2;
    0x0000ebb6 movs r1, r0                                       |     r1 = r0;
                                                                 | }

[*] Function strcpy used 3 times libpaho-mqtt3c.so.1.3.9