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

  
  	Partial RELRO  No Canary found   NX disabled  DSO          No RPATH     No RUNPATH   No Symbols


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

    ; assembly                       | /* r2dec pseudo code output */
                                     | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqtt3c.so.1.3.9 @ 0x2940 */
                                     | #include <stdint.h>
                                     |  
    ; (fcn) entry.fini0 ()           | void entry_fini0 () {
    0x00002940 ldr r3, [pc, 0x68]    |     r3 = *(0x29ac);
    0x00002944 push {r4, lr}         |     
    0x00002948 ldr r4, [pc, 0x64]    |     r4 = *(0x29b0);
    0x0000294c add r3, pc, r3        |     r3 = pc + r3;
    0x00002950 ldrb r3, [r3]         |     r3 = *(r3);
    0x00002954 add r4, pc, r4        |     r4 = pc + r4;
    0x00002958 cmp r3, 0             |     
    0x0000295c popne {r4, pc}        |     
    0x00002960 ldr r3, [pc, 0x50]    |     r3 = *(0x29b4);
    0x00002964 ldr r3, [r4, r3]      |     r3 = *(0x29b0);
    0x00002968 cmp r3, 0             |     
                                     |     if (r3 != 0) {
    0x0000296c beq 0x297c            |         
    0x00002970 ldr r3, [pc, 0x44]    |         r3 = *(0x29b8);
    0x00002974 ldr r0, [pc, r3]      |         r0 = *(0x0000297c);
    0x00002978 bl 0x244c             |         cxa_finalize ();
                                     |     }
    0x0000297c bl 0x2884             |     entry0 ();
    0x00002980 ldr r3, [pc, 0x38]    |     r3 = *(0x29bc);
    0x00002984 ldr r3, [r4, r3]      |     r3 = *((r4 + r3));
    0x00002988 cmp r3, 0             |     
                                     |     if (r3 != 0) {
    0x0000298c beq 0x299c            |         
    0x00002990 ldr r0, [pc, 0x2c]    |         r0 = *(0x29c0);
    0x00002994 add r0, pc, r0        |         r0 = pc + r0;
    0x00002998 bl 0x2560             |         loc_imp_deregister_frame_info ();
                                     |     }
    0x0000299c ldr r3, [pc, 0x24]    |     r3 = "Error_removing_PUBCOMP_for_client_id__s_msgid__d_from_persistence";
    0x000029a0 mov r2, 1             |     r2 = 1;
    0x000029a4 add r3, pc, r3        |     r3 = pc + r3;
    0x000029a8 strb r2, [r3]         |     *(r3) = r2;
    0x000029ac pop {r4, pc}          |     
                                     | }
    ; assembly                                           | /* r2dec pseudo code output */
                                                         | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqtt3c.so.1.3.9 @ 0x2d94 */
                                                         | #include <stdint.h>
                                                         |  
    ; (fcn) fcn.00002d94 ()                              | void fcn_00002d94 (int32_t arg_40h, int32_t arg1) {
                                                         |     int32_t var_0h;
                                                         |     int32_t var_8h;
                                                         |     int32_t var_10h;
                                                         |     int32_t var_14h;
                                                         |     int32_t var_18h;
                                                         |     int32_t var_20h;
                                                         |     r0 = arg1;
    0x00002d94 push {r4, r5, r6, r7, r8, sb, sl, lr}     |     
    0x00002d98 ldr r1, [pc, 0x3ec]                       |     r1 = *(0x3188);
    0x00002d9c mov r7, r0                                |     r7 = r0;
    0x00002da0 ldr r0, [pc, 0x3e8]                       |     
    0x00002da4 sub sp, sp, 0x20                          |     
    0x00002da8 add r0, pc, r0                            |     r0 = pc + r0;
    0x00002dac mov r4, r2                                |     r4 = r2;
    0x00002db0 mov r5, r3                                |     r5 = r3;
    0x00002db4 mov r2, 3                                 |     r2 = 3;
    0x00002db8 mov r3, 0                                 |     r3 = 0;
    0x00002dbc add r0, r0, 0x49                          |     r0 = 0x31d5;
    0x00002dc0 str r3, [sp, 0x10]                        |     var_10h = r3;
    0x00002dc4 str r3, [sp, 0x14]                        |     var_14h = r3;
    0x00002dc8 ldr r6, [sp, 0x40]                        |     r6 = *(arg_40h);
    0x00002dcc bl 0x16b58                                |     fcn_00016b58 (r0, r1);
    0x00002dd0 orrs r3, r4, r5                           |     r3 = r4 | r5;
                                                         |     if (r3 != r4) {
    0x00002dd4 beq 0x2e10                                |         
    0x00002dd8 mov r2, 0x3e8                             |         r2 = 0x3e8;
    0x00002ddc mov r3, 0                                 |         r3 = 0;
    0x00002de0 mov r0, r4                                |         r0 = r4;
    0x00002de4 mov r1, r5                                |         r1 = r5;
    0x00002de8 bl 0x17b64                                |         fcn_00017b64 (r0, r1);
    0x00002dec mov r2, 0x3e8                             |         r2 = 0x3e8;
    0x00002df0 mov r3, 0                                 |         r3 = 0;
    0x00002df4 mov r1, r5                                |         r1 = r5;
    0x00002df8 str r0, [sp, 0x10]                        |         var_10h = r0;
    0x00002dfc mov r0, r4                                |         r0 = r4;
    0x00002e00 bl 0x17b64                                |         fcn_00017b64 (r0, r1);
    0x00002e04 mov r3, 0x3e8                             |         r3 = 0x3e8;
    0x00002e08 mul r1, r3, r2                            |         r1 = r3 * r2;
    0x00002e0c str r1, [sp, 0x14]                        |         var_14h = r1;
                                                         |     }
    0x00002e10 ldr r4, [pc, 0x37c]                       |     r4 = *(0x3190);
    0x00002e14 mov r3, r6                                |     r3 = r6;
    0x00002e18 add r4, pc, r4                            |     r4 = pc + r4;
    0x00002e1c add r2, r4, 0x28                          |     r2 = r4 + 0x28;
    0x00002e20 add r1, sp, 0x10                          |     r1 += var_10h;
    0x00002e24 mov r0, 0                                 |     r0 = 0;
    0x00002e28 bl 0xdfa8                                 |     fcn_0000dfa8 (r0, r1);
    0x00002e2c mov r8, 0                                 |     r8 = 0;
    0x00002e30 str r0, [r7]                              |     *(r7) = r0;
    0x00002e34 str r8, [r6]                              |     *(r6) = r8;
    0x00002e38 add r0, r4, 0x10                          |     r0 = r4 + 0x10;
    0x00002e3c bl 0x26b0                                 |     fcn_000026b0 ();
    0x00002e40 ldr r3, [r7]                              |     r3 = *(r7);
    0x00002e44 cmp r3, r8                                |     
    0x00002e48 bgt 0x2f24                                |     
                                                         |     while (r0 == 0) {
                                                         | label_0:
    0x00002e4c mov r4, 0                                 |         r4 = 0;
                                                         | label_1:
    0x00002e50 ldr r0, [pc, 0x340]                       |         
    0x00002e54 ldr r7, [pc, 0x340]                       |         
    0x00002e58 add r0, pc, r0                            |         r0 = pc + r0;
    0x00002e5c mov r2, 3                                 |         r2 = 3;
    0x00002e60 ldr r1, [pc, 0x338]                       |         r1 = *(0x319c);
    0x00002e64 add r0, r0, 0x5a                          |         r0 = 0x31ee;
    0x00002e68 add r5, sp, 0x18                          |         r5 += var_18h;
    0x00002e6c add r7, pc, r7                            |         r7 = pc + r7;
    0x00002e70 bl 0x16b58                                |         fcn_00016b58 (r0, r1);
    0x00002e74 add r7, r7, 0x60                          |         r7 = 0x31f8;
    0x00002e78 mov r0, r5                                |         r0 = r5;
    0x00002e7c bl 0x7524                                 |         fcn_00007524 (r0);
    0x00002e80 ldm r7, {r2, r3}                          |         r2 = *(r7);
                                                         |         r3 = *((r7 + 4));
    0x00002e84 ldm r5, {r0, r1}                          |         r0 = *(r5);
                                                         |         r1 = *((r5 + 4));
    0x00002e88 bl 0x7538                                 |         fcn_00007538 ();
    0x00002e8c ldr r3, [pc, 0x310]                       |         r3 = *(0x31a0);
    0x00002e90 ldr r2, [pc, r3]                          |         r2 = *(0x00002e98);
    0x00002e94 asr r3, r2, 0x1f                          |         r3 = r2 >> 0x1f;
    0x00002e98 cmp r0, r2                                |         
    0x00002e9c sbcs r3, r1, r3                           |         __asm ("sbcs r3, r1, r3");
                                                         |         if (r0 >= r2) {
    0x00002ea0 movlt r3, 0                               |             r3 = 0;
                                                         |         }
                                                         |         if (r0 >= r2) {
    0x00002ea4 movlt r2, r3                              |             r2 = r3;
                                                         |         }
                                                         |         if (r0 >= r2) {
    0x00002ea8 blt 0x2ed0                                |             
    0x00002eac add r8, sp, 8                             |             r8 += var_8h;
    0x00002eb0 mov r0, r8                                |             r0 = r8;
    0x00002eb4 bl 0x7524                                 |             r0 = fcn_00007524 (r0);
    0x00002eb8 ldm r8, {r0, r1}                          |             r0 = *(r8);
                                                         |             r1 = *((r8 + 4));
    0x00002ebc stm r7, {r0, r1}                          |             *(r7) = r0;
                                                         |             *((r7 + 4)) = r1;
    0x00002ec0 ldm r5, {r0, r1}                          |             r0 = *(r5);
                                                         |             r1 = *((r5 + 4));
    0x00002ec4 bl 0x8bcc                                 |             fcn_00008bcc ();
    0x00002ec8 mov r3, 0                                 |             r3 = 0;
    0x00002ecc mov r2, 1                                 |             r2 = 1;
                                                         |         }
    0x00002ed0 ldm r5, {r0, r1}                          |         r0 = *(r5);
                                                         |         r1 = *((r5 + 4));
    0x00002ed4 ldr r5, [pc, 0x2cc]                       |         r5 = *(0x31a4);
    0x00002ed8 bl 0x8e54                                 |         fcn_00008e54 ();
    0x00002edc mov r3, 3                                 |         r3 = 3;
    0x00002ee0 add r5, pc, r5                            |         r5 = pc + r5;
    0x00002ee4 mov r2, 0                                 |         r2 = 0;
    0x00002ee8 ldr r1, [pc, 0x2bc]                       |         r1 = *(0x31a8);
    0x00002eec add r0, r5, 0x5a                          |         r0 = r5 + 0x5a;
    0x00002ef0 bl 0x16c40                                |         fcn_00016c40 (r0, r1);
    0x00002ef4 ldr r0, [pc, 0x2b4]                       |         
    0x00002ef8 add r0, pc, r0                            |         r0 = pc + r0;
    0x00002efc add r0, r0, 0x10                          |         r0 = 0x31bc;
    0x00002f00 bl 0x27dc                                 |         fcn_000027dc ();
    0x00002f04 add r0, r5, 0x49                          |         r0 = r5 + 0x49;
    0x00002f08 mov r3, 3                                 |         r3 = 3;
    0x00002f0c mov r2, r6                                |         r2 = r6;
    0x00002f10 ldr r1, [pc, 0x29c]                       |         r1 = *(0x31b0);
    0x00002f14 bl 0x16c40                                |         fcn_00016c40 (r0, r1);
    0x00002f18 mov r0, r4                                |         r0 = r4;
    0x00002f1c add sp, sp, 0x20                          |         
    0x00002f20 pop {r4, r5, r6, r7, r8, sb, sl, pc}      |         
    0x00002f24 ldr r2, [pc, 0x28c]                       |         r2 = *(0x31b4);
    0x00002f28 mov r1, r7                                |         r1 = r7;
    0x00002f2c add r2, pc, r2                            |         r2 = pc + r2;
    0x00002f30 ldr r0, [r4]                              |         r0 = *(r4);
    0x00002f34 bl 0x139b4                                |         r0 = fcn_000139b4 (r0, r1);
    0x00002f38 cmp r0, 0                                 |         
    0x00002f3c beq 0x2e4c                                |         
                                                         |     }
    0x00002f40 ldr r3, [r4]                              |     r3 = *(r4);
    0x00002f44 ldr r3, [r3, 8]                           |     r3 = *((r3 + 8));
    0x00002f48 ldr r5, [r3, 8]                           |     r5 = *((r3 + 8));
    0x00002f4c cmp r5, 0                                 |     
                                                         |     if (r5 == 0) {
    0x00002f50 beq 0x2e4c                                |         goto label_0;
                                                         |     }
    0x00002f54 ldr ip, [r5, 0xc]                         |     ip = *((r5 + 0xc));
    0x00002f58 ldr r4, [pc, 0x25c]                       |     r4 = *(0x31b8);
    0x00002f5c ldrh r3, [ip, 0x10]                       |     r3 = *((ip + 0x10));
    0x00002f60 and r3, r3, 0x3c0                         |     r3 &= 0x3c0;
    0x00002f64 sub r2, r3, 0x40                          |     r2 = r3 - 0x40;
    0x00002f68 and r4, r4, r2                            |     r4 &= r2;
    0x00002f6c cmp r4, 0                                 |     
                                                         |     if (r4 == 0) {
    0x00002f70 streq r4, [r6]                            |         *(r6) = r4;
                                                         |         goto label_5;
                                                         |     }
                                                         |     if (r4 == 0) {
                                                         | label_5:
    0x00002f74 beq 0x2e50                                |         goto label_1;
                                                         |     }
    0x00002f78 cmp r3, 0xc0                              |     
    0x00002f7c add r1, ip, 0x1c                          |     r1 = ip + 0x1c;
                                                         |     if (r3 == 0xc0) {
    0x00002f80 bne 0x2f98                                |         
    0x00002f84 mov r0, r1                                |         r0 = r1;
    0x00002f88 bl 0x16400                                |         fcn_00016400 (r0);
                                                         | label_4:
    0x00002f8c str r0, [r6]                              |         *(r6) = r0;
    0x00002f90 mov r4, r8                                |         r4 = r8;
    0x00002f94 b 0x2e50                                  |         goto label_1;
                                                         |     }
    0x00002f98 mov r2, r6                                |     r2 = r6;
    0x00002f9c ldr r0, [ip, 0x8c]                        |     r0 = *((ip + 0x8c));
    0x00002fa0 bl 0x99e8                                 |     fcn_000099e8 (r0, r1);
    0x00002fa4 ldr r3, [r6]                              |     r3 = *(r6);
    0x00002fa8 cmn r3, 0x16                              |     
                                                         |     if (r3 != 0x16) {
    0x00002fac streq r8, [r6]                            |         *(r6) = r8;
                                                         |     }
    0x00002fb0 cmp r0, 0                                 |     
    0x00002fb4 mov r4, r0                                |     r4 = r0;
                                                         |     if (r0 == 0) {
    0x00002fb8 beq 0x2e4c                                |         goto label_0;
                                                         |     }
    0x00002fbc ldrb r3, [r0]                             |     r3 = *(r0);
    0x00002fc0 and r3, r3, 0xf0                          |     r3 &= 0xf0;
    0x00002fc4 cmp r3, 0x30                              |     
                                                         |     if (r3 == 0x30) {
    0x00002fc8 bne 0x2fdc                                |         
    0x00002fcc ldr r1, [r7]                              |         r1 = *(r7);
    0x00002fd0 bl 0x7d34                                 |         fcn_00007d34 (r0, r1);
                                                         | label_3:
    0x00002fd4 str r0, [r6]                              |         *(r6) = r0;
    0x00002fd8 b 0x2e4c                                  |         goto label_0;
                                                         |     }
    0x00002fdc cmp r3, 0x70                              |     
    0x00002fe0 cmpne r3, 0x40                            |     __asm ("cmpne r3, 0x40");
                                                         |     if (r3 != 0x70) {
    0x00002fe4 moveq r8, 1                               |         r8 = 1;
                                                         |     }
                                                         |     if (r3 == 0x70) {
    0x00002fe8 movne r8, 0                               |         r8 = 0;
                                                         |     }
                                                         |     if (r3 != 0x70) {
    0x00002fec bne 0x30d8                                |         goto label_6;
                                                         |     }
    0x00002ff0 mov lr, r0                                |     lr = r0;
    0x00002ff4 ldm lr!, {r0, r1, r2, r3}                 |     r0 = *(lr!);
                                                         |     r1 = *((lr! + 4));
                                                         |     r2 = *((lr! + 8));
                                                         |     r3 = *((lr! + 12));
    0x00002ff8 ldr sb, [pc, 0x1c0]                       |     sb = *(0x000031c0);
    0x00002ffc add sb, pc, sb                            |     sb = pc + sb;
    0x00003000 add ip, sb, 0x40                          |     
    0x00003004 stm ip!, {r0, r1, r2, r3}                 |     *(ip!) = r0;
                                                         |     *((ip! + 4)) = r1;
                                                         |     *((ip! + 8)) = r2;
                                                         |     *((ip! + 12)) = r3;
    0x00003008 ldr r8, [sb, 0x44]                        |     r8 = *((sb + 0x44));
    0x0000300c ldm lr, {r0, r1, r2, r3}                  |     r0 = *(lr);
                                                         |     r1 = *((lr + 4));
                                                         |     r2 = *((lr + 8));
                                                         |     r3 = *((lr + 12));
    0x00003010 stm ip, {r0, r1, r2, r3}                  |     *(ip) = r0;
                                                         |     *((ip + 4)) = r1;
                                                         |     *((ip + 8)) = r2;
                                                         |     *((ip + 12)) = r3;
    0x00003014 ldr r3, [r5, 0xc]                         |     r3 = *((r5 + 0xc));
    0x00003018 ldr r2, [r3, 0x8c]                        |     r2 = *((r3 + 0x8c));
    0x0000301c cmp r2, 4                                 |     
                                                         |     if (r2 > 4) {
    0x00003020 ble 0x3070                                |         
    0x00003024 ldr r2, [r5, 0x28]                        |         r2 = *((r5 + 0x28));
    0x00003028 cmp r2, 0                                 |         
                                                         |         if (r2 == 0) {
    0x0000302c beq 0x3070                                |             goto label_7;
                                                         |         }
    0x00003030 ldr r2, [pc, 0x18c]                       |         r2 = *(0x31c0);
    0x00003034 str r8, [sp]                              |         *(sp) = r8;
    0x00003038 add r2, pc, r2                            |         r2 = pc + r2;
    0x0000303c ldr r3, [r3]                              |         r3 = *(r3);
    0x00003040 mvn r1, 0                                 |         r1 = ~0;
    0x00003044 mov r0, 3                                 |         r0 = 3;
    0x00003048 bl 0xedec                                 |         fcn_0000edec (r0, r1);
    0x0000304c ldrb r2, [r4]                             |         r2 = *(r4);
    0x00003050 ldrb r3, [sb, 0x48]                       |         r3 = *((sb + 0x48));
    0x00003054 lsr r2, r2, 4                             |         r2 >>= 4;
    0x00003058 str r3, [sp]                              |         *(sp) = r3;
    0x0000305c mov r1, r8                                |         r1 = r8;
    0x00003060 ldr sl, [r5, 0x28]                        |         sl = *((r5 + 0x28));
    0x00003064 add r3, sb, 0x50                          |         r3 = sb + 0x50;
    0x00003068 ldr r0, [r5, 0x2c]                        |         r0 = *((r5 + 0x2c));
    0x0000306c blx sl                                    |         sl (r0, r1, r2, r3);
                                                         |     }
                                                         | label_7:
    0x00003070 ldrb r3, [r4]                             |     r3 = *(r4);
    0x00003074 ldr r1, [r7]                              |     r1 = *(r7);
    0x00003078 and r3, r3, 0xf0                          |     r3 &= 0xf0;
    0x0000307c cmp r3, 0x70                              |     
    0x00003080 mov r0, r4                                |     r0 = r4;
                                                         |     if (r3 != 0x70) {
    0x00003084 bne 0x30d0                                |         goto label_8;
                                                         |     }
    0x00003088 bl 0x893c                                 |     fcn_0000893c (r0, r1);
                                                         | label_2:
    0x0000308c ldr r3, [r5, 0x18]                        |     r3 = *((r5 + 0x18));
    0x00003090 str r0, [r6]                              |     *(r6) = r0;
    0x00003094 cmp r3, 0                                 |     
                                                         |     if (r3 == 0) {
    0x00003098 beq 0x2e4c                                |         goto label_0;
                                                         |     }
    0x0000309c ldr r3, [r5, 0xc]                         |     r3 = *((r5 + 0xc));
    0x000030a0 ldr r2, [pc, 0x120]                       |     r2 = *(0x31c4);
    0x000030a4 str r8, [sp]                              |     *(sp) = r8;
    0x000030a8 add r2, pc, r2                            |     r2 = pc + r2;
    0x000030ac ldr r3, [r3]                              |     r3 = *(r3);
    0x000030b0 mvn r1, 0                                 |     r1 = ~0;
    0x000030b4 mov r0, 3                                 |     r0 = 3;
    0x000030b8 bl 0xedec                                 |     fcn_0000edec (r0, r1);
    0x000030bc ldr r3, [r5, 0x18]                        |     r3 = *((r5 + 0x18));
    0x000030c0 mov r1, r8                                |     r1 = r8;
    0x000030c4 ldr r0, [r5, 0x1c]                        |     r0 = *((r5 + 0x1c));
    0x000030c8 blx r3                                    |     uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
    0x000030cc b 0x2e4c                                  |     goto label_0;
                                                         | label_8:
    0x000030d0 bl 0x80d8                                 |     fcn_000080d8 (r0, r1);
    0x000030d4 b 0x308c                                  |     goto label_2;
                                                         | label_6:
    0x000030d8 cmp r3, 0x50                              |     
                                                         |     if (r3 == 0x50) {
    0x000030dc bne 0x3164                                |         
    0x000030e0 ldr r3, [r5, 0xc]                         |         r3 = *((r5 + 0xc));
    0x000030e4 ldr r2, [r3, 0x8c]                        |         r2 = *((r3 + 0x8c));
    0x000030e8 cmp r2, 4                                 |         
                                                         |         if (r2 > 4) {
    0x000030ec ble 0x3154                                |             
    0x000030f0 ldr r2, [r5, 0x28]                        |             r2 = *((r5 + 0x28));
    0x000030f4 cmp r2, 0                                 |             
                                                         |             if (r2 == 0) {
    0x000030f8 beq 0x3154                                |                 goto label_9;
                                                         |             }
    0x000030fc ldrsb r2, [r0, 8]                         |             r2 = *((r0 + 8));
    0x00003100 cmp r2, 0                                 |             
                                                         |             if (r2 >= 0) {
    0x00003104 bge 0x3154                                |                 goto label_9;
                                                         |             }
    0x00003108 ldr r2, [pc, 0xbc]                        |             
    0x0000310c mvn r1, 0                                 |             r1 = ~0;
    0x00003110 add r2, pc, r2                            |             r2 = pc + r2;
    0x00003114 ldr r2, [r2, 0x44]                        |             r2 = *(0x320c);
    0x00003118 mov r0, 3                                 |             r0 = 3;
    0x0000311c str r2, [sp]                              |             *(sp) = r2;
    0x00003120 ldr r2, [pc, 0xa8]                        |             r2 = *(0x31cc);
    0x00003124 ldr r3, [r3]                              |             r3 = *(r3);
    0x00003128 add r2, pc, r2                            |             r2 = pc + r2;
    0x0000312c bl 0xedec                                 |             fcn_0000edec (r0, r1);
    0x00003130 ldrb r2, [r4]                             |             r2 = *(r4);
    0x00003134 ldrb r3, [r4, 8]                          |             r3 = *((r4 + 8));
    0x00003138 lsr r2, r2, 4                             |             r2 >>= 4;
    0x0000313c str r3, [sp]                              |             *(sp) = r3;
    0x00003140 add r3, r4, 0x10                          |             r3 = r4 + 0x10;
    0x00003144 ldr r8, [r5, 0x28]                        |             r8 = *((r5 + 0x28));
    0x00003148 ldr r1, [r4, 4]                           |             r1 = *((r4 + 4));
    0x0000314c ldr r0, [r5, 0x2c]                        |             r0 = *((r5 + 0x2c));
    0x00003150 blx r8                                    |             uint32_t (*r8)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
                                                         |         }
                                                         | label_9:
    0x00003154 ldr r1, [r7]                              |         r1 = *(r7);
    0x00003158 mov r0, r4                                |         r0 = r4;
    0x0000315c bl 0x82ec                                 |         fcn_000082ec (r0, r1);
    0x00003160 b 0x2fd4                                  |         goto label_3;
                                                         |     }
    0x00003164 cmp r3, 0x60                              |     
                                                         |     if (r3 == 0x60) {
    0x00003168 bne 0x3178                                |         
    0x0000316c ldr r1, [r7]                              |         r1 = *(r7);
    0x00003170 bl 0x85cc                                 |         fcn_000085cc (r0, r1);
    0x00003174 b 0x2f8c                                  |         goto label_4;
                                                         |     }
    0x00003178 cmp r3, 0xd0                              |     
                                                         |     if (r3 != 0xd0) {
    0x0000317c bne 0x2e50                                |         goto label_1;
                                                         |     }
    0x00003180 ldr r1, [r7]                              |     r1 = *(r7);
    0x00003184 bl 0x117c4                                |     fcn_000117c4 (r0);
    0x00003188 b 0x2f8c                                  |     goto label_4;
                                                         | }
    ; assembly                                                       | /* r2dec pseudo code output */
                                                                     | /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqtt3c.so.1.3.9 @ 0xc304 */
                                                                     | #include <stdint.h>
                                                                     |  
    ; (fcn) fcn.0000c304 ()                                          | void fcn_0000c304 (int32_t arg_4h, int32_t arg1, int32_t arg2) {
                                                                     |     r0 = arg1;
                                                                     |     r1 = arg2;
    0x0000c304 push {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr}         |     
    0x0000c308 ldr r4, [r0, r3, lsl 3]                               |     offset_0 = r3 << 3;
                                                                     |     r4 = *((r0 + offset_0));
    0x0000c30c mov r6, 0                                             |     r6 = 0;
    0x0000c310 mov r5, r0                                            |     r5 = r0;
    0x0000c314 mov r8, r1                                            |     r8 = r1;
    0x0000c318 mov sb, r2                                            |     sb = r2;
    0x0000c31c mov r7, r3                                            |     r7 = r3;
    0x0000c320 add fp, r0, r3, lsl 3                                 |     
    0x0000c324 mov sl, r6                                            |     sl = r6;
                                                                     |     do {
    0x0000c328 cmp r4, 0                                             |         
                                                                     |         if (r4 == 0) {
    0x0000c32c bne 0xc348                                            |             
    0x0000c330 ldrb r3, [r5, 0x1c]                                   |             r3 = *((r5 + 0x1c));
    0x0000c334 tst r3, 1                                             |             
                                                                     |             if ((r3 & 1) != 0) {
    0x0000c338 bne 0xc37c                                            |                 goto label_1;
                                                                     |             }
    0x0000c33c mov r0, 0x18                                          |             r0 = 0x18;
    0x0000c340 bl 0x2464                                             |             malloc (r0);
    0x0000c344 b 0xc390                                              |             goto label_2;
                                                                     |         }
    0x0000c348 ldr r3, [fp, 4]                                       |         r3 = *(arg_4h);
    0x0000c34c mov r2, 1                                             |         r2 = 1;
    0x0000c350 mov r1, r8                                            |         r1 = r8;
    0x0000c354 ldr r0, [r4, 0xc]                                     |         r0 = *((r4 + 0xc));
    0x0000c358 blx r3                                                |         r0 = uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
    0x0000c35c cmp r0, 0                                             |         
                                                                     |         if (r0 <= 0) {
    0x0000c360 movgt r6, 1                                           |             r6 = 1;
                                                                     |         }
                                                                     |         if (r0 > 0) {
    0x0000c364 movle r6, 0                                           |             r6 = 0;
                                                                     |         }
                                                                     |         if (r0 == 0) {
    0x0000c368 beq 0xc3f4                                            |             goto label_3;
                                                                     |         }
    0x0000c36c add r3, r4, r6, lsl 2                                 |         r3 = r4 + (r6 << 2);
    0x0000c370 mov sl, r4                                            |         sl = r4;
    0x0000c374 ldr r4, [r3, 4]                                       |         r4 = *((r3 + 4));
    0x0000c378 b 0xc328                                              |         
                                                                     |     } while (1);
                                                                     | label_1:
    0x0000c37c ldr r0, [pc, 0xb4]                                    |     r0 = *(0xc434);
    0x0000c380 mov r2, 0x18                                          |     r2 = 0x18;
    0x0000c384 mov r1, 0xf8                                          |     r1 = 0xf8;
    0x0000c388 add r0, pc, r0                                        |     r0 = pc + r0;
    0x0000c38c bl 0x17228                                            |     r0 = fcn_00017228 (r0, r1);
                                                                     | label_2:
    0x0000c390 cmp r0, 0                                             |     
    0x0000c394 mov r4, r0                                            |     r4 = r0;
    0x0000c398 bne 0xc3a8                                            |     
                                                                     |     while ((r3 & 2) != 0) {
    0x0000c39c mov r8, 0                                             |         r8 = 0;
                                                                     | label_0:
    0x0000c3a0 mov r0, r8                                            |         r0 = r8;
    0x0000c3a4 pop {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc}          |         
    0x0000c3a8 mov r2, 0x18                                          |         r2 = 0x18;
    0x0000c3ac mov r1, 0                                             |         r1 = 0;
    0x0000c3b0 bl 0x2650                                             |         memset (r0, r1, r2);
    0x0000c3b4 cmp sl, 0                                             |         
                                                                     |         if (sl == 0) {
    0x0000c3b8 addne r6, sl, r6, lsl 2                               |             r6 = sl + (r6 << 2);
                                                                     |         }
                                                                     |         if (sl == 0) {
    0x0000c3bc strne r4, [r6, 4]                                     |             *((r6 + 4)) = r4;
                                                                     |         }
    0x0000c3c0 ldrb r3, [r4, 0x14]                                   |         r3 = *((r4 + 0x14));
                                                                     |         if (sl != 0) {
    0x0000c3c4 streq r4, [r5, r7, lsl 3]                             |             offset_1 = r7 << 3;
                                                                     |             *((r5 + offset_1)) = r4;
                                                                     |         }
    0x0000c3c8 orr r3, r3, 1                                         |         r3 |= 1;
    0x0000c3cc cmp r7, 0                                             |         
    0x0000c3d0 str sl, [r4]                                          |         *(r4) = sl;
    0x0000c3d4 strb r3, [r4, 0x14]                                   |         *((r4 + 0x14)) = r3;
                                                                     |         if (r7 != 0) {
    0x0000c3d8 bne 0xc41c                                            |             goto label_4;
                                                                     |         }
    0x0000c3dc ldr r3, [r5, 0x14]                                    |         r3 = *((r5 + 0x14));
    0x0000c3e0 add r3, r3, 1                                         |         r3++;
    0x0000c3e4 str r3, [r5, 0x14]                                    |         *((r5 + 0x14)) = r3;
    0x0000c3e8 ldr r3, [r5, 0x18]                                    |         r3 = *((r5 + 0x18));
    0x0000c3ec add r3, r3, sb                                        |         r3 += sb;
    0x0000c3f0 b 0xc418                                              |         goto label_5;
                                                                     | label_3:
    0x0000c3f4 ldrb r3, [r5, 0x1c]                                   |         r3 = *((r5 + 0x1c));
    0x0000c3f8 tst r3, 2                                             |         
    0x0000c3fc bne 0xc39c                                            |         
                                                                     |     }
    0x0000c400 cmp r7, 0                                             |     
                                                                     |     if (r7 == 0) {
    0x0000c404 bne 0xc41c                                            |         
    0x0000c408 ldr r3, [r5, 0x18]                                    |         r3 = *((r5 + 0x18));
    0x0000c40c ldr r2, [r4, 0x10]                                    |         r2 = *((r4 + 0x10));
    0x0000c410 add r3, sb, r3                                        |         r3 = sb + r3;
    0x0000c414 sub r3, r3, r2                                        |         r3 -= r2;
                                                                     | label_5:
    0x0000c418 str r3, [r5, 0x18]                                    |         *((r5 + 0x18)) = r3;
                                                                     |     }
                                                                     | label_4:
    0x0000c41c str r8, [r4, 0xc]                                     |     *((r4 + 0xc)) = r8;
    0x0000c420 str sb, [r4, 0x10]                                    |     *((r4 + 0x10)) = sb;
    0x0000c424 mov r2, r7                                            |     r2 = r7;
    0x0000c428 mov r1, r4                                            |     r1 = r4;
    0x0000c42c mov r0, r5                                            |     r0 = r5;
    0x0000c430 bl 0xc298                                             |     fcn_0000c298 (r0, r1);
    0x0000c434 b 0xc3a0                                              |     goto label_0;
                                                                     | }

[*] Function system used 1 times libpaho-mqtt3c.so.1.3.9