[*] Binary protection state of libpaho-mqttpp3.so.1.2.0
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function system tear down of libpaho-mqttpp3.so.1.2.0
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x17f80 */
| #include <stdint.h>
|
; (fcn) fcn.00017f80 () | void fcn_00017f80 (int16_t arg_0h, int16_t arg_1h, int16_t arg1, int16_t arg2, void * arg3, int16_t arg4) {
| int16_t var_0h;
| void * s1;
| int16_t var_14h;
| int32_t var_14h_2;
| int16_t var_1ch;
| int16_t var_2ch;
| int16_t var_30h;
| int16_t var_34h;
| int16_t var_44h;
| int16_t var_48h;
| int16_t var_4ch;
| int16_t var_5ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00017f80 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00017f84 sub sp, 0x64 |
0x00017f86 ldr.w r5, [pc, 0x468] |
0x00017f8a lsr.w fp, r1, 0x1f |
0x00017f8e mov r7, r3 | r7 = r3;
0x00017f90 ldr.w r4, [pc, 0x460] | r4 = *(0x183f4);
0x00017f94 add r5, pc | r5 = 0x3038a;
0x00017f96 ldr.w sb, [pc, 0x460] | sb = *(0x000183f8);
0x00017f9a ldr r4, [r5, r4] |
0x00017f9c mov r5, r0 | r5 = r0;
0x00017f9e add sb, pc | sb += pc;
0x00017fa0 ldr r4, [r4] | r4 = *(0x3038a);
0x00017fa2 str r4, [sp, 0x5c] | var_5ch = r4;
0x00017fa4 mov.w r4, 0 | r4 = 0;
0x00017fa8 eor.w r4, r1, r1, asr 31 | r4 = r1 ^ (r1 >> 31);
0x00017fac str r2, [sp, 0xc] | s1 = r2;
0x00017fae sub.w r4, r4, r1, asr 31 | r4 -= (r1 >> 31);
0x00017fb2 cmp r4, 9 |
| if (r4 < 9) {
0x00017fb4 bls.w 0x1832e | goto label_14;
| }
0x00017fb8 cmp r4, 0x63 |
| if (r4 < 0x63) {
0x00017fba bls.w 0x1834a | goto label_15;
| }
0x00017fbe cmp.w r4, 0x3e8 |
| if (r4 <= 0x3e8) {
0x00017fc2 blo.w 0x1835a | goto label_16;
| }
0x00017fc6 movw r3, 0x270f | r3 = 0x270f;
0x00017fca cmp r4, r3 |
| if (r4 < r3) {
0x00017fcc bls.w 0x18352 | goto label_17;
| }
0x00017fd0 movw r3, 0x869f |
0x00017fd4 movt r3, 1 | r3 = 0x1869f;
0x00017fd8 cmp r4, r3 |
0x00017fda it ls |
| if (r4 > r3) {
0x00017fdc movls r1, 5 | r1 = 5;
| }
| if (r4 >= r3) {
0x00017fde bls 0x18056 |
0x00017fe0 movw r3, 0x423f |
0x00017fe4 movt r3, 0xf | r3 = 0xf423f;
0x00017fe8 cmp r4, r3 |
| if (r4 < r3) {
0x00017fea bls.w 0x18362 | goto label_18;
| }
0x00017fee movw r3, 0x9680 |
0x00017ff2 movt r3, 0x98 | r3 = 0x989680;
0x00017ff6 cmp r4, r3 |
0x00017ff8 itt lo |
| if (r4 >= r3) {
0x00017ffa movlo sl, 6 | sl = 6;
| }
| if (r4 < r3) {
0x00017ffe movs r1, 7 | r1 = 7;
| }
| if (r1 <= 7) {
0x00018000 blo 0x1805a | goto label_5;
| }
0x00018002 movw r3, 0xe0ff |
0x00018006 movt r3, 0x5f5 | r3 = 0x5f5e0ff;
0x0001800a cmp r4, r3 |
| if (r4 < r3) {
0x0001800c bls.w 0x182fe | goto label_19;
| }
0x00018010 movw r3, 0xc9ff |
0x00018014 movt r3, 0x3b9a | r3 = 0x3b9ac9ff;
0x00018018 cmp r4, r3 |
| if (r4 >= r3) {
0x0001801a bls 0x18054 |
0x0001801c mov.w sl, 9 | sl = 9;
| label_12:
0x00018020 add.w r1, sl, 1 | r1 = sl + 1;
| label_11:
0x00018024 add.w r8, sp, 0x2c | r8 += var_2ch;
0x00018028 add r1, fp | r1 += fp;
0x0001802a mov r0, r8 | r0 = r8;
0x0001802c add r6, sp, 0x34 | r6 += var_34h;
0x0001802e movs r2, 0x2d | r2 = 0x2d;
0x00018030 str r6, [sp, 0x2c] | var_2ch = r6;
0x00018032 blx 0xe81c | fcn_0000e81c ();
0x00018036 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00018038 cmp r4, 0x63 |
0x0001803a add.w r0, r3, fp | r0 = r3 + fp;
| if (r4 > 0x63) {
0x0001803e bhi 0x18072 | goto label_20;
| }
0x00018040 ldr r3, [pc, 0x3b8] | r3 = *(0x183fc);
0x00018042 ldr.w lr, [sb, r3] |
| label_0:
0x00018046 add.w r3, lr, r4, lsl 1 | r3 = lr + (r4 << 1);
0x0001804a ldrb.w r4, [lr, r4, lsl 1] | offset_0 = r4 << 1;
| r4 = *((lr + offset_0));
0x0001804e ldrb r3, [r3, 1] | r3 = *((r3 + 1));
0x00018050 strb r3, [r0, 1] | *((r0 + 1)) = r3;
0x00018052 b 0x180b4 | goto label_21;
| }
0x00018054 movs r1, 9 | r1 = 9;
| }
0x00018056 add.w sl, r1, -1 | sl = r1 + -1;
| label_5:
0x0001805a add.w r8, sp, 0x2c | r8 += var_2ch;
0x0001805e add r1, fp | r1 += fp;
0x00018060 mov r0, r8 | r0 = r8;
0x00018062 add r6, sp, 0x34 | r6 += var_34h;
0x00018064 movs r2, 0x2d | r2 = 0x2d;
0x00018066 str r6, [sp, 0x2c] | var_2ch = r6;
0x00018068 blx 0xe81c | fcn_0000e81c ();
0x0001806c ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x0001806e add.w r0, r3, fp | r0 = r3 + fp;
| label_20:
0x00018072 ldr r3, [pc, 0x388] | r3 = *(0x183fe);
0x00018074 add.w r1, sl, -1 | r1 = sl + -1;
0x00018078 add r1, r0 | r1 += r0;
0x0001807a mov.w fp, 0x64 |
0x0001807e movw sl, 0x270f | sl = 0x270f;
0x00018082 ldr.w lr, [sb, r3] |
0x00018086 movw sb, 0x851f |
| /* if there is a right shift of 5, then it's a division by 1/100 */
0x0001808a movt sb, 0x51eb | sb = 0x51eb851f;
| do {
0x0001808e umull r3, r2, sb, r4 | r3:r2 = sb * r4;
0x00018092 mov ip, r4 |
0x00018094 cmp ip, sl |
0x00018096 lsr.w r2, r2, 5 | r2 >>= 5;
0x0001809a mls r3, fp, r2, r4 | __asm ("mls r3, fp, r2, r4");
0x0001809e mov r4, r2 | r4 = r2;
0x000180a0 ldrh.w r3, [lr, r3, lsl 1] | offset_1 = r3 << 1;
| r3 = *((lr + offset_1));
0x000180a4 strh r3, [r1], -2 | *(r1) = r3;
| r1 += -2;
0x000180a8 bhi 0x1808e |
| } while (ip > sl);
0x000180aa cmp.w ip, 0x3e8 |
| if (ip >= 0x3e8) {
0x000180ae bhs 0x18046 | goto label_0;
| }
| label_10:
0x000180b0 adds r4, 0x30 | r4 += 0x30;
0x000180b2 uxtb r4, r4 | r4 = (int8_t) r4;
| label_21:
0x000180b4 movs r3, 0xc | r3 = 0xc;
0x000180b6 strb r4, [r0] | *(r0) = r4;
0x000180b8 str r3, [sp] | *(sp) = r3;
0x000180ba movs r2, 0 | r2 = 0;
0x000180bc ldr r3, [pc, 0x340] |
0x000180be mov r1, r2 | r1 = r2;
0x000180c0 mov r0, r8 | r0 = r8;
0x000180c2 add r3, pc | r3 = 0x304c6;
0x000180c4 blx 0xe52c | r0 = fcn_0000e52c ();
0x000180c8 mov sl, r0 | sl = r0;
0x000180ca add.w sb, sp, 0x4c | sb += var_4ch;
0x000180ce str.w sb, [sp, 0x44] | __asm ("str.w sb, [var_44h]");
0x000180d2 mov r4, r0 | r4 = r0;
0x000180d4 ldr r2, [sl], 8 | r2 = *(sl);
| sl += 8;
0x000180d8 ldr r3, [r0, 4] | r3 = var_30h;
0x000180da cmp r2, sl |
| if (r2 == sl) {
0x000180dc beq.w 0x182ec | goto label_22;
| }
0x000180e0 str r2, [sp, 0x44] | var_44h = r2;
0x000180e2 ldr r2, [r0, 8] | r2 = var_34h;
0x000180e4 str r2, [sp, 0x4c] | var_4ch = r2;
| label_4:
0x000180e6 str r3, [sp, 0x48] | var_48h = r3;
0x000180e8 movs r3, 0 | r3 = 0;
0x000180ea str r3, [r4, 4] | var_30h = r3;
0x000180ec strb r3, [r4, 8] | var_34h = r3;
0x000180ee mvn r3, 0xc0000000 | r3 = ~0xc0000000;
0x000180f2 ldr r2, [sp, 0x48] | r2 = var_48h;
0x000180f4 str.w sl, [r4] | __asm ("str.w sl, [r4]");
0x000180f8 cmp r2, r3 |
| if (r2 == r3) {
0x000180fa beq.w 0x1836c | goto label_23;
| }
0x000180fe ldr r1, [pc, 0x304] |
0x00018100 movs r2, 1 | r2 = 1;
0x00018102 add r0, sp, 0x44 | r0 += var_44h;
0x00018104 add r1, pc | r1 = 0x3050e;
0x00018106 blx 0xe7e4 | r0 = fcn_0000e7e4 ();
0x0001810a mov fp, r0 |
0x0001810c add.w sl, r5, 8 | sl = r5 + 8;
0x00018110 str.w sl, [r5] | __asm ("str.w sl, [r5]");
0x00018114 mov r4, r0 | r4 = r0;
0x00018116 ldr r2, [fp], 8 | r2 = *(fp);
| fp += 8;
0x0001811a ldr r3, [r0, 4] | r3 = var_48h;
0x0001811c cmp r2, fp |
| if (r2 == fp) {
0x0001811e beq.w 0x182da | goto label_24;
| }
0x00018122 str r2, [r5] | *(r5) = r2;
0x00018124 ldr r2, [r0, 8] | r2 = var_4ch;
0x00018126 str r2, [r5, 8] | *((r5 + 8)) = r2;
| label_3:
0x00018128 str r3, [r5, 4] | *((r5 + 4)) = r3;
0x0001812a movs r3, 0 | r3 = 0;
0x0001812c str.w fp, [r4] | __asm ("str.w fp, [r4]");
0x00018130 strb r3, [r4, 8] | var_4ch = r3;
0x00018132 ldr r0, [sp, 0x44] | r0 = var_44h;
0x00018134 str r3, [r4, 4] | var_48h = r3;
0x00018136 cmp r0, sb |
| if (r0 != sb) {
0x00018138 beq 0x1813e |
0x0001813a blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x0001813e ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00018140 cmp r0, r6 |
| if (r0 != r6) {
0x00018142 beq 0x18148 |
0x00018144 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x00018148 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x0001814a cmp r3, 0 |
| if (r3 != 0) {
0x0001814c bne.w 0x18266 | goto label_25;
| }
| label_2:
0x00018150 ldr r3, [sp, 0xc] | r3 = s1;
0x00018152 cmp r3, 0xff |
0x00018154 it ne |
| if (r3 != 0xff) {
0x00018156 cmpne r3, 0 | __asm ("cmpne r3, 0");
| }
0x00018158 bne 0x18178 |
| while (r0 == r7) {
| label_1:
0x0001815a ldr r2, [pc, 0x2ac] |
0x0001815c ldr r3, [pc, 0x294] | r3 = *(0x183f4);
0x0001815e add r2, pc | r2 = 0x3056c;
0x00018160 ldr r3, [r2, r3] | r3 = *(0x3056c);
0x00018162 ldr r2, [r3] | r2 = *(0x3056c);
0x00018164 ldr r3, [sp, 0x5c] | r3 = var_5ch;
0x00018166 eors r2, r3 | r2 ^= r3;
0x00018168 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0001816c bne.w 0x18368 | goto label_26;
| }
0x00018170 mov r0, r5 | r0 = r5;
0x00018172 add sp, 0x64 |
0x00018174 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00018178 ldr r1, [pc, 0x290] |
0x0001817a add r4, sp, 0x14 | r4 += var_14h;
0x0001817c add r7, sp, 0x1c | r7 += var_1ch;
0x0001817e mov r0, r4 | r0 = r4;
0x00018180 str r7, [sp, 0x14] | var_14h = r7;
0x00018182 add r1, pc | r1 = 0x30592;
0x00018184 add.w r2, r1, 0xa | r2 = r1 + 0xa;
0x00018188 bl 0xf2d0 | fcn_0000f2d0 (r0, r1, r2);
0x0001818c ldr r0, [sp, 0xc] | r0 = s1;
0x0001818e blx 0xe740 | r0 = memmove (r0, r1, r2);
0x00018192 mov fp, r0 |
0x00018194 str r6, [sp, 0x2c] | var_2ch = r6;
| if (r0 != 0) {
0x00018196 cbz r0, 0x181ae |
0x00018198 blx 0xea20 | fcn_0000ea20 ();
0x0001819c mov r1, fp | r1 = fp;
0x0001819e add.w r2, fp, r0 | r2 = fp + r0;
0x000181a2 mov r0, r8 | r0 = r8;
0x000181a4 bl 0xf2d0 | fcn_0000f2d0 (r0, r1, r2);
0x000181a8 ldrd r1, r2, [sp, 0x2c] | __asm ("ldrd r1, r2, [var_2ch]");
0x000181ac b 0x181ba |
| } else {
0x000181ae add r6, sp, 0x34 | r6 += var_34h;
0x000181b0 mov r2, r0 | r2 = r0;
0x000181b2 mov r1, r6 | r1 = r6;
0x000181b4 str r0, [sp, 0x30] | var_30h = r0;
0x000181b6 strb.w r0, [sp, 0x34] | var_34h = r0;
| }
0x000181ba ldrd fp, r0, [sp, 0x14] | __asm ("ldrd fp, r0, [var_14h]");
0x000181be cmp fp, r7 |
0x000181c0 add.w ip, r2, r0 |
| if (fp != r7) {
0x000181c4 beq 0x181ee |
0x000181c6 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x000181c8 cmp ip, r3 |
| if (ip >= r3) {
0x000181ca bls 0x181f6 |
0x000181cc cmp r1, r6 |
0x000181ce it eq |
| if (r1 != r6) {
0x000181d0 moveq lr, 0xf | lr = 0xf;
| }
| if (r1 != r6) {
0x000181d4 beq 0x181da |
| label_8:
0x000181d6 ldr.w lr, [sp, 0x34] | lr = var_34h;
| }
0x000181da cmp ip, lr |
| if (ip > lr) {
0x000181dc bhi 0x181f6 | goto label_9;
| }
0x000181de movs r2, 0 | r2 = 0;
0x000181e0 str r0, [sp] | *(sp) = r0;
0x000181e2 mov r3, fp | r3 = fp;
0x000181e4 mov r0, r8 | r0 = r8;
0x000181e6 mov r1, r2 | r1 = r2;
0x000181e8 blx 0xe52c | fcn_0000e52c ();
0x000181ec b 0x18208 |
| } else {
0x000181ee cmp.w ip, 0xf |
| if (ip > 0xf) {
0x000181f2 bhi.w 0x18326 | goto label_27;
| }
| }
| label_9:
0x000181f6 mvn r3, 0xc0000000 | r3 = ~0xc0000000;
0x000181fa subs r3, r3, r0 | r3 -= r0;
0x000181fc cmp r2, r3 |
| if (r2 > r3) {
0x000181fe bhi.w 0x1838c | goto label_28;
| }
0x00018202 mov r0, r4 | r0 = r4;
0x00018204 blx 0xe7e4 | r0 = fcn_0000e7e4 ();
| }
0x00018208 mov r8, r0 | r8 = r0;
0x0001820a str.w sb, [sp, 0x44] | __asm ("str.w sb, [var_44h]");
0x0001820e ldr r2, [r8], 8 | r2 = *(r8);
| r8 += 8;
0x00018212 mov r4, r0 | r4 = r0;
0x00018214 ldr r3, [r0, 4] | r3 = var_14h_2;
0x00018216 cmp r2, r8 |
| if (r2 == r8) {
0x00018218 beq 0x18306 | goto label_29;
| }
0x0001821a str r2, [sp, 0x44] | var_44h = r2;
0x0001821c ldr r2, [r0, 8] | r2 = var_1ch;
0x0001821e str r2, [sp, 0x4c] | var_4ch = r2;
| label_6:
0x00018220 str r3, [sp, 0x48] | var_48h = r3;
0x00018222 movs r3, 0 | r3 = 0;
0x00018224 strb r3, [r4, 8] | var_1ch = r3;
0x00018226 str r3, [r4, 4] | var_14h_2 = r3;
0x00018228 mvn r3, 0xc0000000 | r3 = ~0xc0000000;
0x0001822c ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x0001822e ldr r2, [sp, 0x48] | r2 = var_48h;
0x00018230 str.w r8, [r4] | __asm ("str.w r8, [r4]");
0x00018234 subs r3, r3, r1 | r3 -= r1;
0x00018236 ldr r1, [sp, 0x44] | r1 = var_44h;
0x00018238 cmp r2, r3 |
| if (r2 > r3) {
0x0001823a bhi.w 0x18384 | goto label_30;
| }
0x0001823e mov r0, r5 | r0 = r5;
0x00018240 blx 0xe7e4 | fcn_0000e7e4 ();
0x00018244 ldr r0, [sp, 0x44] | r0 = var_44h;
0x00018246 cmp r0, sb |
| if (r0 != sb) {
0x00018248 beq 0x1824e |
0x0001824a blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x0001824e ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x00018250 cmp r0, r6 |
| if (r0 != r6) {
0x00018252 beq 0x18258 |
0x00018254 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x00018258 ldr r0, [sp, 0x14] | r0 = var_14h;
0x0001825a cmp r0, r7 |
0x0001825c beq.w 0x1815a |
| }
0x00018260 blx 0xe7c0 | fcn_0000e7c0 ();
0x00018264 b 0x1815a | goto label_1;
| label_25:
0x00018266 ldr r1, [pc, 0x1a8] |
0x00018268 mov r0, r8 | r0 = r8;
0x0001826a str r6, [sp, 0x2c] | var_2ch = r6;
0x0001826c add r1, pc | r1 = 0x30682;
0x0001826e adds r2, r1, 2 | r2 = r1 + 2;
0x00018270 bl 0xf2d0 | fcn_0000f2d0 (r0, r1, r2);
0x00018274 ldr r0, [sp, 0x30] | r0 = var_30h;
0x00018276 mvn r3, 0xc0000000 | r3 = ~0xc0000000;
0x0001827a ldrd r1, r2, [r7] | __asm ("ldrd r1, r2, [r7]");
0x0001827e subs r3, r3, r0 | r3 -= r0;
0x00018280 cmp r2, r3 |
| if (r2 > r3) {
0x00018282 bhi 0x18374 | goto label_31;
| }
0x00018284 mov r0, r8 | r0 = r8;
0x00018286 blx 0xe7e4 | r0 = fcn_0000e7e4 ();
0x0001828a mov r7, r0 | r7 = r0;
0x0001828c str.w sb, [sp, 0x44] | __asm ("str.w sb, [var_44h]");
0x00018290 ldr r2, [r7], 8 | r2 = *(r7);
| r7 += 8;
0x00018294 mov r4, r0 | r4 = r0;
0x00018296 ldr r3, [r0, 4] | r3 = var_30h;
0x00018298 cmp r2, r7 |
| if (r2 == r7) {
0x0001829a beq 0x18316 | goto label_32;
| }
0x0001829c str r2, [sp, 0x44] | var_44h = r2;
0x0001829e ldr r2, [r0, 8] | r2 = var_34h;
0x000182a0 str r2, [sp, 0x4c] | var_4ch = r2;
| label_7:
0x000182a2 str r3, [sp, 0x48] | var_48h = r3;
0x000182a4 movs r3, 0 | r3 = 0;
0x000182a6 strb r3, [r4, 8] | var_34h = r3;
0x000182a8 str r3, [r4, 4] | var_30h = r3;
0x000182aa mvn r3, 0xc0000000 | r3 = ~0xc0000000;
0x000182ae ldr r1, [r5, 4] | r1 = *((r5 + 4));
0x000182b0 ldr r2, [sp, 0x48] | r2 = var_48h;
0x000182b2 str r7, [r4] | *(r4) = r7;
0x000182b4 subs r3, r3, r1 | r3 -= r1;
0x000182b6 ldr r1, [sp, 0x44] | r1 = var_44h;
0x000182b8 cmp r2, r3 |
| if (r2 > r3) {
0x000182ba bhi 0x1837c | goto label_33;
| }
0x000182bc mov r0, r5 | r0 = r5;
0x000182be blx 0xe7e4 | fcn_0000e7e4 ();
0x000182c2 ldr r0, [sp, 0x44] | r0 = var_44h;
0x000182c4 cmp r0, sb |
| if (r0 != sb) {
0x000182c6 beq 0x182cc |
0x000182c8 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x000182cc ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000182ce cmp r0, r6 |
| if (r0 == r6) {
0x000182d0 beq.w 0x18150 | goto label_2;
| }
0x000182d4 blx 0xe7c0 | fcn_0000e7c0 ();
0x000182d8 b 0x18150 | goto label_2;
| label_24:
0x000182da adds r2, r3, 1 | r2 = r3 + 1;
| if (r2 == r3) {
0x000182dc beq.w 0x18128 | goto label_3;
| }
0x000182e0 mov r1, fp | r1 = fp;
0x000182e2 mov r0, sl | r0 = sl;
0x000182e4 blx 0xea08 | fcn_0000ea08 ();
0x000182e8 ldr r3, [r4, 4] | r3 = var_48h;
0x000182ea b 0x18128 | goto label_3;
| label_22:
0x000182ec adds r2, r3, 1 | r2 = r3 + 1;
| if (r2 == r3) {
0x000182ee beq.w 0x180e6 | goto label_4;
| }
0x000182f2 mov r1, sl | r1 = sl;
0x000182f4 mov r0, sb | r0 = sb;
0x000182f6 blx 0xea08 | fcn_0000ea08 ();
0x000182fa ldr r3, [r4, 4] | r3 = var_30h;
0x000182fc b 0x180e6 | goto label_4;
| label_19:
0x000182fe mov.w sl, 7 | sl = 7;
0x00018302 movs r1, 8 | r1 = 8;
0x00018304 b 0x1805a | goto label_5;
| label_29:
0x00018306 adds r2, r3, 1 | r2 = r3 + 1;
| if (r2 == r3) {
0x00018308 beq 0x18220 | goto label_6;
| }
0x0001830a mov r1, r8 | r1 = r8;
0x0001830c mov r0, sb | r0 = sb;
0x0001830e blx 0xea08 | fcn_0000ea08 ();
0x00018312 ldr r3, [r4, 4] | r3 = var_14h_2;
0x00018314 b 0x18220 | goto label_6;
| label_32:
0x00018316 adds r2, r3, 1 | r2 = r3 + 1;
| if (r2 == r3) {
0x00018318 beq 0x182a2 | goto label_7;
| }
0x0001831a mov r1, r7 | r1 = r7;
0x0001831c mov r0, sb | r0 = sb;
0x0001831e blx 0xea08 | fcn_0000ea08 ();
0x00018322 ldr r3, [r4, 4] | r3 = var_30h;
0x00018324 b 0x182a2 | goto label_7;
| label_27:
0x00018326 cmp r1, r6 |
| if (r1 != r6) {
0x00018328 bne.w 0x181d6 | goto label_8;
| }
0x0001832c b 0x181f6 | goto label_9;
| label_14:
0x0001832e add.w r8, sp, 0x2c | r8 += var_2ch;
0x00018332 add r6, sp, 0x34 | r6 += var_34h;
0x00018334 mov r0, r8 | r0 = r8;
0x00018336 movs r2, 0x2d | r2 = 0x2d;
0x00018338 add.w r1, fp, 1 | r1 += arg_1h;
0x0001833c str r6, [sp, 0x2c] | var_2ch = r6;
0x0001833e blx 0xe81c | fcn_0000e81c ();
0x00018342 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00018344 add.w r0, r3, fp | r0 = r3 + fp;
0x00018348 b 0x180b0 | goto label_10;
| label_15:
0x0001834a movs r1, 2 | r1 = 2;
0x0001834c mov.w sl, 1 | sl = 1;
0x00018350 b 0x18024 | goto label_11;
| label_17:
0x00018352 mov.w sl, 3 | sl = 3;
0x00018356 movs r1, 4 | r1 = 4;
0x00018358 b 0x1805a | goto label_5;
| label_16:
0x0001835a mov.w sl, 2 | sl = 2;
0x0001835e movs r1, 3 | r1 = 3;
0x00018360 b 0x1805a | goto label_5;
| label_18:
0x00018362 mov.w sl, 5 | sl = 5;
0x00018366 b 0x18020 | goto label_12;
| label_26:
0x00018368 blx 0xe864 | fcn_0000e864 ();
| label_23:
0x0001836c ldr r0, [pc, 0xa4] |
0x0001836e add r0, pc | r0 = 0x30786;
0x00018370 blx 0xe5c8 | fcn_0000e5c8 ();
| label_31:
0x00018374 ldr r0, [pc, 0xa0] |
0x00018376 add r0, pc | r0 = 0x30792;
0x00018378 blx 0xe5c8 | fcn_0000e5c8 ();
| label_33:
0x0001837c ldr r0, [pc, 0x9c] |
0x0001837e add r0, pc | r0 = 0x3079e;
0x00018380 blx 0xe5c8 | fcn_0000e5c8 ();
| label_30:
0x00018384 ldr r0, [pc, 0x98] |
0x00018386 add r0, pc | r0 = 0x307aa;
0x00018388 blx 0xe5c8 | fcn_0000e5c8 ();
| label_28:
0x0001838c ldr r0, [pc, 0x94] |
0x0001838e add r0, pc | r0 = 0x307b6;
0x00018390 blx 0xe5c8 | fcn_0000e5c8 ();
0x00018394 ldr r0, [sp, 0x44] | r0 = var_44h;
0x00018396 cmp r0, sb |
| if (r0 != sb) {
0x00018398 beq 0x1839e |
0x0001839a blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x0001839e ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000183a0 cmp r0, r6 |
| if (r0 != r6) {
0x000183a2 beq 0x183a8 |
0x000183a4 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x000183a8 ldr r0, [sp, 0x14] | r0 = var_14h;
0x000183aa cmp r0, r7 |
0x000183ac beq 0x183b2 |
| while (r0 != r6) {
0x000183ae blx 0xe7c0 | fcn_0000e7c0 ();
| label_13:
0x000183b2 ldr r0, [r5] | r0 = *(r5);
0x000183b4 cmp r0, sl |
| if (r0 != sl) {
0x000183b6 beq 0x183bc |
0x000183b8 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x000183bc blx 0xe870 | fcn_0000e870 ();
0x000183c0 ldr r0, [sp, 0x44] | r0 = var_44h;
0x000183c2 cmp r0, sb |
| if (r0 != sb) {
0x000183c4 beq 0x183ca |
0x000183c6 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x000183ca ldr r0, [sp, 0x2c] | r0 = var_2ch;
0x000183cc cmp r0, r6 |
0x000183ce bne 0x183ae |
| }
0x000183d0 b 0x183b2 | goto label_13;
| }
r2dec has crashed (info: /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x192f8).
Please report the bug at https://github.com/radareorg/r2dec-js/issues
Use the option '--issue' or the command 'pddi' to generate
the needed data for the issue.
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x15884 */
| #include <stdint.h>
|
; (fcn) method.mqtt::async_client.publish_std::shared_ptr_mqtt::message_const___void__mqtt::iaction_listener_ () | void method_mqtt::async_client_publish_std::shared_ptr_mqtt::message_const_void_mqtt::iaction_listener_ (int16_t arg_b0h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_bp_0h;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int32_t var_28h;
| int32_t var_28h_2;
| int16_t var_34h;
| int16_t var_38h;
| int16_t var_4ch;
| int16_t var_80h;
| int16_t var_84h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| /* mqtt::async_client::publish(std::shared_ptr<qtt::message const>, void*, mqtt::iaction_listener&) */
0x00015884 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00015888 sub sp, 0x8c |
0x0001588a mov r4, r2 | r4 = r2;
0x0001588c str r2, [sp, 0x10] | var_10h = r2;
0x0001588e mov r7, r1 | r7 = r1;
0x00015890 mov r6, r0 | r6 = r0;
0x00015892 ldr.w r2, [pc, 0x548] | r2 = *(0x00015ddc);
0x00015896 str r3, [sp, 0x1c] | var_1ch = r3;
0x00015898 ldr r1, [sp, 0xb0] | r1 = *(arg_b0h);
0x0001589a ldr.w r3, [pc, 0x544] |
0x0001589e add r2, pc | r2 += pc;
0x000158a0 ldr.w r8, [r4, 4] | r8 = *((r4 + 4));
0x000158a4 str r1, [sp, 0x20] | var_20h = r1;
0x000158a6 ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x000158a8 ldr r3, [r3] | r3 = *(0x15de2);
0x000158aa str r3, [sp, 0x84] | var_84h = r3;
0x000158ac mov.w r3, 0 | r3 = 0;
0x000158b0 ldr r3, [r7] | r3 = *(r7);
0x000158b2 ldr r3, [r3, -0x94] | r3 = *((r3 - 0x94));
0x000158b6 adds r1, r7, r3 | r1 = r7 + r3;
0x000158b8 mov r3, r4 | r3 = r4;
0x000158ba ldr r3, [r3] | r3 = *(r3);
0x000158bc ldr.w r4, [pc, 0x524] |
0x000158c0 str r1, [sp, 0x18] | var_18h = r1;
0x000158c2 str r3, [sp, 0xc] | var_ch = r3;
0x000158c4 add r4, pc | r4 = 0x2b6ac;
0x000158c6 cmp.w r8, 0 |
| if (r8 == 0) {
0x000158ca beq.w 0x15adc | goto label_18;
| }
0x000158ce ldr.w r3, [pc, 0x518] | r3 = *(0x15dea);
0x000158d2 add.w fp, r8, 4 |
0x000158d6 ldr.w sb, [r4, r3] | sb = *((r4 + r3));
0x000158da ldrb.w r3, [sb] | r3 = *(sb);
0x000158de cmp r3, 0 |
| if (r3 == 0) {
0x000158e0 beq.w 0x15b82 | goto label_19;
| }
0x000158e4 ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
0x000158e8 adds r3, 1 | r3++;
0x000158ea str.w r3, [r8, 4] | __asm ("str.w r3, [r8, 4]");
0x000158ee movs r3, 0 | r3 = 0;
0x000158f0 str r3, [r0] | *(r0) = r3;
0x000158f2 movs r0, 0xb8 | r0 = 0xb8;
0x000158f4 blx 0xe3f0 | fcn_0000e3f0 ();
| label_5:
0x000158f8 ldr.w r3, [pc, 0x4f0] | r3 = *(0x15dec);
0x000158fc adds r2, r0, 4 | r2 = r0 + 4;
0x000158fe vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x00015902 mov sl, r0 | sl = r0;
0x00015904 mov r5, r0 | r5 = r0;
0x00015906 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x0001590a ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x0001590c adds r3, 8 | r3 += 8;
0x0001590e str r3, [sl], 0x10 | *(sl) = r3;
| sl += 0x10;
0x00015912 ldrb.w r3, [sb] | r3 = *(sb);
0x00015916 cmp r3, 0 |
| if (r3 == 0) {
0x00015918 beq.w 0x15ba2 | goto label_20;
| }
0x0001591c ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
0x00015920 adds r3, 1 | r3++;
0x00015922 str.w r3, [r8, 4] | __asm ("str.w r3, [r8, 4]");
| do {
| label_6:
0x00015926 ldr.w r3, [pc, 0x4c8] |
0x0001592a ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x0001592c str r3, [sp, 0x14] | var_14h = r3;
0x0001592e ldr r3, [r3] | r3 = *(0x15df2);
0x00015930 dmb ish | __asm ("dmb ish");
0x00015934 ands sb, r3, 1 | sb = r3 & 1;
| if (sb == r3) {
0x00015938 beq.w 0x15b0a | goto label_21;
| }
| label_1:
0x0001593c ldr r3, [sp, 0xc] | r3 = var_ch;
0x0001593e ldr.w fp, [r3, 0x30] | fp = *((r3 + 0x30));
0x00015942 cmp.w fp, 0 |
| if (fp == 0) {
0x00015946 beq.w 0x15b40 | goto label_22;
| }
| label_2:
0x0001594a movs r0, 0x24 | r0 = 0x24;
0x0001594c blx 0xe3f0 | fcn_0000e3f0 ();
0x00015950 ldr.w r3, [pc, 0x4a0] | r3 = *(0x15df4);
0x00015954 adds r2, r0, 4 | r2 = r0 + 4;
0x00015956 vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x0001595a mov r1, fp | r1 = fp;
0x0001595c mov fp, r0 |
0x0001595e mov sb, r0 | sb = r0;
0x00015960 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00015964 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00015966 adds r3, 8 | r3 += 8;
0x00015968 str r3, [fp], 0xc | *(fp) = r3;
| fp += 0xc;
0x0001596c mov r0, fp | r0 = fp;
0x0001596e blx 0xec80 | pthread_mutex_unlock ();
0x00015972 ldr r3, [sp, 0x20] | r3 = var_20h;
0x00015974 movs r1, 2 | r1 = 2;
0x00015976 strd fp, sb, [sp, 0x30] | __asm ("strd fp, sb, [var_bp_0h]");
0x0001597a add.w fp, sp, 0x30 |
0x0001597e ldr r2, [sp, 0x18] | r2 = var_18h;
0x00015980 mov r0, sl | r0 = sl;
0x00015982 str r3, [sp, 4] | var_4h = r3;
0x00015984 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00015986 str r3, [sp] | *(sp) = r3;
0x00015988 mov r3, fp | r3 = fp;
0x0001598a blx 0xe3d4 | fcn_0000e3d4 ();
0x0001598e ldr r0, [sp, 0x34] | r0 = var_34h;
| if (r0 != 0) {
0x00015990 cbz r0, 0x159b0 |
0x00015992 ldr.w r3, [pc, 0x454] | r3 = *(0x15dea);
0x00015996 ldr.w sb, [r4, r3] | sb = *((r4 + r3));
0x0001599a ldrb.w r3, [sb] | r3 = *(sb);
0x0001599e cmp r3, 0 |
| if (r3 == 0) {
0x000159a0 beq.w 0x15bd6 | goto label_23;
| }
0x000159a4 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x000159a6 subs r2, r3, 1 | r2 = r3 - 1;
0x000159a8 str r2, [r0, 4] | *((r0 + 4)) = r2;
| label_8:
0x000159aa cmp r3, 1 |
| if (r3 == 1) {
0x000159ac beq.w 0x15c96 | goto label_24;
| }
| }
| label_14:
0x000159b0 ldr.w r3, [pc, 0x444] | r3 = *(0x15df8);
0x000159b4 ldr r2, [sp, 0xc] | r2 = var_ch;
0x000159b6 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x000159b8 strd r2, r8, [r5, 0xb0] | __asm ("strd r2, r8, [r5, 0xb0]");
0x000159bc strd sl, r5, [r6] | __asm ("strd sl, r5, [r6]");
0x000159c0 adds r3, 8 | r3 += 8;
0x000159c2 str r3, [r5, 0x10] | *((r5 + 0x10)) = r3;
0x000159c4 cmp.w r8, 0 |
| if (r8 == 0) {
0x000159c8 beq.w 0x15b00 | goto label_25;
| }
0x000159cc ldr.w r3, [pc, 0x418] | r3 = *(0x15de8);
0x000159d0 ldr.w sb, [r4, r3] | sb = *((r4 + r3));
0x000159d4 ldrb.w r3, [sb] | r3 = *(sb);
0x000159d8 cmp r3, 0 |
| if (r3 == 0) {
0x000159da beq.w 0x15bba | goto label_26;
| }
0x000159de ldr.w r3, [r8, 4] | r3 = *((r8 + 4));
0x000159e2 subs r2, r3, 1 | r2 = r3 - 1;
0x000159e4 str.w r2, [r8, 4] | __asm ("str.w r2, [r8, 4]");
| label_7:
0x000159e8 cmp r3, 1 |
| if (r3 == 1) {
0x000159ea beq.w 0x15c68 | goto label_27;
| }
| label_13:
0x000159ee vld1.32 {d16}, [r6] | __asm ("vld1.32 {d16}, [r6]");
| label_0:
0x000159f2 ldr r3, [r7] | r3 = *(r7);
0x000159f4 ldr.w r2, [r3, 0x90] | r2 = *((r3 + 0x90));
0x000159f8 vmov.32 r3, d16[1] | __asm ("vmov.32 r3, d16[1]");
0x000159fc vstr d16, [sp, 0x30] | __asm ("vstr d16, [sp, 0x30]");
| if (r3 != 0) {
0x00015a00 cbz r3, 0x15a14 |
0x00015a02 ldr r1, [pc, 0x3e4] | r1 = *(0x15dea);
0x00015a04 ldr r1, [r4, r1] | r1 = *((r4 + r1));
0x00015a06 ldrb r1, [r1] | r1 = *(r1);
0x00015a08 cmp r1, 0 |
| if (r1 == 0) {
0x00015a0a beq.w 0x15c0c | goto label_28;
| }
0x00015a0e ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x00015a10 adds r1, 1 | r1++;
0x00015a12 str r1, [r3, 4] | *((r3 + 4)) = r1;
| }
| label_10:
0x00015a14 mov r1, fp | r1 = fp;
0x00015a16 mov r0, r7 | r0 = r7;
0x00015a18 blx r2 | uint32_t (*r2)(uint32_t, uint32_t) (r0, r1);
0x00015a1a ldr r5, [sp, 0x34] | r5 = var_34h;
| if (r5 != 0) {
0x00015a1c cbz r5, 0x15a3a |
0x00015a1e ldr r3, [pc, 0x3c8] | r3 = *(0x15dea);
0x00015a20 ldr.w sb, [r4, r3] | sb = *((r4 + r3));
0x00015a24 ldrb.w r3, [sb] | r3 = *(sb);
0x00015a28 cmp r3, 0 |
| if (r3 == 0) {
0x00015a2a beq.w 0x15bf2 | goto label_29;
| }
0x00015a2e ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00015a30 subs r2, r3, 1 | r2 = r3 - 1;
0x00015a32 str r2, [r5, 4] | *((r5 + 4)) = r2;
| label_9:
0x00015a34 cmp r3, 1 |
| if (r3 == 1) {
0x00015a36 beq.w 0x15c42 | goto label_30;
| }
| }
| label_12:
0x00015a3a add r5, sp, 0x38 | r5 += var_38h;
0x00015a3c ldr r2, [r7, 0x50] | r2 = *((r7 + 0x50));
0x00015a3e mov r1, r6 | r1 = r6;
0x00015a40 mov r0, r5 | r0 = r5;
0x00015a42 blx 0xe5b0 | fcn_0000e5b0 ();
0x00015a46 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00015a48 ldr.w r8, [r7, 0x1c] | r8 = *((r7 + 0x1c));
0x00015a4c ldr.w sb, [r3] | sb = *(r3);
0x00015a50 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00015a52 ldr r3, [r3] | r3 = *(r3);
0x00015a54 dmb ish | __asm ("dmb ish");
0x00015a58 ands sl, r3, 1 | sl = r3 & 1;
| if (sl == r3) {
0x00015a5c beq 0x15b48 | goto label_31;
| }
| label_3:
0x00015a5e ldr.w r3, [sb, 0x30] | r3 = *((sb + 0x30));
0x00015a62 cmp r3, 0 |
| if (r3 == 0) {
0x00015a64 beq.w 0x15b7c | goto label_32;
| }
| label_4:
0x00015a68 ldr r2, [sp, 0x10] | r2 = var_10h;
0x00015a6a mov r0, r8 | r0 = r8;
0x00015a6c ldr r1, [r3] | r1 = *(r3);
0x00015a6e mov r3, r5 | r3 = r5;
0x00015a70 ldr r2, [r2] | r2 = *(r2);
0x00015a72 blx 0xe9c8 | cxa_rethrow ();
0x00015a76 ldr.w r8, [r6] | r8 = *(r6);
0x00015a7a mov r5, r0 | r5 = r0;
0x00015a7c cmp r0, 0 |
| if (r0 != 0) {
0x00015a7e bne.w 0x15d14 | goto label_33;
| }
0x00015a82 add.w r5, r8, 4 | r5 = r8 + 4;
0x00015a86 ldr r7, [sp, 0x4c] | r7 = var_4ch;
0x00015a88 mov r0, r5 | r0 = r5;
0x00015a8a blx 0xe3fc | r0 = fcn_0000e3fc ();
0x00015a8e cmp r0, 0 |
| if (r0 != 0) {
0x00015a90 bne.w 0x15d56 | goto label_34;
| }
0x00015a94 mov r0, r5 | r0 = r5;
0x00015a96 str.w r7, [r8, 0x78] | __asm ("str.w r7, [r8, 0x78]");
0x00015a9a blx 0xecb4 | fcn_0000ecb4 ();
0x00015a9e ldr r0, [sp, 0x80] | r0 = var_80h;
| if (r0 != 0) {
0x00015aa0 cbz r0, 0x15abe |
0x00015aa2 ldr r3, [pc, 0x344] | r3 = *(0x15dea);
0x00015aa4 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00015aa6 ldrb r3, [r3] | r3 = *(r3);
0x00015aa8 cmp r3, 0 |
| if (r3 == 0) {
0x00015aaa beq.w 0x15c26 | goto label_35;
| }
0x00015aae ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x00015ab0 subs r2, r3, 1 | r2 = r3 - 1;
0x00015ab2 str r2, [r0, 8] | *((r0 + 8)) = r2;
| label_11:
0x00015ab4 cmp r3, 1 |
| if (r3 != 1) {
0x00015ab6 bne 0x15abe | goto label_36;
| }
0x00015ab8 ldr r3, [r0] | r3 = *(r0);
0x00015aba ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00015abc blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
| label_36:
0x00015abe ldr r2, [pc, 0x33c] |
0x00015ac0 ldr r3, [pc, 0x31c] | r3 = *(0x15de0);
0x00015ac2 add r2, pc | r2 = 0x2b8c4;
0x00015ac4 ldr r3, [r2, r3] | r3 = *(0x2b8c4);
0x00015ac6 ldr r2, [r3] | r2 = *(0x2b8c4);
0x00015ac8 ldr r3, [sp, 0x84] | r3 = var_84h;
0x00015aca eors r2, r3 | r2 ^= r3;
0x00015acc mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00015ad0 bne.w 0x15d10 | goto label_37;
| }
0x00015ad4 mov r0, r6 | r0 = r6;
0x00015ad6 add sp, 0x8c |
0x00015ad8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_18:
0x00015adc str.w r8, [r0] | __asm ("str.w r8, [r0]");
0x00015ae0 movs r0, 0xb8 | r0 = 0xb8;
0x00015ae2 blx 0xe3f0 | fcn_0000e3f0 ();
0x00015ae6 ldr r3, [pc, 0x304] | r3 = *(0x15dee);
0x00015ae8 adds r2, r0, 4 | r2 = r0 + 4;
0x00015aea vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x00015aee mov sl, r0 | sl = r0;
0x00015af0 mov r5, r0 | r5 = r0;
0x00015af2 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00015af6 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00015af8 adds r3, 8 | r3 += 8;
0x00015afa str r3, [sl], 0x10 | *(sl) = r3;
| sl += 0x10;
0x00015afe b 0x15926 |
| } while (1);
| label_25:
0x00015b00 strd sl, r5, [sp, 0x28] | __asm ("strd sl, r5, [var_28h]");
0x00015b04 vldr d16, [sp, 0x28] | __asm ("vldr d16, [sp, 0x28]");
0x00015b08 b 0x159f2 | goto label_0;
| label_21:
0x00015b0a ldr r0, [sp, 0x14] | r0 = var_14h;
0x00015b0c blx 0xeba0 | r0 = fcn_0000eba0 ();
0x00015b10 cmp r0, 0 |
| if (r0 == 0) {
0x00015b12 beq.w 0x1593c | goto label_1;
| }
0x00015b16 ldr r3, [pc, 0x2e8] | r3 = *(0x15e02);
0x00015b18 ldr r0, [r4, r3] | r0 = *((r4 + r3));
0x00015b1a ldr r3, [pc, 0x2e8] | r3 = *(0x15e06);
0x00015b1c add.w r2, r0, 8 | r2 = r0 + 8;
0x00015b20 str.w sb, [r0, 4] | __asm ("str.w sb, [r0, 4]");
0x00015b24 strb.w sb, [r0, 8] | *((r0 + 8)) = sb;
0x00015b28 str r2, [r0] | *(r0) = r2;
0x00015b2a ldr r2, [pc, 0x2dc] |
0x00015b2c ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00015b2e add r2, pc | r2 = 0x2b93c;
0x00015b30 mov r1, r3 | r1 = r3;
0x00015b32 str r3, [sp, 0x24] | var_24h = r3;
0x00015b34 blx 0xe424 | fcn_0000e424 ();
0x00015b38 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00015b3a blx 0xe640 | fcn_0000e640 ();
0x00015b3e b 0x1593c | goto label_1;
| label_22:
0x00015b40 ldr r3, [pc, 0x2bc] | r3 = *(0x15e00);
0x00015b42 ldr.w fp, [r4, r3] | fp = *((r4 + r3));
0x00015b46 b 0x1594a | goto label_2;
| label_31:
0x00015b48 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00015b4a blx 0xeba0 | r0 = fcn_0000eba0 ();
0x00015b4e cmp r0, 0 |
| if (r0 == 0) {
0x00015b50 beq 0x15a5e | goto label_3;
| }
0x00015b52 ldr r3, [pc, 0x2ac] | r3 = *(0x15e02);
0x00015b54 ldr r0, [r4, r3] | r0 = *((r4 + r3));
0x00015b56 ldr r3, [pc, 0x2ac] | r3 = *(0x15e06);
0x00015b58 add.w r2, r0, 8 | r2 = r0 + 8;
0x00015b5c str.w sl, [r0, 4] | __asm ("str.w sl, [r0, 4]");
0x00015b60 strb.w sl, [r0, 8] | *((r0 + 8)) = sl;
0x00015b64 str r2, [r0] | *(r0) = r2;
0x00015b66 ldr r2, [pc, 0x2a4] |
0x00015b68 ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00015b6a add r2, pc | r2 = 0x2b97c;
0x00015b6c mov r1, r3 | r1 = r3;
0x00015b6e str r3, [sp, 0xc] | var_ch = r3;
0x00015b70 blx 0xe424 | fcn_0000e424 ();
0x00015b74 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00015b76 blx 0xe640 | fcn_0000e640 ();
0x00015b7a b 0x15a5e | goto label_3;
| label_32:
0x00015b7c ldr r3, [pc, 0x280] | r3 = *(0x15e00);
0x00015b7e ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00015b80 b 0x15a68 | goto label_4;
| label_19:
0x00015b82 dmb ish | __asm ("dmb ish");
| do {
0x00015b86 ldrex r2, [fp] | __asm ("ldrex r2, [fp]");
0x00015b8a adds r2, 1 | r2++;
0x00015b8c strex r1, r2, [fp] | __asm ("strex r1, r2, [fp]");
0x00015b90 cmp r1, 0 |
0x00015b92 bne 0x15b86 |
| } while (r1 != 0);
0x00015b94 dmb ish | __asm ("dmb ish");
0x00015b98 movs r0, 0xb8 | r0 = 0xb8;
0x00015b9a str r3, [r6] | *(r6) = r3;
0x00015b9c blx 0xe3f0 | fcn_0000e3f0 ();
0x00015ba0 b 0x158f8 | goto label_5;
| label_20:
0x00015ba2 dmb ish | __asm ("dmb ish");
| do {
0x00015ba6 ldrex r3, [fp] | __asm ("ldrex r3, [fp]");
0x00015baa adds r3, 1 | r3++;
0x00015bac strex r2, r3, [fp] | __asm ("strex r2, r3, [fp]");
0x00015bb0 cmp r2, 0 |
0x00015bb2 bne 0x15ba6 |
| } while (r2 != 0);
0x00015bb4 dmb ish | __asm ("dmb ish");
0x00015bb8 b 0x15926 | goto label_6;
| label_26:
0x00015bba add.w r2, r8, 4 | r2 = r8 + 4;
0x00015bbe dmb ish | __asm ("dmb ish");
| do {
0x00015bc2 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00015bc6 subs r1, r3, 1 | r1 = r3 - 1;
0x00015bc8 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00015bcc cmp r0, 0 |
0x00015bce bne 0x15bc2 |
| } while (r0 != 0);
0x00015bd0 dmb ish | __asm ("dmb ish");
0x00015bd4 b 0x159e8 | goto label_7;
| label_23:
0x00015bd6 adds r2, r0, 4 | r2 = r0 + 4;
0x00015bd8 dmb ish | __asm ("dmb ish");
| do {
0x00015bdc ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00015be0 subs r1, r3, 1 | r1 = r3 - 1;
0x00015be2 strex ip, r1, [r2] | __asm ("strex ip, r1, [r2]");
0x00015be6 cmp.w ip, 0 |
0x00015bea bne 0x15bdc |
| } while (ip != 0);
0x00015bec dmb ish | __asm ("dmb ish");
0x00015bf0 b 0x159aa | goto label_8;
| label_29:
0x00015bf2 adds r2, r5, 4 | r2 = r5 + 4;
0x00015bf4 dmb ish | __asm ("dmb ish");
| do {
0x00015bf8 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00015bfc subs r1, r3, 1 | r1 = r3 - 1;
0x00015bfe strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00015c02 cmp r0, 0 |
0x00015c04 bne 0x15bf8 |
| } while (r0 != 0);
0x00015c06 dmb ish | __asm ("dmb ish");
0x00015c0a b 0x15a34 | goto label_9;
| label_28:
0x00015c0c adds r3, 4 | r3 += 4;
0x00015c0e dmb ish | __asm ("dmb ish");
| do {
0x00015c12 ldrex r0, [r3] | __asm ("ldrex r0, [r3]");
0x00015c16 adds r0, 1 | r0++;
0x00015c18 strex r1, r0, [r3] | __asm ("strex r1, r0, [r3]");
0x00015c1c cmp r1, 0 |
0x00015c1e bne 0x15c12 |
| } while (r1 != 0);
0x00015c20 dmb ish | __asm ("dmb ish");
0x00015c24 b 0x15a14 | goto label_10;
| label_35:
0x00015c26 add.w r2, r0, 8 | r2 = r0 + 8;
0x00015c2a dmb ish | __asm ("dmb ish");
| do {
0x00015c2e ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00015c32 subs r1, r3, 1 | r1 = r3 - 1;
0x00015c34 strex r4, r1, [r2] | __asm ("strex r4, r1, [r2]");
0x00015c38 cmp r4, 0 |
0x00015c3a bne 0x15c2e |
| } while (r4 != 0);
0x00015c3c dmb ish | __asm ("dmb ish");
0x00015c40 b 0x15ab4 | goto label_11;
| label_30:
0x00015c42 ldr r3, [r5] | r3 = *(r5);
0x00015c44 mov r0, r5 | r0 = r5;
0x00015c46 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00015c48 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00015c4a ldrb.w r3, [sb] | r3 = *(sb);
0x00015c4e cmp r3, 0 |
| if (r3 == 0) {
0x00015c50 beq 0x15cba | goto label_38;
| }
0x00015c52 ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x00015c54 subs r2, r3, 1 | r2 = r3 - 1;
0x00015c56 str r2, [r5, 8] | *((r5 + 8)) = r2;
| label_15:
0x00015c58 cmp r3, 1 |
| if (r3 != 1) {
0x00015c5a bne.w 0x15a3a | goto label_12;
| }
0x00015c5e ldr r3, [r5] | r3 = *(r5);
0x00015c60 mov r0, r5 | r0 = r5;
0x00015c62 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00015c64 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00015c66 b 0x15a3a | goto label_12;
| label_27:
0x00015c68 ldr.w r3, [r8] | r3 = *(r8);
0x00015c6c mov r0, r8 | r0 = r8;
0x00015c6e ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00015c70 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00015c72 ldrb.w r3, [sb] | r3 = *(sb);
0x00015c76 cmp r3, 0 |
| if (r3 == 0) {
0x00015c78 beq 0x15cf4 | goto label_39;
| }
0x00015c7a ldr.w r3, [r8, 8] | r3 = *((r8 + 8));
0x00015c7e subs r2, r3, 1 | r2 = r3 - 1;
0x00015c80 str.w r2, [r8, 8] | __asm ("str.w r2, [r8, 8]");
| label_17:
0x00015c84 cmp r3, 1 |
| if (r3 != 1) {
0x00015c86 bne.w 0x159ee | goto label_13;
| }
0x00015c8a ldr.w r3, [r8] | r3 = *(r8);
0x00015c8e mov r0, r8 | r0 = r8;
0x00015c90 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00015c92 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00015c94 b 0x159ee | goto label_13;
| label_24:
0x00015c96 ldr r3, [r0] | r3 = *(r0);
0x00015c98 str r0, [sp, 0x18] | var_18h = r0;
0x00015c9a ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00015c9c blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00015c9e ldrb.w r3, [sb] | r3 = *(sb);
0x00015ca2 ldr r0, [sp, 0x18] | r0 = var_18h;
| if (r3 == 0) {
0x00015ca4 cbz r3, 0x15cd6 | goto label_40;
| }
0x00015ca6 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x00015ca8 subs r2, r3, 1 | r2 = r3 - 1;
0x00015caa str r2, [r0, 8] | *((r0 + 8)) = r2;
| label_16:
0x00015cac cmp r3, 1 |
| if (r3 != 1) {
0x00015cae bne.w 0x159b0 | goto label_14;
| }
0x00015cb2 ldr r3, [r0] | r3 = *(r0);
0x00015cb4 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00015cb6 blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x00015cb8 b 0x159b0 | goto label_14;
| label_38:
0x00015cba add.w r2, r5, 8 | r2 = r5 + 8;
0x00015cbe dmb ish | __asm ("dmb ish");
| do {
0x00015cc2 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00015cc6 subs r1, r3, 1 | r1 = r3 - 1;
0x00015cc8 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00015ccc cmp r0, 0 |
0x00015cce bne 0x15cc2 |
| } while (r0 != 0);
0x00015cd0 dmb ish | __asm ("dmb ish");
0x00015cd4 b 0x15c58 | goto label_15;
| label_40:
0x00015cd6 add.w r2, r0, 8 | r2 = r0 + 8;
0x00015cda dmb ish | __asm ("dmb ish");
| do {
0x00015cde ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00015ce2 subs r1, r3, 1 | r1 = r3 - 1;
0x00015ce4 strex ip, r1, [r2] | __asm ("strex ip, r1, [r2]");
0x00015ce8 cmp.w ip, 0 |
0x00015cec bne 0x15cde |
| } while (ip != 0);
0x00015cee dmb ish | __asm ("dmb ish");
0x00015cf2 b 0x15cac | goto label_16;
| label_39:
0x00015cf4 add.w r2, r8, 8 | r2 = r8 + 8;
0x00015cf8 dmb ish | __asm ("dmb ish");
| do {
0x00015cfc ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00015d00 subs r1, r3, 1 | r1 = r3 - 1;
0x00015d02 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00015d06 cmp r0, 0 |
0x00015d08 bne 0x15cfc |
| } while (r0 != 0);
0x00015d0a dmb ish | __asm ("dmb ish");
0x00015d0e b 0x15c84 | goto label_17;
| label_37:
0x00015d10 blx 0xe864 | fcn_0000e864 ();
| label_33:
0x00015d14 ldr.w sb, [r6, 4] | sb = *((r6 + 4));
0x00015d18 cmp.w sb, 0 |
| if (sb == 0) {
0x00015d1c beq 0x15d5a | goto label_41;
| }
0x00015d1e mov r0, sb | r0 = sb;
0x00015d20 bl 0x19638 | fcn_00019638 (r0);
0x00015d24 ldr r3, [r7] | r3 = *(r7);
0x00015d26 mov r1, r8 | r1 = r8;
0x00015d28 mov r0, r7 | r0 = r7;
0x00015d2a ldr r3, [r3] | r3 = *(r3);
0x00015d2c blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00015d2e mov r0, sb | r0 = sb;
0x00015d30 bl 0x17a28 | fcn_00017a28 (r0);
| do {
0x00015d34 movs r0, 0x28 | r0 = 0x28;
0x00015d36 blx 0xe580 | fcn_0000e580 ();
0x00015d3a mov r1, r5 | r1 = r5;
0x00015d3c mov r5, r0 | r5 = r0;
0x00015d3e bl 0x18668 | fcn_00018668 (r0, r1);
0x00015d42 ldr r2, [pc, 0xcc] | r2 = *(0x15e12);
0x00015d44 mov r0, r5 | r0 = r5;
0x00015d46 ldr r3, [pc, 0xcc] | r3 = *(0x15e16);
0x00015d48 ldr r2, [r4, r2] | r2 = *((r4 + r2));
0x00015d4a str r2, [sp, 0xc] | var_ch = r2;
0x00015d4c ldr r3, [r4, r3] | r3 = *((r4 + r3));
0x00015d4e mov r1, r3 | r1 = r3;
0x00015d50 str r3, [sp, 0x10] | var_10h = r3;
0x00015d52 blx 0xeb1c | fcn_0000eb1c ();
| label_34:
0x00015d56 blx 0xe64c | fcn_0000e64c ();
| label_41:
0x00015d5a ldr r3, [r7] | r3 = *(r7);
0x00015d5c mov r1, r8 | r1 = r8;
0x00015d5e mov r0, r7 | r0 = r7;
0x00015d60 ldr r3, [r3] | r3 = *(r3);
0x00015d62 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00015d64 b 0x15d34 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x13ec4 */
| #include <stdint.h>
|
; (fcn) method.mqtt::async_client.subscribe_std::shared_ptr_mqtt::string_collection_const___std::vector_int__std::allocator_int____const__std::vector_mqtt::subscribe_options__std::allocator_mqtt::subscribe_options____const__mqtt::properties_const_ () | void method_mqtt::async_client_subscribe_std::shared_ptr_mqtt::string_collection_const_std::vector_int_std::allocator_int_const_std::vector_mqtt::subscribe_options_std::allocator_mqtt::subscribe_options_const_mqtt::properties_const_ (int16_t arg_140h, int16_t arg_144h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_3ch;
| int16_t var_44h;
| int16_t var_8ch;
| int16_t var_90h;
| int16_t var_a0h;
| int16_t var_ach;
| int16_t var_cch;
| int16_t var_f4h;
| int16_t var_f8h;
| int16_t var_108h;
| int16_t var_114h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| /* mqtt::async_client::subscribe(std::shared_ptr<qtt::string_collection const>, std::vector<int, std::allocator<int> > const&, std::vector<qtt::subscribe_options, std::allocator<qtt::subscribe_options> > const&, mqtt::properties const&) */
0x00013ec4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00013ec8 sub sp, 0x11c |
0x00013eca str r2, [sp, 8] | var_8h = r2;
0x00013ecc mov r6, r2 | r6 = r2;
0x00013ece mov r8, r3 | r8 = r3;
0x00013ed0 mov r5, r0 | r5 = r0;
0x00013ed2 ldr.w r2, [pc, 0x4e8] |
0x00013ed6 mov r4, r1 | r4 = r1;
0x00013ed8 ldr.w r3, [pc, 0x4e4] | r3 = *(0x143c0);
0x00013edc movw r1, 0xaaab |
0x00013ee0 ldr.w sb, [r6] | sb = *(r6);
| /* if there is a right shift of 1, then it's a division by 1/3 */
0x00013ee4 movt r1, 0xaaaa | r1 = 0xaaaaaaab;
0x00013ee8 add r2, pc | r2 = 0x282aa;
0x00013eea ldr.w r7, [pc, 0x4d8] |
0x00013eee ldr r3, [r2, r3] |
0x00013ef0 add r7, pc | r7 = 0x282ba;
0x00013ef2 ldr r3, [r3] | r3 = *(0x282aa);
0x00013ef4 str r3, [sp, 0x114] | var_114h = r3;
0x00013ef6 mov.w r3, 0 | r3 = 0;
0x00013efa ldr r3, [sp, 0x140] | r3 = *(arg_140h);
0x00013efc str r3, [sp, 0x14] | var_14h = r3;
0x00013efe ldrd r2, r3, [r8] | __asm ("ldrd r2, r3, [r8]");
0x00013f02 subs r2, r3, r2 | r2 = r3 - r2;
0x00013f04 ldrd r0, r3, [sb] | __asm ("ldrd r0, r3, [sb]");
0x00013f08 subs r3, r3, r0 | r3 -= r0;
0x00013f0a asrs r3, r3, 3 | r3 >>= 3;
0x00013f0c mul r3, r1, r3 | r3 = r1 * r3;
0x00013f10 ldr r1, [sp, 0x144] | r1 = *(arg_144h);
0x00013f12 str r1, [sp, 0x18] | var_18h = r1;
0x00013f14 cmp.w r3, r2, asr 2 |
0x00013f18 str r3, [sp, 0xc] | var_ch = r3;
| if (r3 != r2) {
0x00013f1a bne.w 0x1436c | goto label_18;
| }
0x00013f1e ldr r3, [r4] | r3 = *(r4);
0x00013f20 ldr r3, [r3, -0x94] | r3 = *((r3 - 0x94));
0x00013f24 add.w fp, r4, r3 |
0x00013f28 ldr r3, [sp, 8] | r3 = var_8h;
0x00013f2a ldr r6, [r3, 4] | r6 = *((r3 + 4));
0x00013f2c cmp r6, 0 |
| if (r6 == 0) {
0x00013f2e beq.w 0x14116 | goto label_19;
| }
0x00013f32 ldr.w r3, [pc, 0x494] | r3 = *(0x143ca);
0x00013f36 ldr.w sl, [r7, r3] | sl = *((r7 + r3));
0x00013f3a ldrb.w r3, [sl] | r3 = *(sl);
0x00013f3e cmp r3, 0 |
| if (r3 == 0) {
0x00013f40 beq.w 0x14146 | goto label_20;
| }
0x00013f44 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00013f46 movs r0, 0xb0 | r0 = 0xb0;
0x00013f48 adds r3, 1 | r3++;
0x00013f4a str r3, [r6, 4] | *((r6 + 4)) = r3;
0x00013f4c movs r3, 0 | r3 = 0;
0x00013f4e str r3, [r5] | *(r5) = r3;
0x00013f50 blx 0xe3f0 | fcn_0000e3f0 ();
| label_1:
0x00013f54 vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x00013f58 adds r2, r0, 4 | r2 = r0 + 4;
0x00013f5a ldr.w r3, [pc, 0x470] | r3 = *(0x143ce);
0x00013f5e str r0, [sp, 0x10] | var_10h = r0;
0x00013f60 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00013f64 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00013f66 strd sb, r6, [sp, 0x38] | __asm ("strd sb, r6, [var_3ch]");
0x00013f6a mov sb, r0 | sb = r0;
0x00013f6c adds r3, 8 | r3 += 8;
0x00013f6e str r3, [sb], 0x10 | *(sb) = r3;
| sb += 0x10;
0x00013f72 ldrb.w r3, [sl] | r3 = *(sl);
0x00013f76 cmp r3, 0 |
| if (r3 == 0) {
0x00013f78 beq.w 0x141ee | goto label_21;
| }
0x00013f7c ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00013f7e adds r3, 1 | r3++;
0x00013f80 str r3, [r6, 4] | *((r6 + 4)) = r3;
| do {
| label_7:
0x00013f82 mov r2, fp | r2 = fp;
0x00013f84 add.w fp, sp, 0x38 |
0x00013f88 mov r3, fp | r3 = fp;
0x00013f8a movs r1, 1 | r1 = 1;
0x00013f8c mov r0, sb | r0 = sb;
0x00013f8e blx 0xeab0 | fcn_0000eab0 ();
0x00013f92 ldr r0, [sp, 0x3c] | r0 = var_3ch;
| if (r0 != 0) {
0x00013f94 cbz r0, 0x13fb4 |
0x00013f96 ldr.w r3, [pc, 0x430] | r3 = *(0x143ca);
0x00013f9a ldr.w sl, [r7, r3] | sl = *((r7 + r3));
0x00013f9e ldrb.w r3, [sl] | r3 = *(sl);
0x00013fa2 cmp r3, 0 |
| if (r3 == 0) {
0x00013fa4 beq.w 0x141d2 | goto label_22;
| }
0x00013fa8 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x00013faa subs r2, r3, 1 | r2 = r3 - 1;
0x00013fac str r2, [r0, 4] | *((r0 + 4)) = r2;
| label_6:
0x00013fae cmp r3, 1 |
| if (r3 == 1) {
0x00013fb0 beq.w 0x1424a | goto label_23;
| }
| }
| label_10:
0x00013fb4 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00013fb6 strd sb, r3, [r5] | __asm ("strd sb, r3, [r5]");
0x00013fba cmp r6, 0 |
| if (r6 == 0) {
0x00013fbc beq.w 0x1413c | goto label_24;
| }
0x00013fc0 ldr.w r3, [pc, 0x404] | r3 = *(0x143c8);
0x00013fc4 ldr.w sl, [r7, r3] | sl = *((r7 + r3));
0x00013fc8 ldrb.w r3, [sl] | r3 = *(sl);
0x00013fcc cmp r3, 0 |
| if (r3 == 0) {
0x00013fce beq.w 0x141b8 | goto label_25;
| }
0x00013fd2 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00013fd4 subs r2, r3, 1 | r2 = r3 - 1;
0x00013fd6 str r2, [r6, 4] | *((r6 + 4)) = r2;
| label_5:
0x00013fd8 cmp r3, 1 |
| if (r3 == 1) {
0x00013fda beq.w 0x14224 | goto label_26;
| }
| label_9:
0x00013fde vld1.32 {d7}, [r5] | __asm ("vld1.32 {d7}, [r5]");
| label_0:
0x00013fe2 ldr r3, [r4] | r3 = *(r4);
0x00013fe4 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00013fe6 ldr.w r2, [r3, 0x8c] | r2 = *((r3 + 0x8c));
0x00013fea vmov r3, s14 | __asm ("vmov r3, s14");
0x00013fee str.w r1, [r3, 0x8c] | __asm ("str.w r1, [r3, 0x8c]");
0x00013ff2 vmov.32 r3, d7[1] | __asm ("vmov.32 r3, d7[1]");
0x00013ff6 vstr d7, [sp, 0x38] | __asm ("vstr d7, [sp, 0x38]");
| if (r3 != 0) {
0x00013ffa cbz r3, 0x1400e |
0x00013ffc ldr r1, [pc, 0x3c8] | r1 = *(0x143c8);
0x00013ffe ldr r1, [r7, r1] | r1 = *((r7 + r1));
0x00014000 ldrb r1, [r1] | r1 = *(r1);
0x00014002 cmp r1, 0 |
| if (r1 == 0) {
0x00014004 beq.w 0x1419e | goto label_27;
| }
0x00014008 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x0001400a adds r1, 1 | r1++;
0x0001400c str r1, [r3, 4] | *((r3 + 4)) = r1;
| }
| label_4:
0x0001400e mov r1, fp | r1 = fp;
0x00014010 mov r0, r4 | r0 = r4;
0x00014012 blx r2 | uint32_t (*r2)(uint32_t, uint32_t) (r0, r1);
0x00014014 ldr r6, [sp, 0x3c] | r6 = var_3ch;
| if (r6 != 0) {
0x00014016 cbz r6, 0x14034 |
0x00014018 ldr r3, [pc, 0x3ac] | r3 = *(0x143c8);
0x0001401a ldr.w sl, [r7, r3] | sl = *((r7 + r3));
0x0001401e ldrb.w r3, [sl] | r3 = *(sl);
0x00014022 cmp r3, 0 |
| if (r3 == 0) {
0x00014024 beq.w 0x14184 | goto label_28;
| }
0x00014028 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x0001402a subs r2, r3, 1 | r2 = r3 - 1;
0x0001402c str r2, [r6, 4] | *((r6 + 4)) = r2;
| label_3:
0x0001402e cmp r3, 1 |
| if (r3 == 1) {
0x00014030 beq.w 0x1426e | goto label_29;
| }
| }
| label_11:
0x00014034 add.w sb, sp, 0xac | sb += var_ach;
0x00014038 ldr r1, [r4, 0x50] | r1 = *((r4 + 0x50));
0x0001403a mov r0, sb | r0 = sb;
0x0001403c blx 0xeaf8 | fcn_0000eaf8 ();
0x00014040 mov r1, r5 | r1 = r5;
0x00014042 mov r0, sb | r0 = sb;
0x00014044 blx 0xecc0 | fcn_0000ecc0 ();
0x00014048 ldr r1, [sp, 0x14] | r1 = var_14h;
0x0001404a mov r0, sb | r0 = sb;
0x0001404c blx 0xe9a4 | MQTTAsync_sendMessage ();
0x00014050 add r6, sp, 0xf8 | r6 += var_f8h;
0x00014052 mov r0, r6 | r0 = r6;
0x00014054 blx 0xebc4 | fcn_0000ebc4 ();
0x00014058 add.w sl, sp, 0x20 | sl += var_20h;
0x0001405c ldr r1, [sp, 0x18] | r1 = var_18h;
0x0001405e mov r0, sl | r0 = sl;
0x00014060 blx 0xe940 | fcn_0000e940 ();
0x00014064 add r3, sp, 0x44 | r3 += var_44h;
0x00014066 add.w ip, sp, 0xcc |
0x0001406a str r3, [sp, 0x10] | var_10h = r3;
0x0001406c ldm.w sl, {r0, r1, r2, r3} | r0 = *(sl);
| r1 = *((sl + 4));
| r2 = *((sl + 8));
| r3 = *((sl + 12));
0x00014070 stm.w r6, {r0, r1, r2, r3} | *(r6) = r0;
| *((r6 + 4)) = r1;
| *((r6 + 8)) = r2;
| *((r6 + 12)) = r3;
0x00014074 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x00014078 mov r1, sb | r1 = sb;
0x0001407a ldr r0, [sp, 0x10] | r0 = var_10h;
0x0001407c blx 0xeb70 | fcn_0000eb70 ();
0x00014080 ldr r0, [sp, 0x108] | r0 = var_108h;
| if (r0 != 0) {
0x00014082 cbz r0, 0x14088 |
0x00014084 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x00014088 mov r0, r6 | r0 = r6;
0x0001408a blx 0xebc4 | fcn_0000ebc4 ();
0x0001408e ldr r0, [sp, 0xf4] | r0 = var_f4h;
| if (r0 != 0) {
0x00014090 cbz r0, 0x140ac |
0x00014092 ldr r3, [pc, 0x334] | r3 = *(0x143ca);
0x00014094 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00014096 ldrb r3, [r3] | r3 = *(r3);
0x00014098 cmp r3, 0 |
| if (r3 == 0) {
0x0001409a beq 0x14168 | goto label_30;
| }
0x0001409c ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x0001409e subs r2, r3, 1 | r2 = r3 - 1;
0x000140a0 str r2, [r0, 8] | *((r0 + 8)) = r2;
| label_2:
0x000140a2 cmp r3, 1 |
| if (r3 != 1) {
0x000140a4 bne 0x140ac | goto label_31;
| }
0x000140a6 ldr r3, [r0] | r3 = *(r0);
0x000140a8 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000140aa blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
| label_31:
0x000140ac ldr r3, [sp, 8] | r3 = var_8h;
0x000140ae ldr r0, [sp, 0x10] | r0 = var_10h;
0x000140b0 ldr r1, [sp, 0xc] | r1 = var_ch;
0x000140b2 ldr r2, [r3] | r2 = *(r3);
0x000140b4 ldr.w r3, [r8] | r3 = *(r8);
0x000140b8 ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x000140ba str r0, [sp] | *(sp) = r0;
0x000140bc ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x000140be blx 0xe9bc | r0 = fcn_0000e9bc ();
0x000140c2 mov r6, r0 | r6 = r0;
0x000140c4 cmp r0, 0 |
| if (r0 != 0) {
0x000140c6 bne.w 0x142e8 | goto label_32;
| }
0x000140ca ldr r0, [sp, 0xa0] | r0 = var_a0h;
| if (r0 != 0) {
0x000140cc cbz r0, 0x140d2 |
0x000140ce blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x000140d2 add r0, sp, 0x90 | r0 += var_90h;
0x000140d4 blx 0xebc4 | fcn_0000ebc4 ();
0x000140d8 ldr r0, [sp, 0x8c] | r0 = var_8ch;
| if (r0 != 0) {
0x000140da cbz r0, 0x140f8 |
0x000140dc ldr r3, [pc, 0x2e8] | r3 = *(0x143c8);
0x000140de ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x000140e0 ldrb r3, [r3] | r3 = *(r3);
0x000140e2 cmp r3, 0 |
| if (r3 == 0) {
0x000140e4 beq.w 0x14208 | goto label_33;
| }
0x000140e8 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x000140ea subs r2, r3, 1 | r2 = r3 - 1;
0x000140ec str r2, [r0, 8] | *((r0 + 8)) = r2;
| label_8:
0x000140ee cmp r3, 1 |
| if (r3 != 1) {
0x000140f0 bne 0x140f8 | goto label_34;
| }
0x000140f2 ldr r3, [r0] | r3 = *(r0);
0x000140f4 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000140f6 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
| label_34:
0x000140f8 ldr r2, [pc, 0x2d4] |
0x000140fa ldr r3, [pc, 0x2c4] | r3 = *(0x143c2);
0x000140fc add r2, pc | r2 = 0x284d0;
0x000140fe ldr r3, [r2, r3] | r3 = *(0x284d0);
0x00014100 ldr r2, [r3] | r2 = *(0x284d0);
0x00014102 ldr r3, [sp, 0x114] | r3 = var_114h;
0x00014104 eors r2, r3 | r2 ^= r3;
0x00014106 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0001410a bne.w 0x14332 | goto label_35;
| }
0x0001410e mov r0, r5 | r0 = r5;
0x00014110 add sp, 0x11c |
0x00014112 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_19:
0x00014116 movs r0, 0xb0 | r0 = 0xb0;
0x00014118 str r6, [r5] | *(r5) = r6;
0x0001411a blx 0xe3f0 | fcn_0000e3f0 ();
0x0001411e vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x00014122 adds r2, r0, 4 | r2 = r0 + 4;
0x00014124 ldr r3, [pc, 0x2a4] | r3 = *(0x143cc);
0x00014126 str r0, [sp, 0x10] | var_10h = r0;
0x00014128 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x0001412c ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x0001412e strd sb, r6, [sp, 0x38] | __asm ("strd sb, r6, [var_3ch]");
0x00014132 mov sb, r0 | sb = r0;
0x00014134 adds r3, 8 | r3 += 8;
0x00014136 str r3, [sb], 0x10 | *(sb) = r3;
| sb += 0x10;
0x0001413a b 0x13f82 |
| } while (1);
| label_24:
0x0001413c strd sb, r3, [sp, 0x30] | __asm ("strd sb, r3, [sp, 0x30]");
0x00014140 vldr d7, [sp, 0x30] | __asm ("vldr d7, [sp, 0x30]");
0x00014144 b 0x13fe2 | goto label_0;
| label_20:
0x00014146 adds r2, r6, 4 | r2 = r6 + 4;
0x00014148 dmb ish | __asm ("dmb ish");
| do {
0x0001414c ldrex r0, [r2] | __asm ("ldrex r0, [r2]");
0x00014150 adds r0, 1 | r0++;
0x00014152 strex r1, r0, [r2] | __asm ("strex r1, r0, [r2]");
0x00014156 cmp r1, 0 |
0x00014158 bne 0x1414c |
| } while (r1 != 0);
0x0001415a dmb ish | __asm ("dmb ish");
0x0001415e movs r0, 0xb0 | r0 = 0xb0;
0x00014160 str r3, [r5] | *(r5) = r3;
0x00014162 blx 0xe3f0 | fcn_0000e3f0 ();
0x00014166 b 0x13f54 | goto label_1;
| label_30:
0x00014168 add.w r2, r0, 8 | r2 = r0 + 8;
0x0001416c dmb ish | __asm ("dmb ish");
| do {
0x00014170 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00014174 subs r1, r3, 1 | r1 = r3 - 1;
0x00014176 strex r6, r1, [r2] | __asm ("strex r6, r1, [r2]");
0x0001417a cmp r6, 0 |
0x0001417c bne 0x14170 |
| } while (r6 != 0);
0x0001417e dmb ish | __asm ("dmb ish");
0x00014182 b 0x140a2 | goto label_2;
| label_28:
0x00014184 adds r2, r6, 4 | r2 = r6 + 4;
0x00014186 dmb ish | __asm ("dmb ish");
| do {
0x0001418a ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x0001418e subs r1, r3, 1 | r1 = r3 - 1;
0x00014190 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00014194 cmp r0, 0 |
0x00014196 bne 0x1418a |
| } while (r0 != 0);
0x00014198 dmb ish | __asm ("dmb ish");
0x0001419c b 0x1402e | goto label_3;
| label_27:
0x0001419e adds r3, 4 | r3 += 4;
0x000141a0 dmb ish | __asm ("dmb ish");
| do {
0x000141a4 ldrex r0, [r3] | __asm ("ldrex r0, [r3]");
0x000141a8 adds r0, 1 | r0++;
0x000141aa strex r1, r0, [r3] | __asm ("strex r1, r0, [r3]");
0x000141ae cmp r1, 0 |
0x000141b0 bne 0x141a4 |
| } while (r1 != 0);
0x000141b2 dmb ish | __asm ("dmb ish");
0x000141b6 b 0x1400e | goto label_4;
| label_25:
0x000141b8 adds r2, r6, 4 | r2 = r6 + 4;
0x000141ba dmb ish | __asm ("dmb ish");
| do {
0x000141be ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000141c2 subs r1, r3, 1 | r1 = r3 - 1;
0x000141c4 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x000141c8 cmp r0, 0 |
0x000141ca bne 0x141be |
| } while (r0 != 0);
0x000141cc dmb ish | __asm ("dmb ish");
0x000141d0 b 0x13fd8 | goto label_5;
| label_22:
0x000141d2 adds r2, r0, 4 | r2 = r0 + 4;
0x000141d4 dmb ish | __asm ("dmb ish");
| do {
0x000141d8 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000141dc subs r1, r3, 1 | r1 = r3 - 1;
0x000141de strex ip, r1, [r2] | __asm ("strex ip, r1, [r2]");
0x000141e2 cmp.w ip, 0 |
0x000141e6 bne 0x141d8 |
| } while (ip != 0);
0x000141e8 dmb ish | __asm ("dmb ish");
0x000141ec b 0x13fae | goto label_6;
| label_21:
0x000141ee adds r3, r6, 4 | r3 = r6 + 4;
0x000141f0 dmb ish | __asm ("dmb ish");
| do {
0x000141f4 ldrex r1, [r3] | __asm ("ldrex r1, [r3]");
0x000141f8 adds r1, 1 | r1++;
0x000141fa strex r2, r1, [r3] | __asm ("strex r2, r1, [r3]");
0x000141fe cmp r2, 0 |
0x00014200 bne 0x141f4 |
| } while (r2 != 0);
0x00014202 dmb ish | __asm ("dmb ish");
0x00014206 b 0x13f82 | goto label_7;
| label_33:
0x00014208 add.w r2, r0, 8 | r2 = r0 + 8;
0x0001420c dmb ish | __asm ("dmb ish");
| do {
0x00014210 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00014214 subs r1, r3, 1 | r1 = r3 - 1;
0x00014216 strex r4, r1, [r2] | __asm ("strex r4, r1, [r2]");
0x0001421a cmp r4, 0 |
0x0001421c bne 0x14210 |
| } while (r4 != 0);
0x0001421e dmb ish | __asm ("dmb ish");
0x00014222 b 0x140ee | goto label_8;
| label_26:
0x00014224 ldr r3, [r6] | r3 = *(r6);
0x00014226 mov r0, r6 | r0 = r6;
0x00014228 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0001422a blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0001422c ldrb.w r3, [sl] | r3 = *(sl);
0x00014230 cmp r3, 0 |
| if (r3 == 0) {
0x00014232 beq 0x142cc | goto label_36;
| }
0x00014234 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00014236 subs r2, r3, 1 | r2 = r3 - 1;
0x00014238 str r2, [r6, 8] | *((r6 + 8)) = r2;
| label_14:
0x0001423a cmp r3, 1 |
| if (r3 != 1) {
0x0001423c bne.w 0x13fde | goto label_9;
| }
0x00014240 ldr r3, [r6] | r3 = *(r6);
0x00014242 mov r0, r6 | r0 = r6;
0x00014244 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00014246 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00014248 b 0x13fde | goto label_9;
| label_23:
0x0001424a ldr r3, [r0] | r3 = *(r0);
0x0001424c str r0, [sp, 0x1c] | var_1ch = r0;
0x0001424e ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00014250 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00014252 ldrb.w r3, [sl] | r3 = *(sl);
0x00014256 ldr r0, [sp, 0x1c] | r0 = var_1ch;
| if (r3 == 0) {
0x00014258 cbz r3, 0x142ae | goto label_37;
| }
0x0001425a ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x0001425c subs r2, r3, 1 | r2 = r3 - 1;
0x0001425e str r2, [r0, 8] | *((r0 + 8)) = r2;
| label_13:
0x00014260 cmp r3, 1 |
| if (r3 != 1) {
0x00014262 bne.w 0x13fb4 | goto label_10;
| }
0x00014266 ldr r3, [r0] | r3 = *(r0);
0x00014268 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0001426a blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x0001426c b 0x13fb4 | goto label_10;
| label_29:
0x0001426e ldr r3, [r6] | r3 = *(r6);
0x00014270 mov r0, r6 | r0 = r6;
0x00014272 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00014274 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00014276 ldrb.w r3, [sl] | r3 = *(sl);
| if (r3 == 0) {
0x0001427a cbz r3, 0x14292 | goto label_38;
| }
0x0001427c ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0001427e subs r2, r3, 1 | r2 = r3 - 1;
0x00014280 str r2, [r6, 8] | *((r6 + 8)) = r2;
| label_12:
0x00014282 cmp r3, 1 |
| if (r3 != 1) {
0x00014284 bne.w 0x14034 | goto label_11;
| }
0x00014288 ldr r3, [r6] | r3 = *(r6);
0x0001428a mov r0, r6 | r0 = r6;
0x0001428c ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0001428e blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00014290 b 0x14034 | goto label_11;
| label_38:
0x00014292 add.w r2, r6, 8 | r2 = r6 + 8;
0x00014296 dmb ish | __asm ("dmb ish");
| do {
0x0001429a ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x0001429e subs r1, r3, 1 | r1 = r3 - 1;
0x000142a0 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x000142a4 cmp r0, 0 |
0x000142a6 bne 0x1429a |
| } while (r0 != 0);
0x000142a8 dmb ish | __asm ("dmb ish");
0x000142ac b 0x14282 | goto label_12;
| label_37:
0x000142ae add.w r2, r0, 8 | r2 = r0 + 8;
0x000142b2 dmb ish | __asm ("dmb ish");
| do {
0x000142b6 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000142ba subs r1, r3, 1 | r1 = r3 - 1;
0x000142bc strex ip, r1, [r2] | __asm ("strex ip, r1, [r2]");
0x000142c0 cmp.w ip, 0 |
0x000142c4 bne 0x142b6 |
| } while (ip != 0);
0x000142c6 dmb ish | __asm ("dmb ish");
0x000142ca b 0x14260 | goto label_13;
| label_36:
0x000142cc add.w r2, r6, 8 | r2 = r6 + 8;
0x000142d0 dmb ish | __asm ("dmb ish");
| do {
0x000142d4 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000142d8 subs r1, r3, 1 | r1 = r3 - 1;
0x000142da strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x000142de cmp r0, 0 |
0x000142e0 bne 0x142d4 |
| } while (r0 != 0);
0x000142e2 dmb ish | __asm ("dmb ish");
0x000142e6 b 0x1423a | goto label_14;
| label_32:
0x000142e8 vld1.32 {d16}, [r5] | __asm ("vld1.32 {d16}, [r5]");
0x000142ec ldr r3, [r4] | r3 = *(r4);
0x000142ee vmov.32 r0, d16[1] | __asm ("vmov.32 r0, d16[1]");
0x000142f2 ldr.w r8, [r3, 0x94] | r8 = *((r3 + 0x94));
0x000142f6 vstr d16, [sp, 0x38] | __asm ("vstr d16, [sp, 0x38]");
| if (r0 != 0) {
0x000142fa cbz r0, 0x14300 |
0x000142fc bl 0x19638 | fcn_00019638 (r0);
| }
0x00014300 mov r1, fp | r1 = fp;
0x00014302 mov r0, r4 | r0 = r4;
0x00014304 blx r8 | uint32_t (*r8)(uint32_t, uint32_t) (r0, r1);
0x00014306 ldr r0, [sp, 0x3c] | r0 = var_3ch;
| if (r0 != 0) {
0x00014308 cbz r0, 0x1430e |
0x0001430a bl 0x17a28 | fcn_00017a28 (r0);
| }
0x0001430e movs r0, 0x28 | r0 = 0x28;
0x00014310 blx 0xe580 | fcn_0000e580 ();
0x00014314 mov r1, r6 | r1 = r6;
0x00014316 mov r4, r0 | r4 = r0;
0x00014318 bl 0x18668 | fcn_00018668 (r0, r1);
0x0001431c ldr r3, [pc, 0xb4] | r3 = *(0x143d4);
0x0001431e mov r0, r4 | r0 = r4;
0x00014320 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00014322 str r3, [sp, 8] | var_8h = r3;
0x00014324 mov r2, r3 | r2 = r3;
0x00014326 ldr r3, [pc, 0xb0] | r3 = *(0x143da);
0x00014328 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x0001432a mov r1, r3 | r1 = r3;
0x0001432c str r3, [sp, 8] | var_8h = r3;
0x0001432e blx 0xeb1c | fcn_0000eb1c ();
| label_35:
0x00014332 blx 0xe864 | fcn_0000e864 ();
0x00014336 ldr r0, [sp, 0x3c] | r0 = var_3ch;
| if (r0 == 0) {
0x00014338 cbz r0, 0x14396 | goto label_39;
| }
0x0001433a bl 0x17a28 | fcn_00017a28 (r0);
0x0001433e b 0x14396 | goto label_39;
| label_15:
0x00014340 mov r0, r6 | r0 = r6;
0x00014342 bl 0x17a28 | r0 = fcn_00017a28 (r0);
| do {
| label_16:
0x00014346 blx 0xe870 | fcn_0000e870 ();
0x0001434a ldr r0, [sp, 0x3c] | r0 = var_3ch;
| if (r0 != 0) {
0x0001434c cbz r0, 0x14352 |
0x0001434e bl 0x17a28 | fcn_00017a28 (r0);
| }
0x00014352 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00014354 blx 0xe7c0 | fcn_0000e7c0 ();
0x00014358 cmp r6, 0 |
0x0001435a beq 0x14346 |
| } while (r6 == 0);
0x0001435c b 0x14340 | goto label_15;
| label_17:
0x0001435e ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x00014360 cmp r0, 0 |
| if (r0 == 0) {
0x00014362 beq 0x14346 | goto label_16;
| }
0x00014364 bl 0x17a28 | fcn_00017a28 (r0);
0x00014368 b 0x14346 | goto label_16;
| label_18:
0x0001436c movs r0, 8 | r0 = 8;
0x0001436e blx 0xe580 | fcn_0000e580 ();
0x00014372 ldr r1, [pc, 0x68] |
0x00014374 mov r4, r0 | r4 = r0;
0x00014376 add r1, pc | r1 = 0x28758;
0x00014378 blx 0xec50 | fcn_0000ec50 ();
0x0001437c ldr r2, [pc, 0x60] | r2 = *(0x143e0);
0x0001437e mov r0, r4 | r0 = r4;
0x00014380 ldr r3, [pc, 0x60] | r3 = *(0x143e4);
0x00014382 ldr r2, [r7, r2] | r2 = *((r7 + r2));
0x00014384 str r2, [sp, 8] | var_8h = r2;
0x00014386 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00014388 mov r1, r3 | r1 = r3;
0x0001438a str r3, [sp, 0xc] | var_ch = r3;
0x0001438c blx 0xeb1c | fcn_0000eb1c ();
0x00014390 mov r0, r4 | r0 = r4;
0x00014392 blx 0xe694 | fcn_0000e694 ();
| label_39:
0x00014396 ldr r0, [sp, 0x10] | r0 = var_10h;
0x00014398 bl 0x1904c | fcn_0001904c (r0);
0x0001439c b 0x1435e | goto label_17;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x148cc */
| #include <stdint.h>
|
; (fcn) method.mqtt::async_client.subscribe_std::shared_ptr_mqtt::string_collection_const___std::vector_int__std::allocator_int____const__void__mqtt::iaction_listener__std::vector_mqtt::subscribe_options__std::allocator_mqtt::subscribe_options____const__mqtt () | void method_mqtt::async_client_subscribe_std::shared_ptr_mqtt::string_collection_const_std::vector_int_std::allocator_int_const_void_mqtt::iaction_listener_std::vector_mqtt::subscribe_options_std::allocator_mqtt::subscribe_options_const_mqtt (int16_t arg_148h, int16_t arg_14ch, int16_t arg_150h, int16_t arg_154h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_28h;
| int32_t var_38h;
| int32_t var_38h_2;
| int16_t var_40h;
| int16_t var_44h;
| int16_t var_4ch;
| int16_t var_94h;
| int16_t var_98h;
| int16_t var_a8h;
| int16_t var_b4h;
| int16_t var_d4h;
| int16_t var_fch;
| int16_t var_100h;
| int16_t var_110h;
| int16_t var_11ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| /* mqtt::async_client::subscribe(std::shared_ptr<qtt::string_collection const>, std::vector<int, std::allocator<int> > const&, void*, mqtt::iaction_listener&, std::vector<qtt::subscribe_options, std::allocator<qtt::subscribe_options> > const&, mqtt::properties const&) */
0x000148cc push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000148d0 sub sp, 0x124 |
0x000148d2 str r2, [sp, 0xc] | var_ch = r2;
0x000148d4 mov r6, r2 | r6 = r2;
0x000148d6 mov sl, r3 | sl = r3;
0x000148d8 mov r5, r0 | r5 = r0;
0x000148da ldr.w r2, [pc, 0x4f4] |
0x000148de mov r4, r1 | r4 = r1;
0x000148e0 ldr.w r3, [pc, 0x4f0] | r3 = *(0x14dd4);
0x000148e4 movw r1, 0xaaab |
0x000148e8 ldr.w sb, [r6] | sb = *(r6);
| /* if there is a right shift of 1, then it's a division by 1/3 */
0x000148ec movt r1, 0xaaaa | r1 = 0xaaaaaaab;
0x000148f0 add r2, pc | r2 = 0x296c6;
0x000148f2 ldr.w r7, [pc, 0x4e4] |
0x000148f6 ldr r3, [r2, r3] |
0x000148f8 add r7, pc | r7 = 0x296d6;
0x000148fa ldr r3, [r3] | r3 = *(0x296c6);
0x000148fc str r3, [sp, 0x11c] | var_11ch = r3;
0x000148fe mov.w r3, 0 | r3 = 0;
0x00014902 ldr r3, [sp, 0x148] | r3 = *(arg_148h);
0x00014904 str r3, [sp, 0x18] | var_18h = r3;
0x00014906 ldrd r2, r3, [sl] | __asm ("ldrd r2, r3, [sl]");
0x0001490a subs r2, r3, r2 | r2 = r3 - r2;
0x0001490c ldrd r0, r3, [sb] | __asm ("ldrd r0, r3, [sb]");
0x00014910 subs r3, r3, r0 | r3 -= r0;
0x00014912 asrs r3, r3, 3 | r3 >>= 3;
0x00014914 mul r3, r1, r3 | r3 = r1 * r3;
0x00014918 ldr r1, [sp, 0x14c] | r1 = *(arg_14ch);
0x0001491a str r1, [sp, 0x1c] | var_1ch = r1;
0x0001491c ldr r1, [sp, 0x150] | r1 = *(arg_150h);
0x0001491e cmp.w r3, r2, asr 2 |
0x00014922 str r3, [sp, 0x10] | var_10h = r3;
0x00014924 str r1, [sp, 0x20] | var_20h = r1;
0x00014926 ldr r1, [sp, 0x154] | r1 = *(arg_154h);
0x00014928 str r1, [sp, 0x24] | var_24h = r1;
| if (r3 != r2) {
0x0001492a bne.w 0x14d80 | goto label_18;
| }
0x0001492e ldr r3, [r4] | r3 = *(r4);
0x00014930 ldr r3, [r3, -0x94] | r3 = *((r3 - 0x94));
0x00014934 adds r3, r4, r3 | r3 = r4 + r3;
0x00014936 str r3, [sp, 0x14] | var_14h = r3;
0x00014938 ldr r3, [sp, 0xc] | r3 = var_ch;
0x0001493a ldr r6, [r3, 4] | r6 = *((r3 + 4));
0x0001493c cmp r6, 0 |
| if (r6 == 0) {
0x0001493e beq.w 0x14b2a | goto label_19;
| }
0x00014942 ldr.w r3, [pc, 0x498] | r3 = *(0x14dde);
0x00014946 ldr.w fp, [r7, r3] | fp = *((r7 + r3));
0x0001494a ldrb.w r3, [fp] | r3 = *(fp);
0x0001494e cmp r3, 0 |
| if (r3 == 0) {
0x00014950 beq.w 0x14b5a | goto label_20;
| }
0x00014954 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00014956 movs r0, 0xb0 | r0 = 0xb0;
0x00014958 adds r3, 1 | r3++;
0x0001495a str r3, [r6, 4] | *((r6 + 4)) = r3;
0x0001495c movs r3, 0 | r3 = 0;
0x0001495e str r3, [r5] | *(r5) = r3;
0x00014960 blx 0xe3f0 | fcn_0000e3f0 ();
| label_1:
0x00014964 vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x00014968 adds r2, r0, 4 | r2 = r0 + 4;
0x0001496a ldr.w r3, [pc, 0x474] | r3 = *(0x14de2);
0x0001496e mov r8, r0 | r8 = r0;
0x00014970 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00014974 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00014976 strd sb, r6, [sp, 0x40] | __asm ("strd sb, r6, [var_44h]");
0x0001497a mov sb, r0 | sb = r0;
0x0001497c adds r3, 8 | r3 += 8;
0x0001497e str r3, [sb], 0x10 | *(sb) = r3;
| sb += 0x10;
0x00014982 ldrb.w r3, [fp] | r3 = *(fp);
0x00014986 cmp r3, 0 |
| if (r3 == 0) {
0x00014988 beq.w 0x14c02 | goto label_21;
| }
0x0001498c ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x0001498e adds r3, 1 | r3++;
0x00014990 str r3, [r6, 4] | *((r6 + 4)) = r3;
| do {
| label_7:
0x00014992 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00014994 movs r1, 1 | r1 = 1;
0x00014996 ldr r2, [sp, 0x14] | r2 = var_14h;
0x00014998 mov r0, sb | r0 = sb;
0x0001499a str r3, [sp, 4] | var_4h = r3;
0x0001499c ldr r3, [sp, 0x18] | r3 = var_18h;
0x0001499e str r3, [sp] | *(sp) = r3;
0x000149a0 add r3, sp, 0x40 | r3 += var_40h;
0x000149a2 str r3, [sp, 0x14] | var_14h = r3;
0x000149a4 blx 0xe3d4 | fcn_0000e3d4 ();
0x000149a8 ldr r0, [sp, 0x44] | r0 = var_44h;
| if (r0 != 0) {
0x000149aa cbz r0, 0x149ca |
0x000149ac ldr.w r3, [pc, 0x42c] | r3 = *(0x14ddc);
0x000149b0 ldr.w fp, [r7, r3] | fp = *((r7 + r3));
0x000149b4 ldrb.w r3, [fp] | r3 = *(fp);
0x000149b8 cmp r3, 0 |
| if (r3 == 0) {
0x000149ba beq.w 0x14be6 | goto label_22;
| }
0x000149be ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x000149c0 subs r2, r3, 1 | r2 = r3 - 1;
0x000149c2 str r2, [r0, 4] | *((r0 + 4)) = r2;
| label_6:
0x000149c4 cmp r3, 1 |
| if (r3 == 1) {
0x000149c6 beq.w 0x14c5e | goto label_23;
| }
| }
| label_10:
0x000149ca strd sb, r8, [r5] | __asm ("strd sb, r8, [r5]");
0x000149ce cmp r6, 0 |
| if (r6 == 0) {
0x000149d0 beq.w 0x14b50 | goto label_24;
| }
0x000149d4 ldr.w r3, [pc, 0x404] | r3 = *(0x14ddc);
0x000149d8 ldr.w fp, [r7, r3] | fp = *((r7 + r3));
0x000149dc ldrb.w r3, [fp] | r3 = *(fp);
0x000149e0 cmp r3, 0 |
| if (r3 == 0) {
0x000149e2 beq.w 0x14bcc | goto label_25;
| }
0x000149e6 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x000149e8 subs r2, r3, 1 | r2 = r3 - 1;
0x000149ea str r2, [r6, 4] | *((r6 + 4)) = r2;
| label_5:
0x000149ec cmp r3, 1 |
| if (r3 == 1) {
0x000149ee beq.w 0x14c38 | goto label_26;
| }
| label_9:
0x000149f2 vld1.32 {d7}, [r5] | __asm ("vld1.32 {d7}, [r5]");
| label_0:
0x000149f6 ldr r3, [r4] | r3 = *(r4);
0x000149f8 ldr r1, [sp, 0x10] | r1 = var_10h;
0x000149fa ldr.w r2, [r3, 0x8c] | r2 = *((r3 + 0x8c));
0x000149fe vmov r3, s14 | __asm ("vmov r3, s14");
0x00014a02 str.w r1, [r3, 0x8c] | __asm ("str.w r1, [r3, 0x8c]");
0x00014a06 vmov.32 r3, d7[1] | __asm ("vmov.32 r3, d7[1]");
0x00014a0a vstr d7, [sp, 0x40] | __asm ("vstr d7, [sp, 0x40]");
| if (r3 != 0) {
0x00014a0e cbz r3, 0x14a22 |
0x00014a10 ldr r1, [pc, 0x3c8] | r1 = *(0x14ddc);
0x00014a12 ldr r1, [r7, r1] | r1 = *((r7 + r1));
0x00014a14 ldrb r1, [r1] | r1 = *(r1);
0x00014a16 cmp r1, 0 |
| if (r1 == 0) {
0x00014a18 beq.w 0x14bb2 | goto label_27;
| }
0x00014a1c ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x00014a1e adds r1, 1 | r1++;
0x00014a20 str r1, [r3, 4] | *((r3 + 4)) = r1;
| }
| label_4:
0x00014a22 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00014a24 mov r0, r4 | r0 = r4;
0x00014a26 blx r2 | uint32_t (*r2)(uint32_t, uint32_t) (r0, r1);
0x00014a28 ldr r6, [sp, 0x44] | r6 = var_44h;
| if (r6 != 0) {
0x00014a2a cbz r6, 0x14a48 |
0x00014a2c ldr r3, [pc, 0x3ac] | r3 = *(0x14ddc);
0x00014a2e ldr.w fp, [r7, r3] | fp = *((r7 + r3));
0x00014a32 ldrb.w r3, [fp] | r3 = *(fp);
0x00014a36 cmp r3, 0 |
| if (r3 == 0) {
0x00014a38 beq.w 0x14b98 | goto label_28;
| }
0x00014a3c ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00014a3e subs r2, r3, 1 | r2 = r3 - 1;
0x00014a40 str r2, [r6, 4] | *((r6 + 4)) = r2;
| label_3:
0x00014a42 cmp r3, 1 |
| if (r3 == 1) {
0x00014a44 beq.w 0x14c82 | goto label_29;
| }
| }
| label_11:
0x00014a48 add.w r8, sp, 0xb4 | r8 += var_b4h;
0x00014a4c ldr r1, [r4, 0x50] | r1 = *((r4 + 0x50));
0x00014a4e mov r0, r8 | r0 = r8;
0x00014a50 blx 0xeaf8 | fcn_0000eaf8 ();
0x00014a54 mov r1, r5 | r1 = r5;
0x00014a56 mov r0, r8 | r0 = r8;
0x00014a58 blx 0xecc0 | fcn_0000ecc0 ();
0x00014a5c ldr r1, [sp, 0x20] | r1 = var_20h;
0x00014a5e mov r0, r8 | r0 = r8;
0x00014a60 blx 0xe9a4 | MQTTAsync_sendMessage ();
0x00014a64 add r6, sp, 0x100 | r6 += var_100h;
0x00014a66 mov r0, r6 | r0 = r6;
0x00014a68 blx 0xebc4 | fcn_0000ebc4 ();
0x00014a6c add.w sb, sp, 0x28 | sb += var_28h;
0x00014a70 ldr r1, [sp, 0x24] | r1 = var_24h;
0x00014a72 mov r0, sb | r0 = sb;
0x00014a74 blx 0xe940 | r0 = fcn_0000e940 ();
0x00014a78 ldm.w sb, {r0, r1, r2, r3} | r0 = *(sb);
| r1 = *((sb + 4));
| r2 = *((sb + 8));
| r3 = *((sb + 12));
0x00014a7c add.w fp, sp, 0x4c |
0x00014a80 add.w ip, sp, 0xd4 |
0x00014a84 stm.w r6, {r0, r1, r2, r3} | *(r6) = r0;
| *((r6 + 4)) = r1;
| *((r6 + 8)) = r2;
| *((r6 + 12)) = r3;
0x00014a88 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x00014a8c mov r1, r8 | r1 = r8;
0x00014a8e mov r0, fp | r0 = fp;
0x00014a90 blx 0xeb70 | fcn_0000eb70 ();
0x00014a94 ldr r0, [sp, 0x110] | r0 = var_110h;
| if (r0 != 0) {
0x00014a96 cbz r0, 0x14a9c |
0x00014a98 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x00014a9c mov r0, r6 | r0 = r6;
0x00014a9e blx 0xebc4 | fcn_0000ebc4 ();
0x00014aa2 ldr r0, [sp, 0xfc] | r0 = var_fch;
| if (r0 != 0) {
0x00014aa4 cbz r0, 0x14ac0 |
0x00014aa6 ldr r3, [pc, 0x334] | r3 = *(0x14dde);
0x00014aa8 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00014aaa ldrb r3, [r3] | r3 = *(r3);
0x00014aac cmp r3, 0 |
| if (r3 == 0) {
0x00014aae beq 0x14b7c | goto label_30;
| }
0x00014ab0 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x00014ab2 subs r2, r3, 1 | r2 = r3 - 1;
0x00014ab4 str r2, [r0, 8] | *((r0 + 8)) = r2;
| label_2:
0x00014ab6 cmp r3, 1 |
| if (r3 != 1) {
0x00014ab8 bne 0x14ac0 | goto label_31;
| }
0x00014aba ldr r3, [r0] | r3 = *(r0);
0x00014abc ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00014abe blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
| label_31:
0x00014ac0 ldr r3, [sp, 0xc] | r3 = var_ch;
0x00014ac2 ldr r1, [sp, 0x10] | r1 = var_10h;
0x00014ac4 ldr r2, [r3] | r2 = *(r3);
0x00014ac6 ldr.w r3, [sl] | r3 = *(sl);
0x00014aca ldr r2, [r2, 0xc] | r2 = *((r2 + 0xc));
0x00014acc str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x00014ad0 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x00014ad2 blx 0xe9bc | r0 = fcn_0000e9bc ();
0x00014ad6 mov r6, r0 | r6 = r0;
0x00014ad8 cmp r0, 0 |
| if (r0 != 0) {
0x00014ada bne.w 0x14cfc | goto label_32;
| }
0x00014ade ldr r0, [sp, 0xa8] | r0 = var_a8h;
| if (r0 != 0) {
0x00014ae0 cbz r0, 0x14ae6 |
0x00014ae2 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x00014ae6 add r0, sp, 0x98 | r0 += var_98h;
0x00014ae8 blx 0xebc4 | fcn_0000ebc4 ();
0x00014aec ldr r0, [sp, 0x94] | r0 = var_94h;
| if (r0 != 0) {
0x00014aee cbz r0, 0x14b0c |
0x00014af0 ldr r3, [pc, 0x2e8] | r3 = *(0x14ddc);
0x00014af2 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00014af4 ldrb r3, [r3] | r3 = *(r3);
0x00014af6 cmp r3, 0 |
| if (r3 == 0) {
0x00014af8 beq.w 0x14c1c | goto label_33;
| }
0x00014afc ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x00014afe subs r2, r3, 1 | r2 = r3 - 1;
0x00014b00 str r2, [r0, 8] | *((r0 + 8)) = r2;
| label_8:
0x00014b02 cmp r3, 1 |
| if (r3 != 1) {
0x00014b04 bne 0x14b0c | goto label_34;
| }
0x00014b06 ldr r3, [r0] | r3 = *(r0);
0x00014b08 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00014b0a blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
| label_34:
0x00014b0c ldr r2, [pc, 0x2d4] |
0x00014b0e ldr r3, [pc, 0x2c4] | r3 = *(0x14dd6);
0x00014b10 add r2, pc | r2 = 0x298f8;
0x00014b12 ldr r3, [r2, r3] | r3 = *(0x298f8);
0x00014b14 ldr r2, [r3] | r2 = *(0x298f8);
0x00014b16 ldr r3, [sp, 0x11c] | r3 = var_11ch;
0x00014b18 eors r2, r3 | r2 ^= r3;
0x00014b1a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00014b1e bne.w 0x14d46 | goto label_35;
| }
0x00014b22 mov r0, r5 | r0 = r5;
0x00014b24 add sp, 0x124 |
0x00014b26 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_19:
0x00014b2a movs r0, 0xb0 | r0 = 0xb0;
0x00014b2c str r6, [r5] | *(r5) = r6;
0x00014b2e blx 0xe3f0 | fcn_0000e3f0 ();
0x00014b32 vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x00014b36 adds r2, r0, 4 | r2 = r0 + 4;
0x00014b38 ldr r3, [pc, 0x2a4] | r3 = *(0x14de0);
0x00014b3a mov r8, r0 | r8 = r0;
0x00014b3c vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00014b40 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00014b42 strd sb, r6, [sp, 0x40] | __asm ("strd sb, r6, [var_44h]");
0x00014b46 mov sb, r0 | sb = r0;
0x00014b48 adds r3, 8 | r3 += 8;
0x00014b4a str r3, [sb], 0x10 | *(sb) = r3;
| sb += 0x10;
0x00014b4e b 0x14992 |
| } while (1);
| label_24:
0x00014b50 strd sb, r8, [sp, 0x38] | __asm ("strd sb, r8, [var_38h]");
0x00014b54 vldr d7, [sp, 0x38] | __asm ("vldr d7, [sp, 0x38]");
0x00014b58 b 0x149f6 | goto label_0;
| label_20:
0x00014b5a adds r2, r6, 4 | r2 = r6 + 4;
0x00014b5c dmb ish | __asm ("dmb ish");
| do {
0x00014b60 ldrex r0, [r2] | __asm ("ldrex r0, [r2]");
0x00014b64 adds r0, 1 | r0++;
0x00014b66 strex r1, r0, [r2] | __asm ("strex r1, r0, [r2]");
0x00014b6a cmp r1, 0 |
0x00014b6c bne 0x14b60 |
| } while (r1 != 0);
0x00014b6e dmb ish | __asm ("dmb ish");
0x00014b72 movs r0, 0xb0 | r0 = 0xb0;
0x00014b74 str r3, [r5] | *(r5) = r3;
0x00014b76 blx 0xe3f0 | fcn_0000e3f0 ();
0x00014b7a b 0x14964 | goto label_1;
| label_30:
0x00014b7c add.w r2, r0, 8 | r2 = r0 + 8;
0x00014b80 dmb ish | __asm ("dmb ish");
| do {
0x00014b84 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00014b88 subs r1, r3, 1 | r1 = r3 - 1;
0x00014b8a strex r6, r1, [r2] | __asm ("strex r6, r1, [r2]");
0x00014b8e cmp r6, 0 |
0x00014b90 bne 0x14b84 |
| } while (r6 != 0);
0x00014b92 dmb ish | __asm ("dmb ish");
0x00014b96 b 0x14ab6 | goto label_2;
| label_28:
0x00014b98 adds r2, r6, 4 | r2 = r6 + 4;
0x00014b9a dmb ish | __asm ("dmb ish");
| do {
0x00014b9e ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00014ba2 subs r1, r3, 1 | r1 = r3 - 1;
0x00014ba4 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00014ba8 cmp r0, 0 |
0x00014baa bne 0x14b9e |
| } while (r0 != 0);
0x00014bac dmb ish | __asm ("dmb ish");
0x00014bb0 b 0x14a42 | goto label_3;
| label_27:
0x00014bb2 adds r3, 4 | r3 += 4;
0x00014bb4 dmb ish | __asm ("dmb ish");
| do {
0x00014bb8 ldrex r0, [r3] | __asm ("ldrex r0, [r3]");
0x00014bbc adds r0, 1 | r0++;
0x00014bbe strex r1, r0, [r3] | __asm ("strex r1, r0, [r3]");
0x00014bc2 cmp r1, 0 |
0x00014bc4 bne 0x14bb8 |
| } while (r1 != 0);
0x00014bc6 dmb ish | __asm ("dmb ish");
0x00014bca b 0x14a22 | goto label_4;
| label_25:
0x00014bcc adds r2, r6, 4 | r2 = r6 + 4;
0x00014bce dmb ish | __asm ("dmb ish");
| do {
0x00014bd2 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00014bd6 subs r1, r3, 1 | r1 = r3 - 1;
0x00014bd8 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00014bdc cmp r0, 0 |
0x00014bde bne 0x14bd2 |
| } while (r0 != 0);
0x00014be0 dmb ish | __asm ("dmb ish");
0x00014be4 b 0x149ec | goto label_5;
| label_22:
0x00014be6 adds r2, r0, 4 | r2 = r0 + 4;
0x00014be8 dmb ish | __asm ("dmb ish");
| do {
0x00014bec ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00014bf0 subs r1, r3, 1 | r1 = r3 - 1;
0x00014bf2 strex ip, r1, [r2] | __asm ("strex ip, r1, [r2]");
0x00014bf6 cmp.w ip, 0 |
0x00014bfa bne 0x14bec |
| } while (ip != 0);
0x00014bfc dmb ish | __asm ("dmb ish");
0x00014c00 b 0x149c4 | goto label_6;
| label_21:
0x00014c02 adds r3, r6, 4 | r3 = r6 + 4;
0x00014c04 dmb ish | __asm ("dmb ish");
| do {
0x00014c08 ldrex r1, [r3] | __asm ("ldrex r1, [r3]");
0x00014c0c adds r1, 1 | r1++;
0x00014c0e strex r2, r1, [r3] | __asm ("strex r2, r1, [r3]");
0x00014c12 cmp r2, 0 |
0x00014c14 bne 0x14c08 |
| } while (r2 != 0);
0x00014c16 dmb ish | __asm ("dmb ish");
0x00014c1a b 0x14992 | goto label_7;
| label_33:
0x00014c1c add.w r2, r0, 8 | r2 = r0 + 8;
0x00014c20 dmb ish | __asm ("dmb ish");
| do {
0x00014c24 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00014c28 subs r1, r3, 1 | r1 = r3 - 1;
0x00014c2a strex r4, r1, [r2] | __asm ("strex r4, r1, [r2]");
0x00014c2e cmp r4, 0 |
0x00014c30 bne 0x14c24 |
| } while (r4 != 0);
0x00014c32 dmb ish | __asm ("dmb ish");
0x00014c36 b 0x14b02 | goto label_8;
| label_26:
0x00014c38 ldr r3, [r6] | r3 = *(r6);
0x00014c3a mov r0, r6 | r0 = r6;
0x00014c3c ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00014c3e blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00014c40 ldrb.w r3, [fp] | r3 = *(fp);
0x00014c44 cmp r3, 0 |
| if (r3 == 0) {
0x00014c46 beq 0x14ce0 | goto label_36;
| }
0x00014c48 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00014c4a subs r2, r3, 1 | r2 = r3 - 1;
0x00014c4c str r2, [r6, 8] | *((r6 + 8)) = r2;
| label_14:
0x00014c4e cmp r3, 1 |
| if (r3 != 1) {
0x00014c50 bne.w 0x149f2 | goto label_9;
| }
0x00014c54 ldr r3, [r6] | r3 = *(r6);
0x00014c56 mov r0, r6 | r0 = r6;
0x00014c58 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00014c5a blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00014c5c b 0x149f2 | goto label_9;
| label_23:
0x00014c5e ldr r3, [r0] | r3 = *(r0);
0x00014c60 str r0, [sp, 0x18] | var_18h = r0;
0x00014c62 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00014c64 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00014c66 ldrb.w r3, [fp] | r3 = *(fp);
0x00014c6a ldr r0, [sp, 0x18] | r0 = var_18h;
| if (r3 == 0) {
0x00014c6c cbz r3, 0x14cc2 | goto label_37;
| }
0x00014c6e ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x00014c70 subs r2, r3, 1 | r2 = r3 - 1;
0x00014c72 str r2, [r0, 8] | *((r0 + 8)) = r2;
| label_13:
0x00014c74 cmp r3, 1 |
| if (r3 != 1) {
0x00014c76 bne.w 0x149ca | goto label_10;
| }
0x00014c7a ldr r3, [r0] | r3 = *(r0);
0x00014c7c ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00014c7e blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x00014c80 b 0x149ca | goto label_10;
| label_29:
0x00014c82 ldr r3, [r6] | r3 = *(r6);
0x00014c84 mov r0, r6 | r0 = r6;
0x00014c86 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00014c88 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00014c8a ldrb.w r3, [fp] | r3 = *(fp);
| if (r3 == 0) {
0x00014c8e cbz r3, 0x14ca6 | goto label_38;
| }
0x00014c90 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00014c92 subs r2, r3, 1 | r2 = r3 - 1;
0x00014c94 str r2, [r6, 8] | *((r6 + 8)) = r2;
| label_12:
0x00014c96 cmp r3, 1 |
| if (r3 != 1) {
0x00014c98 bne.w 0x14a48 | goto label_11;
| }
0x00014c9c ldr r3, [r6] | r3 = *(r6);
0x00014c9e mov r0, r6 | r0 = r6;
0x00014ca0 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00014ca2 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00014ca4 b 0x14a48 | goto label_11;
| label_38:
0x00014ca6 add.w r2, r6, 8 | r2 = r6 + 8;
0x00014caa dmb ish | __asm ("dmb ish");
| do {
0x00014cae ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00014cb2 subs r1, r3, 1 | r1 = r3 - 1;
0x00014cb4 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00014cb8 cmp r0, 0 |
0x00014cba bne 0x14cae |
| } while (r0 != 0);
0x00014cbc dmb ish | __asm ("dmb ish");
0x00014cc0 b 0x14c96 | goto label_12;
| label_37:
0x00014cc2 add.w r2, r0, 8 | r2 = r0 + 8;
0x00014cc6 dmb ish | __asm ("dmb ish");
| do {
0x00014cca ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00014cce subs r1, r3, 1 | r1 = r3 - 1;
0x00014cd0 strex ip, r1, [r2] | __asm ("strex ip, r1, [r2]");
0x00014cd4 cmp.w ip, 0 |
0x00014cd8 bne 0x14cca |
| } while (ip != 0);
0x00014cda dmb ish | __asm ("dmb ish");
0x00014cde b 0x14c74 | goto label_13;
| label_36:
0x00014ce0 add.w r2, r6, 8 | r2 = r6 + 8;
0x00014ce4 dmb ish | __asm ("dmb ish");
| do {
0x00014ce8 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00014cec subs r1, r3, 1 | r1 = r3 - 1;
0x00014cee strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00014cf2 cmp r0, 0 |
0x00014cf4 bne 0x14ce8 |
| } while (r0 != 0);
0x00014cf6 dmb ish | __asm ("dmb ish");
0x00014cfa b 0x14c4e | goto label_14;
| label_32:
0x00014cfc vld1.32 {d16}, [r5] | __asm ("vld1.32 {d16}, [r5]");
0x00014d00 ldr r3, [r4] | r3 = *(r4);
0x00014d02 vmov.32 r0, d16[1] | __asm ("vmov.32 r0, d16[1]");
0x00014d06 ldr.w r8, [r3, 0x94] | r8 = *((r3 + 0x94));
0x00014d0a vstr d16, [sp, 0x40] | __asm ("vstr d16, [sp, 0x40]");
| if (r0 != 0) {
0x00014d0e cbz r0, 0x14d14 |
0x00014d10 bl 0x19638 | fcn_00019638 (r0);
| }
0x00014d14 ldr r1, [sp, 0x14] | r1 = var_14h;
0x00014d16 mov r0, r4 | r0 = r4;
0x00014d18 blx r8 | uint32_t (*r8)(uint32_t, uint32_t) (r0, r1);
0x00014d1a ldr r0, [sp, 0x44] | r0 = var_44h;
| if (r0 != 0) {
0x00014d1c cbz r0, 0x14d22 |
0x00014d1e bl 0x17a28 | fcn_00017a28 (r0);
| }
0x00014d22 movs r0, 0x28 | r0 = 0x28;
0x00014d24 blx 0xe580 | fcn_0000e580 ();
0x00014d28 mov r1, r6 | r1 = r6;
0x00014d2a mov r4, r0 | r4 = r0;
0x00014d2c bl 0x18668 | fcn_00018668 (r0, r1);
0x00014d30 ldr r3, [pc, 0xb4] | r3 = *(0x14de8);
0x00014d32 mov r0, r4 | r0 = r4;
0x00014d34 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00014d36 str r3, [sp, 0xc] | var_ch = r3;
0x00014d38 mov r2, r3 | r2 = r3;
0x00014d3a ldr r3, [pc, 0xb0] | r3 = *(0x14dee);
0x00014d3c ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00014d3e mov r1, r3 | r1 = r3;
0x00014d40 str r3, [sp, 0xc] | var_ch = r3;
0x00014d42 blx 0xeb1c | fcn_0000eb1c ();
| label_35:
0x00014d46 blx 0xe864 | fcn_0000e864 ();
0x00014d4a ldr r0, [sp, 0x44] | r0 = var_44h;
| if (r0 == 0) {
0x00014d4c cbz r0, 0x14daa | goto label_39;
| }
0x00014d4e bl 0x17a28 | fcn_00017a28 (r0);
0x00014d52 b 0x14daa | goto label_39;
| label_15:
0x00014d54 mov r0, r6 | r0 = r6;
0x00014d56 bl 0x17a28 | r0 = fcn_00017a28 (r0);
| do {
| label_16:
0x00014d5a blx 0xe870 | fcn_0000e870 ();
0x00014d5e ldr r0, [sp, 0x44] | r0 = var_44h;
| if (r0 != 0) {
0x00014d60 cbz r0, 0x14d66 |
0x00014d62 bl 0x17a28 | fcn_00017a28 (r0);
| }
0x00014d66 mov r0, r8 | r0 = r8;
0x00014d68 blx 0xe7c0 | fcn_0000e7c0 ();
0x00014d6c cmp r6, 0 |
0x00014d6e beq 0x14d5a |
| } while (r6 == 0);
0x00014d70 b 0x14d54 | goto label_15;
| label_17:
0x00014d72 ldr r0, [r5, 4] | r0 = *((r5 + 4));
0x00014d74 cmp r0, 0 |
| if (r0 == 0) {
0x00014d76 beq 0x14d5a | goto label_16;
| }
0x00014d78 bl 0x17a28 | fcn_00017a28 (r0);
0x00014d7c b 0x14d5a | goto label_16;
| label_18:
0x00014d80 movs r0, 8 | r0 = 8;
0x00014d82 blx 0xe580 | fcn_0000e580 ();
0x00014d86 ldr r1, [pc, 0x68] |
0x00014d88 mov r4, r0 | r4 = r0;
0x00014d8a add r1, pc | r1 = 0x29b80;
0x00014d8c blx 0xec50 | fcn_0000ec50 ();
0x00014d90 ldr r2, [pc, 0x60] | r2 = *(0x14df4);
0x00014d92 mov r0, r4 | r0 = r4;
0x00014d94 ldr r3, [pc, 0x60] | r3 = *(0x14df8);
0x00014d96 ldr r2, [r7, r2] | r2 = *((r7 + r2));
0x00014d98 str r2, [sp, 0xc] | var_ch = r2;
0x00014d9a ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00014d9c mov r1, r3 | r1 = r3;
0x00014d9e str r3, [sp, 0x10] | var_10h = r3;
0x00014da0 blx 0xeb1c | fcn_0000eb1c ();
0x00014da4 mov r0, r4 | r0 = r4;
0x00014da6 blx 0xe694 | fcn_0000e694 ();
| label_39:
0x00014daa mov r0, fp | r0 = fp;
0x00014dac bl 0x1904c | fcn_0001904c (r0);
0x00014db0 b 0x14d72 | goto label_17;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x143f8 */
| #include <stdint.h>
|
; (fcn) method.mqtt::async_client.unsubscribe_std::shared_ptr_mqtt::string_collection_const___mqtt::properties_const_ () | void method_mqtt::async_client_unsubscribe_std::shared_ptr_mqtt::string_collection_const_mqtt::properties_const_ (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_2ch;
| int16_t var_34h;
| int16_t var_7ch;
| int16_t var_80h;
| int16_t var_90h;
| int16_t var_9ch;
| int16_t var_bch;
| int16_t var_e4h;
| int16_t var_e8h;
| int16_t var_f8h;
| int16_t var_104h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| /* mqtt::async_client::unsubscribe(std::shared_ptr<qtt::string_collection const>, mqtt::properties const&) */
0x000143f8 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000143fc sub sp, 0x10c |
0x000143fe mov r6, r2 | r6 = r2;
0x00014400 str r2, [sp, 4] | var_4h = r2;
0x00014402 mov r4, r1 | r4 = r1;
0x00014404 mov r5, r0 | r5 = r0;
0x00014406 ldr.w r2, [pc, 0x494] |
0x0001440a str r3, [sp, 8] | var_8h = r3;
0x0001440c ldr.w r3, [pc, 0x490] | r3 = *(0x148a0);
0x00014410 add r2, pc | r2 = 0x28cb2;
0x00014412 ldr.w sb, [r6] | sb = *(r6);
0x00014416 ldr r6, [r6, 4] | r6 = *((r6 + 4));
0x00014418 ldr r3, [r2, r3] |
0x0001441a ldr.w r7, [pc, 0x488] |
0x0001441e ldr r3, [r3] | r3 = *(0x28cb2);
0x00014420 str r3, [sp, 0x104] | var_104h = r3;
0x00014422 mov.w r3, 0 | r3 = 0;
0x00014426 ldr r3, [r1] | r3 = *(r1);
0x00014428 add r7, pc | r7 = 0x28cd2;
0x0001442a ldr r3, [r3, -0x94] | r3 = *((r3 - 0x94));
0x0001442e add.w fp, r1, r3 |
0x00014432 ldrd r2, r3, [sb] | __asm ("ldrd r2, r3, [sb]");
0x00014436 subs r3, r3, r2 | r3 -= r2;
0x00014438 movw r2, 0xaaab |
0x0001443c asrs r3, r3, 3 | r3 >>= 3;
| /* if there is a right shift of 1, then it's a division by 1/3 */
0x0001443e movt r2, 0xaaaa | r2 = 0xaaaaaaab;
0x00014442 mul r3, r2, r3 | r3 = r2 * r3;
0x00014446 str r3, [sp] | *(sp) = r3;
0x00014448 cmp r6, 0 |
| if (r6 == 0) {
0x0001444a beq.w 0x1461e | goto label_16;
| }
0x0001444e ldr.w r3, [pc, 0x458] | r3 = *(0x148aa);
0x00014452 ldr.w sl, [r7, r3] | sl = *((r7 + r3));
0x00014456 ldrb.w r3, [sl] | r3 = *(sl);
0x0001445a cmp r3, 0 |
| if (r3 == 0) {
0x0001445c beq.w 0x1464e | goto label_17;
| }
0x00014460 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00014462 adds r3, 1 | r3++;
0x00014464 str r3, [r6, 4] | *((r6 + 4)) = r3;
0x00014466 movs r3, 0 | r3 = 0;
0x00014468 str r3, [r0] | *(r0) = r3;
0x0001446a movs r0, 0xb0 | r0 = 0xb0;
0x0001446c blx 0xe3f0 | fcn_0000e3f0 ();
| label_1:
0x00014470 vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x00014474 adds r2, r0, 4 | r2 = r0 + 4;
0x00014476 ldr.w r3, [pc, 0x434] | r3 = *(0x148ae);
0x0001447a mov r8, r0 | r8 = r0;
0x0001447c vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00014480 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00014482 strd sb, r6, [sp, 0x28] | __asm ("strd sb, r6, [var_2ch]");
0x00014486 mov sb, r0 | sb = r0;
0x00014488 adds r3, 8 | r3 += 8;
0x0001448a str r3, [sb], 0x10 | *(sb) = r3;
| sb += 0x10;
0x0001448e ldrb.w r3, [sl] | r3 = *(sl);
0x00014492 cmp r3, 0 |
| if (r3 == 0) {
0x00014494 beq.w 0x146f6 | goto label_18;
| }
0x00014498 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x0001449a adds r3, 1 | r3++;
0x0001449c str r3, [r6, 4] | *((r6 + 4)) = r3;
| do {
| label_7:
0x0001449e mov r2, fp | r2 = fp;
0x000144a0 add.w fp, sp, 0x28 |
0x000144a4 mov r3, fp | r3 = fp;
0x000144a6 movs r1, 3 | r1 = 3;
0x000144a8 mov r0, sb | r0 = sb;
0x000144aa blx 0xeab0 | fcn_0000eab0 ();
0x000144ae ldr r0, [sp, 0x2c] | r0 = var_2ch;
| if (r0 != 0) {
0x000144b0 cbz r0, 0x144ce |
0x000144b2 ldr r3, [pc, 0x3f4] | r3 = *(0x148aa);
0x000144b4 ldr.w sl, [r7, r3] | sl = *((r7 + r3));
0x000144b8 ldrb.w r3, [sl] | r3 = *(sl);
0x000144bc cmp r3, 0 |
| if (r3 == 0) {
0x000144be beq.w 0x146da | goto label_19;
| }
0x000144c0 strh r4, [r1, 8] | *((r1 + 8)) = r4;
0x000144c2 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x000144c4 subs r2, r3, 1 | r2 = r3 - 1;
0x000144c6 str r2, [r0, 4] | *((r0 + 4)) = r2;
| label_6:
0x000144c8 cmp r3, 1 |
| if (r3 == 1) {
0x000144ca beq.w 0x14752 | goto label_20;
| }
| }
| label_10:
0x000144ce strd sb, r8, [r5] | __asm ("strd sb, r8, [r5]");
0x000144d2 cmp r6, 0 |
| if (r6 == 0) {
0x000144d4 beq.w 0x14644 | goto label_21;
| }
0x000144d8 ldr r3, [pc, 0x3cc] | r3 = *(0x148a8);
0x000144da ldr.w sl, [r7, r3] | sl = *((r7 + r3));
0x000144de ldrb.w r3, [sl] | r3 = *(sl);
0x000144e2 cmp r3, 0 |
| if (r3 == 0) {
0x000144e4 beq.w 0x146c0 | goto label_22;
| }
0x000144e8 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x000144ea subs r2, r3, 1 | r2 = r3 - 1;
0x000144ec str r2, [r6, 4] | *((r6 + 4)) = r2;
| label_5:
0x000144ee cmp r3, 1 |
| if (r3 == 1) {
0x000144f0 beq.w 0x1472c | goto label_23;
| }
| label_9:
0x000144f4 vld1.32 {d7}, [r5] | __asm ("vld1.32 {d7}, [r5]");
| label_0:
0x000144f8 ldr r3, [r4] | r3 = *(r4);
0x000144fa ldr r1, [sp] | r1 = *(sp);
0x000144fc ldr.w r2, [r3, 0x8c] | r2 = *((r3 + 0x8c));
0x00014500 vmov r3, s14 | __asm ("vmov r3, s14");
0x00014504 str.w r1, [r3, 0x8c] | __asm ("str.w r1, [r3, 0x8c]");
0x00014508 vmov.32 r3, d7[1] | __asm ("vmov.32 r3, d7[1]");
0x0001450c vstr d7, [sp, 0x28] | __asm ("vstr d7, [sp, 0x28]");
| if (r3 != 0) {
0x00014510 cbz r3, 0x14524 |
0x00014512 ldr r1, [pc, 0x394] | r1 = *(0x148aa);
0x00014514 ldr r1, [r7, r1] | r1 = *((r7 + r1));
0x00014516 ldrb r1, [r1] | r1 = *(r1);
0x00014518 cmp r1, 0 |
| if (r1 == 0) {
0x0001451a beq.w 0x146a6 | goto label_24;
| }
0x0001451e ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x00014520 adds r1, 1 | r1++;
0x00014522 str r1, [r3, 4] | *((r3 + 4)) = r1;
| }
| label_4:
0x00014524 mov r1, fp | r1 = fp;
0x00014526 mov r0, r4 | r0 = r4;
0x00014528 blx r2 | uint32_t (*r2)(uint32_t, uint32_t) (r0, r1);
0x0001452a ldr r6, [sp, 0x2c] | r6 = var_2ch;
| if (r6 != 0) {
0x0001452c cbz r6, 0x1454a |
0x0001452e ldr r3, [pc, 0x378] | r3 = *(0x148aa);
0x00014530 ldr.w sl, [r7, r3] | sl = *((r7 + r3));
0x00014534 ldrb.w r3, [sl] | r3 = *(sl);
0x00014538 cmp r3, 0 |
| if (r3 == 0) {
0x0001453a beq.w 0x1468c | goto label_25;
| }
0x0001453e ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00014540 subs r2, r3, 1 | r2 = r3 - 1;
0x00014542 str r2, [r6, 4] | *((r6 + 4)) = r2;
| label_3:
0x00014544 cmp r3, 1 |
| if (r3 == 1) {
0x00014546 beq.w 0x14778 | goto label_26;
| }
| }
| label_11:
0x0001454a add.w r8, sp, 0x9c | r8 += var_9ch;
0x0001454e ldr r1, [r4, 0x50] | r1 = *((r4 + 0x50));
0x00014550 mov r0, r8 | r0 = r8;
0x00014552 blx 0xeaf8 | fcn_0000eaf8 ();
0x00014556 mov r1, r5 | r1 = r5;
0x00014558 mov r0, r8 | r0 = r8;
0x0001455a blx 0xecc0 | fcn_0000ecc0 ();
0x0001455e add r6, sp, 0xe8 | r6 += var_e8h;
0x00014560 mov r0, r6 | r0 = r6;
0x00014562 blx 0xebc4 | fcn_0000ebc4 ();
0x00014566 add.w sb, sp, 0x10 | sb += var_10h;
0x0001456a ldr r1, [sp, 8] | r1 = var_8h;
0x0001456c mov r0, sb | r0 = sb;
0x0001456e blx 0xe940 | r0 = fcn_0000e940 ();
0x00014572 ldm.w sb, {r0, r1, r2, r3} | r0 = *(sb);
| r1 = *((sb + 4));
| r2 = *((sb + 8));
| r3 = *((sb + 12));
0x00014576 add.w sl, sp, 0x34 | sl += var_34h;
0x0001457a add.w ip, sp, 0xbc |
0x0001457e stm.w r6, {r0, r1, r2, r3} | *(r6) = r0;
| *((r6 + 4)) = r1;
| *((r6 + 8)) = r2;
| *((r6 + 12)) = r3;
0x00014582 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x00014586 mov r1, r8 | r1 = r8;
0x00014588 mov r0, sl | r0 = sl;
0x0001458a blx 0xeb70 | fcn_0000eb70 ();
0x0001458e ldr r0, [sp, 0xf8] | r0 = var_f8h;
| if (r0 != 0) {
0x00014590 cbz r0, 0x14596 |
0x00014592 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x00014596 mov r0, r6 | r0 = r6;
0x00014598 blx 0xebc4 | fcn_0000ebc4 ();
0x0001459c ldr r0, [sp, 0xe4] | r0 = var_e4h;
| if (r0 != 0) {
0x0001459e cbz r0, 0x145ba |
0x000145a0 ldr r3, [pc, 0x304] | r3 = *(0x148a8);
0x000145a2 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x000145a4 ldrb r3, [r3] | r3 = *(r3);
0x000145a6 cmp r3, 0 |
| if (r3 == 0) {
0x000145a8 beq 0x14670 | goto label_27;
| }
0x000145aa ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x000145ac subs r2, r3, 1 | r2 = r3 - 1;
0x000145ae str r2, [r0, 8] | *((r0 + 8)) = r2;
| label_2:
0x000145b0 cmp r3, 1 |
| if (r3 != 1) {
0x000145b2 bne 0x145ba | goto label_28;
| }
0x000145b4 ldr r3, [r0] | r3 = *(r0);
0x000145b6 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000145b8 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
| label_28:
0x000145ba ldr r3, [sp, 4] | r3 = var_4h;
0x000145bc ldr r1, [sp] | r1 = *(sp);
0x000145be ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x000145c0 ldr r3, [r3] | r3 = *(r3);
0x000145c2 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x000145c4 mov r3, sl | r3 = sl;
0x000145c6 blx 0xe568 | r0 = fcn_0000e568 ();
0x000145ca mov r6, r0 | r6 = r0;
0x000145cc cmp r0, 0 |
| if (r0 != 0) {
0x000145ce bne.w 0x147f2 | goto label_29;
| }
0x000145d2 ldr r0, [sp, 0x90] | r0 = var_90h;
| if (r0 != 0) {
0x000145d4 cbz r0, 0x145da |
0x000145d6 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x000145da add r0, sp, 0x80 | r0 += var_80h;
0x000145dc blx 0xebc4 | fcn_0000ebc4 ();
0x000145e0 ldr r0, [sp, 0x7c] | r0 = var_7ch;
| if (r0 != 0) {
0x000145e2 cbz r0, 0x14600 |
0x000145e4 ldr r3, [pc, 0x2c0] | r3 = *(0x148a8);
0x000145e6 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x000145e8 ldrb r3, [r3] | r3 = *(r3);
0x000145ea cmp r3, 0 |
| if (r3 == 0) {
0x000145ec beq.w 0x14710 | goto label_30;
| }
0x000145f0 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x000145f2 subs r2, r3, 1 | r2 = r3 - 1;
0x000145f4 str r2, [r0, 8] | *((r0 + 8)) = r2;
| label_8:
0x000145f6 cmp r3, 1 |
| if (r3 != 1) {
0x000145f8 bne 0x14600 | goto label_31;
| }
0x000145fa ldr r3, [r0] | r3 = *(r0);
0x000145fc ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000145fe blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
| label_31:
0x00014600 ldr r2, [pc, 0x2ac] |
0x00014602 ldr r3, [pc, 0x29c] | r3 = *(0x148a2);
0x00014604 add r2, pc | r2 = 0x28eb8;
0x00014606 ldr r3, [r2, r3] | r3 = *(0x28eb8);
0x00014608 ldr r2, [r3] | r2 = *(0x28eb8);
0x0001460a ldr r3, [sp, 0x104] | r3 = var_104h;
0x0001460c eors r2, r3 | r2 ^= r3;
0x0001460e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00014612 bne.w 0x1483c | goto label_32;
| }
0x00014616 mov r0, r5 | r0 = r5;
0x00014618 add sp, 0x10c |
0x0001461a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_16:
0x0001461e str r6, [r0] | *(r0) = r6;
0x00014620 movs r0, 0xb0 | r0 = 0xb0;
0x00014622 blx 0xe3f0 | fcn_0000e3f0 ();
0x00014626 vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x0001462a adds r2, r0, 4 | r2 = r0 + 4;
0x0001462c ldr r3, [pc, 0x27c] | r3 = *(0x148ac);
0x0001462e mov r8, r0 | r8 = r0;
0x00014630 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00014634 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00014636 strd sb, r6, [sp, 0x28] | __asm ("strd sb, r6, [var_2ch]");
0x0001463a mov sb, r0 | sb = r0;
0x0001463c adds r3, 8 | r3 += 8;
0x0001463e str r3, [sb], 0x10 | *(sb) = r3;
| sb += 0x10;
0x00014642 b 0x1449e |
| } while (1);
| label_21:
0x00014644 strd sb, r8, [sp, 0x20] | __asm ("strd sb, r8, [sp, 0x20]");
0x00014648 vldr d7, [sp, 0x20] | __asm ("vldr d7, [sp, 0x20]");
0x0001464c b 0x144f8 | goto label_0;
| label_17:
0x0001464e adds r2, r6, 4 | r2 = r6 + 4;
0x00014650 dmb ish | __asm ("dmb ish");
| do {
0x00014654 ldrex r0, [r2] | __asm ("ldrex r0, [r2]");
0x00014658 adds r0, 1 | r0++;
0x0001465a strex r1, r0, [r2] | __asm ("strex r1, r0, [r2]");
0x0001465e cmp r1, 0 |
0x00014660 bne 0x14654 |
| } while (r1 != 0);
0x00014662 dmb ish | __asm ("dmb ish");
0x00014666 movs r0, 0xb0 | r0 = 0xb0;
0x00014668 str r3, [r5] | *(r5) = r3;
0x0001466a blx 0xe3f0 | fcn_0000e3f0 ();
0x0001466e b 0x14470 | goto label_1;
| label_27:
0x00014670 add.w r2, r0, 8 | r2 = r0 + 8;
0x00014674 dmb ish | __asm ("dmb ish");
| do {
0x00014678 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x0001467c subs r1, r3, 1 | r1 = r3 - 1;
0x0001467e strex r6, r1, [r2] | __asm ("strex r6, r1, [r2]");
0x00014682 cmp r6, 0 |
0x00014684 bne 0x14678 |
| } while (r6 != 0);
0x00014686 dmb ish | __asm ("dmb ish");
0x0001468a b 0x145b0 | goto label_2;
| label_25:
0x0001468c adds r2, r6, 4 | r2 = r6 + 4;
0x0001468e dmb ish | __asm ("dmb ish");
| do {
0x00014692 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00014696 subs r1, r3, 1 | r1 = r3 - 1;
0x00014698 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x0001469c cmp r0, 0 |
0x0001469e bne 0x14692 |
| } while (r0 != 0);
0x000146a0 dmb ish | __asm ("dmb ish");
0x000146a4 b 0x14544 | goto label_3;
| label_24:
0x000146a6 adds r3, 4 | r3 += 4;
0x000146a8 dmb ish | __asm ("dmb ish");
| do {
0x000146ac ldrex r0, [r3] | __asm ("ldrex r0, [r3]");
0x000146b0 adds r0, 1 | r0++;
0x000146b2 strex r1, r0, [r3] | __asm ("strex r1, r0, [r3]");
0x000146b6 cmp r1, 0 |
0x000146b8 bne 0x146ac |
| } while (r1 != 0);
0x000146ba dmb ish | __asm ("dmb ish");
0x000146be b 0x14524 | goto label_4;
| label_22:
0x000146c0 adds r2, r6, 4 | r2 = r6 + 4;
0x000146c2 dmb ish | __asm ("dmb ish");
| do {
0x000146c6 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000146ca subs r1, r3, 1 | r1 = r3 - 1;
0x000146cc strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x000146d0 cmp r0, 0 |
0x000146d2 bne 0x146c6 |
| } while (r0 != 0);
0x000146d4 dmb ish | __asm ("dmb ish");
0x000146d8 b 0x144ee | goto label_5;
| label_19:
0x000146da adds r2, r0, 4 | r2 = r0 + 4;
0x000146dc dmb ish | __asm ("dmb ish");
| do {
0x000146e0 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000146e4 subs r1, r3, 1 | r1 = r3 - 1;
0x000146e6 strex ip, r1, [r2] | __asm ("strex ip, r1, [r2]");
0x000146ea cmp.w ip, 0 |
0x000146ee bne 0x146e0 |
| } while (ip != 0);
0x000146f0 dmb ish | __asm ("dmb ish");
0x000146f4 b 0x144c8 | goto label_6;
| label_18:
0x000146f6 adds r3, r6, 4 | r3 = r6 + 4;
0x000146f8 dmb ish | __asm ("dmb ish");
| do {
0x000146fc ldrex r1, [r3] | __asm ("ldrex r1, [r3]");
0x00014700 adds r1, 1 | r1++;
0x00014702 strex r2, r1, [r3] | __asm ("strex r2, r1, [r3]");
0x00014706 cmp r2, 0 |
0x00014708 bne 0x146fc |
| } while (r2 != 0);
0x0001470a dmb ish | __asm ("dmb ish");
0x0001470e b 0x1449e | goto label_7;
| label_30:
0x00014710 add.w r2, r0, 8 | r2 = r0 + 8;
0x00014714 dmb ish | __asm ("dmb ish");
| do {
0x00014718 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x0001471c subs r1, r3, 1 | r1 = r3 - 1;
0x0001471e strex r4, r1, [r2] | __asm ("strex r4, r1, [r2]");
0x00014722 cmp r4, 0 |
0x00014724 bne 0x14718 |
| } while (r4 != 0);
0x00014726 dmb ish | __asm ("dmb ish");
0x0001472a b 0x145f6 | goto label_8;
| label_23:
0x0001472c ldr r3, [r6] | r3 = *(r6);
0x0001472e mov r0, r6 | r0 = r6;
0x00014730 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00014732 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00014734 ldrb.w r3, [sl] | r3 = *(sl);
0x00014738 cmp r3, 0 |
| if (r3 == 0) {
0x0001473a beq 0x1479c | goto label_33;
| }
0x0001473c ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x0001473e subs r2, r3, 1 | r2 = r3 - 1;
0x00014740 str r2, [r6, 8] | *((r6 + 8)) = r2;
| label_12:
0x00014742 cmp r3, 1 |
| if (r3 != 1) {
0x00014744 bne.w 0x144f4 | goto label_9;
| }
0x00014748 ldr r3, [r6] | r3 = *(r6);
0x0001474a mov r0, r6 | r0 = r6;
0x0001474c ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0001474e blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00014750 b 0x144f4 | goto label_9;
| label_20:
0x00014752 ldr r3, [r0] | r3 = *(r0);
0x00014754 str r0, [sp, 0xc] | var_ch = r0;
0x00014756 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00014758 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0001475a ldrb.w r3, [sl] | r3 = *(sl);
0x0001475e ldr r0, [sp, 0xc] | r0 = var_ch;
0x00014760 cmp r3, 0 |
| if (r3 == 0) {
0x00014762 beq 0x147d4 | goto label_34;
| }
0x00014764 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x00014766 subs r2, r3, 1 | r2 = r3 - 1;
0x00014768 str r2, [r0, 8] | *((r0 + 8)) = r2;
| label_14:
0x0001476a cmp r3, 1 |
| if (r3 != 1) {
0x0001476c bne.w 0x144ce | goto label_10;
| }
0x00014770 ldr r3, [r0] | r3 = *(r0);
0x00014772 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00014774 blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x00014776 b 0x144ce | goto label_10;
| label_26:
0x00014778 ldr r3, [r6] | r3 = *(r6);
0x0001477a mov r0, r6 | r0 = r6;
0x0001477c ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0001477e blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00014780 ldrb.w r3, [sl] | r3 = *(sl);
| if (r3 == 0) {
0x00014784 cbz r3, 0x147b8 | goto label_35;
| }
0x00014786 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00014788 subs r2, r3, 1 | r2 = r3 - 1;
0x0001478a str r2, [r6, 8] | *((r6 + 8)) = r2;
| label_13:
0x0001478c cmp r3, 1 |
| if (r3 != 1) {
0x0001478e bne.w 0x1454a | goto label_11;
| }
0x00014792 ldr r3, [r6] | r3 = *(r6);
0x00014794 mov r0, r6 | r0 = r6;
0x00014796 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00014798 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0001479a b 0x1454a | goto label_11;
| label_33:
0x0001479c add.w r2, r6, 8 | r2 = r6 + 8;
0x000147a0 dmb ish | __asm ("dmb ish");
| do {
0x000147a4 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000147a8 subs r1, r3, 1 | r1 = r3 - 1;
0x000147aa strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x000147ae cmp r0, 0 |
0x000147b0 bne 0x147a4 |
| } while (r0 != 0);
0x000147b2 dmb ish | __asm ("dmb ish");
0x000147b6 b 0x14742 | goto label_12;
| label_35:
0x000147b8 add.w r2, r6, 8 | r2 = r6 + 8;
0x000147bc dmb ish | __asm ("dmb ish");
| do {
0x000147c0 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000147c4 subs r1, r3, 1 | r1 = r3 - 1;
0x000147c6 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x000147ca cmp r0, 0 |
0x000147cc bne 0x147c0 |
| } while (r0 != 0);
0x000147ce dmb ish | __asm ("dmb ish");
0x000147d2 b 0x1478c | goto label_13;
| label_34:
0x000147d4 add.w r2, r0, 8 | r2 = r0 + 8;
0x000147d8 dmb ish | __asm ("dmb ish");
| do {
0x000147dc ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000147e0 subs r1, r3, 1 | r1 = r3 - 1;
0x000147e2 strex ip, r1, [r2] | __asm ("strex ip, r1, [r2]");
0x000147e6 cmp.w ip, 0 |
0x000147ea bne 0x147dc |
| } while (ip != 0);
0x000147ec dmb ish | __asm ("dmb ish");
0x000147f0 b 0x1476a | goto label_14;
| label_29:
0x000147f2 vld1.32 {d16}, [r5] | __asm ("vld1.32 {d16}, [r5]");
0x000147f6 ldr r3, [r4] | r3 = *(r4);
0x000147f8 vmov.32 r0, d16[1] | __asm ("vmov.32 r0, d16[1]");
0x000147fc ldr.w r8, [r3, 0x94] | r8 = *((r3 + 0x94));
0x00014800 vstr d16, [sp, 0x28] | __asm ("vstr d16, [sp, 0x28]");
| if (r0 != 0) {
0x00014804 cbz r0, 0x1480a |
0x00014806 bl 0x19638 | fcn_00019638 (r0);
| }
0x0001480a mov r1, fp | r1 = fp;
0x0001480c mov r0, r4 | r0 = r4;
0x0001480e blx r8 | uint32_t (*r8)(uint32_t, uint32_t) (r0, r1);
0x00014810 ldr r0, [sp, 0x2c] | r0 = var_2ch;
| if (r0 != 0) {
0x00014812 cbz r0, 0x14818 |
0x00014814 bl 0x17a28 | fcn_00017a28 (r0);
| }
0x00014818 movs r0, 0x28 | r0 = 0x28;
0x0001481a blx 0xe580 | fcn_0000e580 ();
0x0001481e mov r1, r6 | r1 = r6;
0x00014820 mov r4, r0 | r4 = r0;
0x00014822 bl 0x18668 | fcn_00018668 (r0, r1);
0x00014826 ldr r3, [pc, 0x8c] | r3 = *(0x148b6);
0x00014828 mov r0, r4 | r0 = r4;
0x0001482a ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x0001482c str r3, [sp] | *(sp) = r3;
0x0001482e mov r2, r3 | r2 = r3;
0x00014830 ldr r3, [pc, 0x84] | r3 = *(0x148b8);
0x00014832 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00014834 mov r1, r3 | r1 = r3;
0x00014836 str r3, [sp] | *(sp) = r3;
0x00014838 blx 0xeb1c | fcn_0000eb1c ();
| label_32:
0x0001483c blx 0xe864 | fcn_0000e864 ();
| label_15:
0x00014840 mov r0, r6 | r0 = r6;
0x00014842 bl 0x17a28 | r0 = fcn_00017a28 (r0);
| do {
0x00014846 blx 0xe870 | fcn_0000e870 ();
0x0001484a ldr r0, [sp, 0x2c] | r0 = var_2ch;
| if (r0 != 0) {
0x0001484c cbz r0, 0x14852 |
0x0001484e bl 0x17a28 | fcn_00017a28 (r0);
| }
0x00014852 mov r0, r8 | r0 = r8;
0x00014854 blx 0xe7c0 | fcn_0000e7c0 ();
0x00014858 cmp r6, 0 |
0x0001485a beq 0x14846 |
| } while (r6 == 0);
0x0001485c b 0x14840 | goto label_15;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x14e0c */
| #include <stdint.h>
|
; (fcn) method.mqtt::async_client.unsubscribe_std::shared_ptr_mqtt::string_collection_const___void__mqtt::iaction_listener__mqtt::properties_const_ () | void method_mqtt::async_client_unsubscribe_std::shared_ptr_mqtt::string_collection_const_void_mqtt::iaction_listener_mqtt::properties_const_ (int16_t arg_140h, int16_t arg_144h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_38h;
| int16_t var_3ch;
| int16_t var_8ch;
| int16_t var_90h;
| int16_t var_a0h;
| int16_t var_ach;
| int16_t var_cch;
| int16_t var_f4h;
| int16_t var_f8h;
| int16_t var_108h;
| int16_t var_114h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| /* mqtt::async_client::unsubscribe(std::shared_ptr<qtt::string_collection const>, void*, mqtt::iaction_listener&, mqtt::properties const&) */
0x00014e0c push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00014e10 sub sp, 0x11c |
0x00014e12 mov r6, r2 | r6 = r2;
0x00014e14 str r2, [sp, 0x10] | var_10h = r2;
0x00014e16 mov r4, r1 | r4 = r1;
0x00014e18 ldr.w r2, [pc, 0x4a4] |
0x00014e1c str r3, [sp, 0x14] | var_14h = r3;
0x00014e1e ldr r5, [sp, 0x140] | r5 = *(arg_140h);
0x00014e20 ldr.w r3, [pc, 0x4a0] | r3 = *(0x152c4);
0x00014e24 add r2, pc | r2 = 0x2a0e8;
0x00014e26 ldr.w sb, [r6] | sb = *(r6);
0x00014e2a str r5, [sp, 0x18] | var_18h = r5;
0x00014e2c mov r5, r0 | r5 = r0;
0x00014e2e ldr r3, [r2, r3] |
0x00014e30 ldr r6, [r6, 4] | r6 = *((r6 + 4));
0x00014e32 ldr.w r7, [pc, 0x494] |
0x00014e36 ldr r3, [r3] | r3 = *(0x2a0e8);
0x00014e38 str r3, [sp, 0x114] | var_114h = r3;
0x00014e3a mov.w r3, 0 | r3 = 0;
0x00014e3e ldr r3, [r1] | r3 = *(r1);
0x00014e40 add r7, pc | r7 = 0x2a10e;
0x00014e42 ldr r3, [r3, -0x94] | r3 = *((r3 - 0x94));
0x00014e46 add.w sl, r1, r3 | sl = r1 + r3;
0x00014e4a ldrd r2, r3, [sb] | __asm ("ldrd r2, r3, [sb]");
0x00014e4e subs r3, r3, r2 | r3 -= r2;
0x00014e50 movw r2, 0xaaab |
0x00014e54 asrs r3, r3, 3 | r3 >>= 3;
| /* if there is a right shift of 1, then it's a division by 1/3 */
0x00014e56 movt r2, 0xaaaa | r2 = 0xaaaaaaab;
0x00014e5a mul r3, r2, r3 | r3 = r2 * r3;
0x00014e5e str r3, [sp, 0xc] | var_ch = r3;
0x00014e60 ldr r3, [sp, 0x144] | r3 = *(arg_144h);
0x00014e62 str r3, [sp, 0x1c] | var_1ch = r3;
0x00014e64 cmp r6, 0 |
| if (r6 == 0) {
0x00014e66 beq.w 0x15042 | goto label_16;
| }
0x00014e6a ldr.w r3, [pc, 0x460] | r3 = *(0x152ce);
0x00014e6e ldr.w fp, [r7, r3] | fp = *((r7 + r3));
0x00014e72 ldrb.w r3, [fp] | r3 = *(fp);
0x00014e76 cmp r3, 0 |
| if (r3 == 0) {
0x00014e78 beq.w 0x15072 | goto label_17;
| }
0x00014e7c ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00014e7e adds r3, 1 | r3++;
0x00014e80 str r3, [r6, 4] | *((r6 + 4)) = r3;
0x00014e82 movs r3, 0 | r3 = 0;
0x00014e84 str r3, [r0] | *(r0) = r3;
0x00014e86 movs r0, 0xb0 | r0 = 0xb0;
0x00014e88 blx 0xe3f0 | fcn_0000e3f0 ();
| label_1:
0x00014e8c vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x00014e90 adds r2, r0, 4 | r2 = r0 + 4;
0x00014e92 ldr.w r3, [pc, 0x43c] | r3 = *(0x152d2);
0x00014e96 mov r8, r0 | r8 = r0;
0x00014e98 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00014e9c ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00014e9e strd sb, r6, [sp, 0x38] | __asm ("strd sb, r6, [var_38h]");
0x00014ea2 mov sb, r0 | sb = r0;
0x00014ea4 adds r3, 8 | r3 += 8;
0x00014ea6 str r3, [sb], 0x10 | *(sb) = r3;
| sb += 0x10;
0x00014eaa ldrb.w r3, [fp] | r3 = *(fp);
0x00014eae cmp r3, 0 |
| if (r3 == 0) {
0x00014eb0 beq.w 0x1511a | goto label_18;
| }
0x00014eb4 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00014eb6 adds r3, 1 | r3++;
0x00014eb8 str r3, [r6, 4] | *((r6 + 4)) = r3;
| do {
| label_7:
0x00014eba ldr r3, [sp, 0x18] | r3 = var_18h;
0x00014ebc mov r2, sl | r2 = sl;
0x00014ebe add.w sl, sp, 0x38 | sl += var_38h;
0x00014ec2 movs r1, 3 | r1 = 3;
0x00014ec4 mov r0, sb | r0 = sb;
0x00014ec6 str r3, [sp, 4] | var_4h = r3;
0x00014ec8 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00014eca str r3, [sp] | *(sp) = r3;
0x00014ecc mov r3, sl | r3 = sl;
0x00014ece blx 0xe3d4 | fcn_0000e3d4 ();
0x00014ed2 ldr r0, [sp, 0x3c] | r0 = var_3ch;
| if (r0 != 0) {
0x00014ed4 cbz r0, 0x14ef2 |
0x00014ed6 ldr r3, [pc, 0x3f4] | r3 = *(0x152ce);
0x00014ed8 ldr.w fp, [r7, r3] | fp = *((r7 + r3));
0x00014edc ldrb.w r3, [fp] | r3 = *(fp);
0x00014ee0 cmp r3, 0 |
| if (r3 == 0) {
0x00014ee2 beq.w 0x150fe | goto label_19;
| }
0x00014ee6 ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x00014ee8 subs r2, r3, 1 | r2 = r3 - 1;
0x00014eea str r2, [r0, 4] | *((r0 + 4)) = r2;
| label_6:
0x00014eec cmp r3, 1 |
| if (r3 == 1) {
0x00014eee beq.w 0x15176 | goto label_20;
| }
| }
| label_10:
0x00014ef2 strd sb, r8, [r5] | __asm ("strd sb, r8, [r5]");
0x00014ef6 cmp r6, 0 |
| if (r6 == 0) {
0x00014ef8 beq.w 0x15068 | goto label_21;
| }
0x00014efc ldr r3, [pc, 0x3cc] | r3 = *(0x152cc);
0x00014efe ldr.w fp, [r7, r3] | fp = *((r7 + r3));
0x00014f02 ldrb.w r3, [fp] | r3 = *(fp);
0x00014f06 cmp r3, 0 |
| if (r3 == 0) {
0x00014f08 beq.w 0x150e4 | goto label_22;
| }
0x00014f0c ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00014f0e subs r2, r3, 1 | r2 = r3 - 1;
0x00014f10 str r2, [r6, 4] | *((r6 + 4)) = r2;
| label_5:
0x00014f12 cmp r3, 1 |
| if (r3 == 1) {
0x00014f14 beq.w 0x15150 | goto label_23;
| }
| label_9:
0x00014f18 vld1.32 {d7}, [r5] | __asm ("vld1.32 {d7}, [r5]");
| label_0:
0x00014f1c ldr r3, [r4] | r3 = *(r4);
0x00014f1e ldr r1, [sp, 0xc] | r1 = var_ch;
0x00014f20 ldr.w r2, [r3, 0x8c] | r2 = *((r3 + 0x8c));
0x00014f24 vmov r3, s14 | __asm ("vmov r3, s14");
0x00014f28 str.w r1, [r3, 0x8c] | __asm ("str.w r1, [r3, 0x8c]");
0x00014f2c vmov.32 r3, d7[1] | __asm ("vmov.32 r3, d7[1]");
0x00014f30 vstr d7, [sp, 0x38] | __asm ("vstr d7, [sp, 0x38]");
| if (r3 != 0) {
0x00014f34 cbz r3, 0x14f48 |
0x00014f36 ldr r1, [pc, 0x394] | r1 = *(0x152ce);
0x00014f38 ldr r1, [r7, r1] | r1 = *((r7 + r1));
0x00014f3a ldrb r1, [r1] | r1 = *(r1);
0x00014f3c cmp r1, 0 |
| if (r1 == 0) {
0x00014f3e beq.w 0x150ca | goto label_24;
| }
0x00014f42 ldr r1, [r3, 4] | r1 = *((r3 + 4));
0x00014f44 adds r1, 1 | r1++;
0x00014f46 str r1, [r3, 4] | *((r3 + 4)) = r1;
| }
| label_4:
0x00014f48 mov r1, sl | r1 = sl;
0x00014f4a mov r0, r4 | r0 = r4;
0x00014f4c blx r2 | uint32_t (*r2)(uint32_t, uint32_t) (r0, r1);
0x00014f4e ldr r6, [sp, 0x3c] | r6 = var_3ch;
| if (r6 != 0) {
0x00014f50 cbz r6, 0x14f6e |
0x00014f52 ldr r3, [pc, 0x378] | r3 = *(0x152ce);
0x00014f54 ldr.w fp, [r7, r3] | fp = *((r7 + r3));
0x00014f58 ldrb.w r3, [fp] | r3 = *(fp);
0x00014f5c cmp r3, 0 |
| if (r3 == 0) {
0x00014f5e beq.w 0x150b0 | goto label_25;
| }
0x00014f62 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00014f64 subs r2, r3, 1 | r2 = r3 - 1;
0x00014f66 str r2, [r6, 4] | *((r6 + 4)) = r2;
| label_3:
0x00014f68 cmp r3, 1 |
| if (r3 == 1) {
0x00014f6a beq.w 0x1519c | goto label_26;
| }
| }
| label_11:
0x00014f6e add.w r8, sp, 0xac | r8 += var_ach;
0x00014f72 ldr r1, [r4, 0x50] | r1 = *((r4 + 0x50));
0x00014f74 mov r0, r8 | r0 = r8;
0x00014f76 blx 0xeaf8 | fcn_0000eaf8 ();
0x00014f7a mov r1, r5 | r1 = r5;
0x00014f7c mov r0, r8 | r0 = r8;
0x00014f7e blx 0xecc0 | fcn_0000ecc0 ();
0x00014f82 add r6, sp, 0xf8 | r6 += var_f8h;
0x00014f84 mov r0, r6 | r0 = r6;
0x00014f86 blx 0xebc4 | fcn_0000ebc4 ();
0x00014f8a add.w sb, sp, 0x20 | sb += var_20h;
0x00014f8e ldr r1, [sp, 0x1c] | r1 = var_1ch;
0x00014f90 mov r0, sb | r0 = sb;
0x00014f92 blx 0xe940 | r0 = fcn_0000e940 ();
0x00014f96 ldm.w sb, {r0, r1, r2, r3} | r0 = *(sb);
| r1 = *((sb + 4));
| r2 = *((sb + 8));
| r3 = *((sb + 12));
0x00014f9a add.w fp, sp, 0x44 |
0x00014f9e add.w ip, sp, 0xcc |
0x00014fa2 stm.w r6, {r0, r1, r2, r3} | *(r6) = r0;
| *((r6 + 4)) = r1;
| *((r6 + 8)) = r2;
| *((r6 + 12)) = r3;
0x00014fa6 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x00014faa mov r1, r8 | r1 = r8;
0x00014fac mov r0, fp | r0 = fp;
0x00014fae blx 0xeb70 | fcn_0000eb70 ();
0x00014fb2 ldr r0, [sp, 0x108] | r0 = var_108h;
| if (r0 != 0) {
0x00014fb4 cbz r0, 0x14fba |
0x00014fb6 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x00014fba mov r0, r6 | r0 = r6;
0x00014fbc blx 0xebc4 | fcn_0000ebc4 ();
0x00014fc0 ldr r0, [sp, 0xf4] | r0 = var_f4h;
| if (r0 != 0) {
0x00014fc2 cbz r0, 0x14fde |
0x00014fc4 ldr r3, [pc, 0x304] | r3 = *(0x152cc);
0x00014fc6 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00014fc8 ldrb r3, [r3] | r3 = *(r3);
0x00014fca cmp r3, 0 |
| if (r3 == 0) {
0x00014fcc beq 0x15094 | goto label_27;
| }
0x00014fce ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x00014fd0 subs r2, r3, 1 | r2 = r3 - 1;
0x00014fd2 str r2, [r0, 8] | *((r0 + 8)) = r2;
| label_2:
0x00014fd4 cmp r3, 1 |
| if (r3 != 1) {
0x00014fd6 bne 0x14fde | goto label_28;
| }
0x00014fd8 ldr r3, [r0] | r3 = *(r0);
0x00014fda ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00014fdc blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
| label_28:
0x00014fde ldr r3, [sp, 0x10] | r3 = var_10h;
0x00014fe0 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00014fe2 ldr r0, [r4, 0x1c] | r0 = *((r4 + 0x1c));
0x00014fe4 ldr r3, [r3] | r3 = *(r3);
0x00014fe6 ldr r2, [r3, 0xc] | r2 = *((r3 + 0xc));
0x00014fe8 mov r3, fp | r3 = fp;
0x00014fea blx 0xe568 | r0 = fcn_0000e568 ();
0x00014fee mov r6, r0 | r6 = r0;
0x00014ff0 cmp r0, 0 |
| if (r0 != 0) {
0x00014ff2 bne.w 0x15216 | goto label_29;
| }
0x00014ff6 ldr r0, [sp, 0xa0] | r0 = var_a0h;
| if (r0 != 0) {
0x00014ff8 cbz r0, 0x14ffe |
0x00014ffa blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x00014ffe add r0, sp, 0x90 | r0 += var_90h;
0x00015000 blx 0xebc4 | fcn_0000ebc4 ();
0x00015004 ldr r0, [sp, 0x8c] | r0 = var_8ch;
| if (r0 != 0) {
0x00015006 cbz r0, 0x15024 |
0x00015008 ldr r3, [pc, 0x2c0] | r3 = *(0x152cc);
0x0001500a ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x0001500c ldrb r3, [r3] | r3 = *(r3);
0x0001500e cmp r3, 0 |
| if (r3 == 0) {
0x00015010 beq.w 0x15134 | goto label_30;
| }
0x00015014 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x00015016 subs r2, r3, 1 | r2 = r3 - 1;
0x00015018 str r2, [r0, 8] | *((r0 + 8)) = r2;
| label_8:
0x0001501a cmp r3, 1 |
| if (r3 != 1) {
0x0001501c bne 0x15024 | goto label_31;
| }
0x0001501e ldr r3, [r0] | r3 = *(r0);
0x00015020 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00015022 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
| label_31:
0x00015024 ldr r2, [pc, 0x2ac] |
0x00015026 ldr r3, [pc, 0x29c] | r3 = *(0x152c6);
0x00015028 add r2, pc | r2 = 0x2a300;
0x0001502a ldr r3, [r2, r3] | r3 = *(0x2a300);
0x0001502c ldr r2, [r3] | r2 = *(0x2a300);
0x0001502e ldr r3, [sp, 0x114] | r3 = var_114h;
0x00015030 eors r2, r3 | r2 ^= r3;
0x00015032 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00015036 bne.w 0x15260 | goto label_32;
| }
0x0001503a mov r0, r5 | r0 = r5;
0x0001503c add sp, 0x11c |
0x0001503e pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_16:
0x00015042 str r6, [r0] | *(r0) = r6;
0x00015044 movs r0, 0xb0 | r0 = 0xb0;
0x00015046 blx 0xe3f0 | fcn_0000e3f0 ();
0x0001504a vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x0001504e adds r2, r0, 4 | r2 = r0 + 4;
0x00015050 ldr r3, [pc, 0x27c] | r3 = *(0x152d0);
0x00015052 mov r8, r0 | r8 = r0;
0x00015054 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00015058 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x0001505a strd sb, r6, [sp, 0x38] | __asm ("strd sb, r6, [var_38h]");
0x0001505e mov sb, r0 | sb = r0;
0x00015060 adds r3, 8 | r3 += 8;
0x00015062 str r3, [sb], 0x10 | *(sb) = r3;
| sb += 0x10;
0x00015066 b 0x14eba |
| } while (1);
| label_21:
0x00015068 strd sb, r8, [sp, 0x30] | __asm ("strd sb, r8, [sp, 0x30]");
0x0001506c vldr d7, [sp, 0x30] | __asm ("vldr d7, [sp, 0x30]");
0x00015070 b 0x14f1c | goto label_0;
| label_17:
0x00015072 adds r2, r6, 4 | r2 = r6 + 4;
0x00015074 dmb ish | __asm ("dmb ish");
| do {
0x00015078 ldrex r0, [r2] | __asm ("ldrex r0, [r2]");
0x0001507c adds r0, 1 | r0++;
0x0001507e strex r1, r0, [r2] | __asm ("strex r1, r0, [r2]");
0x00015082 cmp r1, 0 |
0x00015084 bne 0x15078 |
| } while (r1 != 0);
0x00015086 dmb ish | __asm ("dmb ish");
0x0001508a movs r0, 0xb0 | r0 = 0xb0;
0x0001508c str r3, [r5] | *(r5) = r3;
0x0001508e blx 0xe3f0 | fcn_0000e3f0 ();
0x00015092 b 0x14e8c | goto label_1;
| label_27:
0x00015094 add.w r2, r0, 8 | r2 = r0 + 8;
0x00015098 dmb ish | __asm ("dmb ish");
| do {
0x0001509c ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000150a0 subs r1, r3, 1 | r1 = r3 - 1;
0x000150a2 strex r6, r1, [r2] | __asm ("strex r6, r1, [r2]");
0x000150a6 cmp r6, 0 |
0x000150a8 bne 0x1509c |
| } while (r6 != 0);
0x000150aa dmb ish | __asm ("dmb ish");
0x000150ae b 0x14fd4 | goto label_2;
| label_25:
0x000150b0 adds r2, r6, 4 | r2 = r6 + 4;
0x000150b2 dmb ish | __asm ("dmb ish");
| do {
0x000150b6 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000150ba subs r1, r3, 1 | r1 = r3 - 1;
0x000150bc strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x000150c0 cmp r0, 0 |
0x000150c2 bne 0x150b6 |
| } while (r0 != 0);
0x000150c4 dmb ish | __asm ("dmb ish");
0x000150c8 b 0x14f68 | goto label_3;
| label_24:
0x000150ca adds r3, 4 | r3 += 4;
0x000150cc dmb ish | __asm ("dmb ish");
| do {
0x000150d0 ldrex r0, [r3] | __asm ("ldrex r0, [r3]");
0x000150d4 adds r0, 1 | r0++;
0x000150d6 strex r1, r0, [r3] | __asm ("strex r1, r0, [r3]");
0x000150da cmp r1, 0 |
0x000150dc bne 0x150d0 |
| } while (r1 != 0);
0x000150de dmb ish | __asm ("dmb ish");
0x000150e2 b 0x14f48 | goto label_4;
| label_22:
0x000150e4 adds r2, r6, 4 | r2 = r6 + 4;
0x000150e6 dmb ish | __asm ("dmb ish");
| do {
0x000150ea ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000150ee subs r1, r3, 1 | r1 = r3 - 1;
0x000150f0 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x000150f4 cmp r0, 0 |
0x000150f6 bne 0x150ea |
| } while (r0 != 0);
0x000150f8 dmb ish | __asm ("dmb ish");
0x000150fc b 0x14f12 | goto label_5;
| label_19:
0x000150fe adds r2, r0, 4 | r2 = r0 + 4;
0x00015100 dmb ish | __asm ("dmb ish");
| do {
0x00015104 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00015108 subs r1, r3, 1 | r1 = r3 - 1;
0x0001510a strex ip, r1, [r2] | __asm ("strex ip, r1, [r2]");
0x0001510e cmp.w ip, 0 |
0x00015112 bne 0x15104 |
| } while (ip != 0);
0x00015114 dmb ish | __asm ("dmb ish");
0x00015118 b 0x14eec | goto label_6;
| label_18:
0x0001511a adds r3, r6, 4 | r3 = r6 + 4;
0x0001511c dmb ish | __asm ("dmb ish");
| do {
0x00015120 ldrex r1, [r3] | __asm ("ldrex r1, [r3]");
0x00015124 adds r1, 1 | r1++;
0x00015126 strex r2, r1, [r3] | __asm ("strex r2, r1, [r3]");
0x0001512a cmp r2, 0 |
0x0001512c bne 0x15120 |
| } while (r2 != 0);
0x0001512e dmb ish | __asm ("dmb ish");
0x00015132 b 0x14eba | goto label_7;
| label_30:
0x00015134 add.w r2, r0, 8 | r2 = r0 + 8;
0x00015138 dmb ish | __asm ("dmb ish");
| do {
0x0001513c ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00015140 subs r1, r3, 1 | r1 = r3 - 1;
0x00015142 strex r4, r1, [r2] | __asm ("strex r4, r1, [r2]");
0x00015146 cmp r4, 0 |
0x00015148 bne 0x1513c |
| } while (r4 != 0);
0x0001514a dmb ish | __asm ("dmb ish");
0x0001514e b 0x1501a | goto label_8;
| label_23:
0x00015150 ldr r3, [r6] | r3 = *(r6);
0x00015152 mov r0, r6 | r0 = r6;
0x00015154 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00015156 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00015158 ldrb.w r3, [fp] | r3 = *(fp);
0x0001515c cmp r3, 0 |
| if (r3 == 0) {
0x0001515e beq 0x151c0 | goto label_33;
| }
0x00015160 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00015162 subs r2, r3, 1 | r2 = r3 - 1;
0x00015164 str r2, [r6, 8] | *((r6 + 8)) = r2;
| label_12:
0x00015166 cmp r3, 1 |
| if (r3 != 1) {
0x00015168 bne.w 0x14f18 | goto label_9;
| }
0x0001516c ldr r3, [r6] | r3 = *(r6);
0x0001516e mov r0, r6 | r0 = r6;
0x00015170 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00015172 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00015174 b 0x14f18 | goto label_9;
| label_20:
0x00015176 ldr r3, [r0] | r3 = *(r0);
0x00015178 str r0, [sp, 0x14] | var_14h = r0;
0x0001517a ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0001517c blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0001517e ldrb.w r3, [fp] | r3 = *(fp);
0x00015182 ldr r0, [sp, 0x14] | r0 = var_14h;
0x00015184 cmp r3, 0 |
| if (r3 == 0) {
0x00015186 beq 0x151f8 | goto label_34;
| }
0x00015188 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x0001518a subs r2, r3, 1 | r2 = r3 - 1;
0x0001518c str r2, [r0, 8] | *((r0 + 8)) = r2;
| label_14:
0x0001518e cmp r3, 1 |
| if (r3 != 1) {
0x00015190 bne.w 0x14ef2 | goto label_10;
| }
0x00015194 ldr r3, [r0] | r3 = *(r0);
0x00015196 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00015198 blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x0001519a b 0x14ef2 | goto label_10;
| label_26:
0x0001519c ldr r3, [r6] | r3 = *(r6);
0x0001519e mov r0, r6 | r0 = r6;
0x000151a0 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x000151a2 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x000151a4 ldrb.w r3, [fp] | r3 = *(fp);
| if (r3 == 0) {
0x000151a8 cbz r3, 0x151dc | goto label_35;
| }
0x000151aa ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x000151ac subs r2, r3, 1 | r2 = r3 - 1;
0x000151ae str r2, [r6, 8] | *((r6 + 8)) = r2;
| label_13:
0x000151b0 cmp r3, 1 |
| if (r3 != 1) {
0x000151b2 bne.w 0x14f6e | goto label_11;
| }
0x000151b6 ldr r3, [r6] | r3 = *(r6);
0x000151b8 mov r0, r6 | r0 = r6;
0x000151ba ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000151bc blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x000151be b 0x14f6e | goto label_11;
| label_33:
0x000151c0 add.w r2, r6, 8 | r2 = r6 + 8;
0x000151c4 dmb ish | __asm ("dmb ish");
| do {
0x000151c8 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000151cc subs r1, r3, 1 | r1 = r3 - 1;
0x000151ce strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x000151d2 cmp r0, 0 |
0x000151d4 bne 0x151c8 |
| } while (r0 != 0);
0x000151d6 dmb ish | __asm ("dmb ish");
0x000151da b 0x15166 | goto label_12;
| label_35:
0x000151dc add.w r2, r6, 8 | r2 = r6 + 8;
0x000151e0 dmb ish | __asm ("dmb ish");
| do {
0x000151e4 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000151e8 subs r1, r3, 1 | r1 = r3 - 1;
0x000151ea strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x000151ee cmp r0, 0 |
0x000151f0 bne 0x151e4 |
| } while (r0 != 0);
0x000151f2 dmb ish | __asm ("dmb ish");
0x000151f6 b 0x151b0 | goto label_13;
| label_34:
0x000151f8 add.w r2, r0, 8 | r2 = r0 + 8;
0x000151fc dmb ish | __asm ("dmb ish");
| do {
0x00015200 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00015204 subs r1, r3, 1 | r1 = r3 - 1;
0x00015206 strex ip, r1, [r2] | __asm ("strex ip, r1, [r2]");
0x0001520a cmp.w ip, 0 |
0x0001520e bne 0x15200 |
| } while (ip != 0);
0x00015210 dmb ish | __asm ("dmb ish");
0x00015214 b 0x1518e | goto label_14;
| label_29:
0x00015216 vld1.32 {d16}, [r5] | __asm ("vld1.32 {d16}, [r5]");
0x0001521a ldr r3, [r4] | r3 = *(r4);
0x0001521c vmov.32 r0, d16[1] | __asm ("vmov.32 r0, d16[1]");
0x00015220 ldr.w r8, [r3, 0x94] | r8 = *((r3 + 0x94));
0x00015224 vstr d16, [sp, 0x38] | __asm ("vstr d16, [sp, 0x38]");
| if (r0 != 0) {
0x00015228 cbz r0, 0x1522e |
0x0001522a bl 0x19638 | fcn_00019638 (r0);
| }
0x0001522e mov r1, sl | r1 = sl;
0x00015230 mov r0, r4 | r0 = r4;
0x00015232 blx r8 | uint32_t (*r8)(uint32_t, uint32_t) (r0, r1);
0x00015234 ldr r0, [sp, 0x3c] | r0 = var_3ch;
| if (r0 != 0) {
0x00015236 cbz r0, 0x1523c |
0x00015238 bl 0x17a28 | fcn_00017a28 (r0);
| }
0x0001523c movs r0, 0x28 | r0 = 0x28;
0x0001523e blx 0xe580 | fcn_0000e580 ();
0x00015242 mov r1, r6 | r1 = r6;
0x00015244 mov r4, r0 | r4 = r0;
0x00015246 bl 0x18668 | fcn_00018668 (r0, r1);
0x0001524a ldr r3, [pc, 0x8c] | r3 = *(0x152da);
0x0001524c mov r0, r4 | r0 = r4;
0x0001524e ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00015250 str r3, [sp, 0xc] | var_ch = r3;
0x00015252 mov r2, r3 | r2 = r3;
0x00015254 ldr r3, [pc, 0x84] | r3 = *(0x152dc);
0x00015256 ldr r3, [r7, r3] | r3 = *((r7 + r3));
0x00015258 mov r1, r3 | r1 = r3;
0x0001525a str r3, [sp, 0xc] | var_ch = r3;
0x0001525c blx 0xeb1c | fcn_0000eb1c ();
| label_32:
0x00015260 blx 0xe864 | fcn_0000e864 ();
| label_15:
0x00015264 mov r0, r6 | r0 = r6;
0x00015266 bl 0x17a28 | r0 = fcn_00017a28 (r0);
| do {
0x0001526a blx 0xe870 | fcn_0000e870 ();
0x0001526e ldr r0, [sp, 0x3c] | r0 = var_3ch;
| if (r0 != 0) {
0x00015270 cbz r0, 0x15276 |
0x00015272 bl 0x17a28 | fcn_00017a28 (r0);
| }
0x00015276 mov r0, r8 | r0 = r8;
0x00015278 blx 0xe7c0 | fcn_0000e7c0 ();
0x0001527c cmp r6, 0 |
0x0001527e beq 0x1526a |
| } while (r6 == 0);
0x00015280 b 0x15264 | goto label_15;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x1fc34 */
| #include <stdint.h>
|
; (fcn) method.mqtt::connect_data.connect_data_MQTTAsync_connectData_const_ () | void method_mqtt::connect_data_connect_data_MQTTAsync_connectData_const_ (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
| /* mqtt::connect_data::connect_data(MQTTAsync_connectData const&) */
0x0001fc34 ldr.w ip, [pc, 0x168] |
0x0001fc38 push.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0001fc3c mov lr, r0 | lr = r0;
0x0001fc3e mov r6, r1 | r6 = r1;
0x0001fc40 add.w r5, r0, 0x14 | r5 = r0 + 0x14;
0x0001fc44 add ip, pc |
0x0001fc46 mov r4, r0 | r4 = r0;
0x0001fc48 add.w ip, ip, 0x78 | ip = 0x3fa60;
0x0001fc4c vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0001fc50 ldm.w ip!, {r0, r1, r2, r3} | r0 = *(ip!);
| r1 = *((ip! + 4));
| r2 = *((ip! + 8));
| r3 = *((ip! + 12));
0x0001fc54 ldr.w r8, [pc, 0x14c] | r8 = *(0x0001fda4);
0x0001fc58 stm.w lr!, {r0, r1, r2, r3} | *(lr!) = r0;
| *((lr! + 4)) = r1;
| *((lr! + 8)) = r2;
| *((lr! + 12)) = r3;
0x0001fc5c movs r0, 0x24 | r0 = 0x24;
0x0001fc5e ldr.w r3, [ip] | r3 = *(0x3fa60);
0x0001fc62 add r8, pc | r8 += pc;
0x0001fc64 str.w r3, [lr] | __asm ("str.w r3, [lr]");
0x0001fc68 vst1.32 {d16}, [r5] | __asm ("vst1.32 {d16}, [r5]");
0x0001fc6c ldrd fp, sl, [r6, 0xc] | __asm ("ldrd fp, sl, [r6, 0xc]");
0x0001fc70 blx 0xe3f0 | fcn_0000e3f0 ();
0x0001fc74 ldr r3, [pc, 0x130] | r3 = *(0x1fda8);
0x0001fc76 adds r2, r0, 4 | r2 = r0 + 4;
0x0001fc78 vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x0001fc7c cmp.w fp, 0 |
0x0001fc80 mov r7, r0 | r7 = r0;
0x0001fc82 mov r5, r0 | r5 = r0;
0x0001fc84 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x0001fc88 add.w r2, r0, 0x14 | r2 = r0 + 0x14;
0x0001fc8c ldr.w sb, [r8, r3] | sb = *((r8 + r3));
0x0001fc90 clz r3, sl | r3 &= sl;
0x0001fc94 lsr.w r3, r3, 5 | r3 >>= 5;
0x0001fc98 it eq |
| if (fp != 0) {
0x0001fc9a moveq r3, 0 | r3 = 0;
| }
0x0001fc9c add.w r1, sb, 8 | r1 = sb + 8;
0x0001fca0 str r1, [r7], 0xc | *(r7) = r1;
| r7 += 0xc;
0x0001fca4 str r2, [r0, 0xc] | *((r0 + 0xc)) = r2;
0x0001fca6 cmp r3, 0 |
| if (r3 != 0) {
0x0001fca8 bne 0x1fd70 | goto label_4;
| }
0x0001fcaa add.w r2, sl, fp | r2 = sl + fp;
0x0001fcae mov r1, sl | r1 = sl;
0x0001fcb0 mov r0, r7 | r0 = r7;
0x0001fcb2 bl 0x1de40 | fcn_0001de40 (r0, r1, r2);
0x0001fcb6 ldr r6, [r6, 8] | r6 = *((r6 + 8));
0x0001fcb8 str r7, [r4, 0x1c] | *((r4 + 0x1c)) = r7;
0x0001fcba str r5, [r4, 0x20] | *((r4 + 0x20)) = r5;
| if (r6 == 0) {
0x0001fcbc cbz r6, 0x1fd0e | goto label_0;
| }
0x0001fcbe mov r0, r6 | r0 = r6;
0x0001fcc0 blx 0xea20 | r0 = fcn_0000ea20 ();
0x0001fcc4 mov r7, r0 | r7 = r0;
0x0001fcc6 movs r0, 0x24 | r0 = 0x24;
0x0001fcc8 blx 0xe3f0 | fcn_0000e3f0 ();
0x0001fccc vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x0001fcd0 mov r5, r0 | r5 = r0;
0x0001fcd2 adds r0, 4 | r0 += 4;
0x0001fcd4 add.w r3, sb, 8 | r3 = sb + 8;
0x0001fcd8 adds r2, r6, r7 | r2 = r6 + r7;
0x0001fcda mov r1, r6 | r1 = r6;
0x0001fcdc mov r6, r5 | r6 = r5;
0x0001fcde vst1.32 {d16}, [r0] | __asm ("vst1.32 {d16}, [r0]");
0x0001fce2 str r3, [r6], 0xc | *(r6) = r3;
| r6 += 0xc;
0x0001fce6 add.w r3, r5, 0x14 | r3 = r5 + 0x14;
0x0001fcea mov r0, r6 | r0 = r6;
0x0001fcec str r3, [r5, 0xc] | *((r5 + 0xc)) = r3;
0x0001fcee bl 0x1de40 | fcn_0001de40 (r0, r1, r2);
0x0001fcf2 ldr r7, [r4, 0x18] | r7 = *((r4 + 0x18));
0x0001fcf4 strd r6, r5, [r4, 0x14] | __asm ("strd r6, r5, [r4, 0x14]");
| if (r7 == 0) {
0x0001fcf8 cbz r7, 0x1fd0e | goto label_0;
| }
0x0001fcfa ldr r3, [pc, 0xb0] | r3 = *(0x1fdae);
0x0001fcfc ldr.w r5, [r8, r3] | r5 = *((r8 + r3));
0x0001fd00 ldrb r3, [r5] | r3 = *(r5);
| if (r3 == 0) {
0x0001fd02 cbz r3, 0x1fd3a | goto label_5;
| }
0x0001fd04 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x0001fd06 subs r2, r3, 1 | r2 = r3 - 1;
0x0001fd08 str r2, [r7, 4] | *((r7 + 4)) = r2;
| label_1:
0x0001fd0a cmp r3, 1 |
0x0001fd0c beq 0x1fd1a |
| while (r3 != 1) {
| label_0:
0x0001fd0e mov r0, r4 | r0 = r4;
0x0001fd10 blx 0xe6f8 | MQTTProperties_add ();
0x0001fd14 mov r0, r4 | r0 = r4;
0x0001fd16 pop.w {r3, r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0001fd1a ldr r3, [r7] | r3 = *(r7);
0x0001fd1c mov r0, r7 | r0 = r7;
0x0001fd1e ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0001fd20 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0001fd22 ldrb r3, [r5] | r3 = *(r5);
| if (r3 == 0) {
0x0001fd24 cbz r3, 0x1fd54 | goto label_6;
| }
0x0001fd26 ldr r3, [r7, 8] | r3 = *((r7 + 8));
0x0001fd28 subs r2, r3, 1 | r2 = r3 - 1;
0x0001fd2a str r2, [r7, 8] | *((r7 + 8)) = r2;
| label_2:
0x0001fd2c cmp r3, 1 |
0x0001fd2e bne 0x1fd0e |
| }
0x0001fd30 ldr r3, [r7] | r3 = *(r7);
0x0001fd32 mov r0, r7 | r0 = r7;
0x0001fd34 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0001fd36 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0001fd38 b 0x1fd0e | goto label_0;
| label_5:
0x0001fd3a adds r2, r7, 4 | r2 = r7 + 4;
0x0001fd3c dmb ish | __asm ("dmb ish");
| do {
0x0001fd40 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x0001fd44 subs r1, r3, 1 | r1 = r3 - 1;
0x0001fd46 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x0001fd4a cmp r0, 0 |
0x0001fd4c bne 0x1fd40 |
| } while (r0 != 0);
0x0001fd4e dmb ish | __asm ("dmb ish");
0x0001fd52 b 0x1fd0a | goto label_1;
| label_6:
0x0001fd54 add.w r2, r7, 8 | r2 = r7 + 8;
0x0001fd58 dmb ish | __asm ("dmb ish");
| do {
0x0001fd5c ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x0001fd60 subs r1, r3, 1 | r1 = r3 - 1;
0x0001fd62 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x0001fd66 cmp r0, 0 |
0x0001fd68 bne 0x1fd5c |
| } while (r0 != 0);
0x0001fd6a dmb ish | __asm ("dmb ish");
0x0001fd6e b 0x1fd2c | goto label_2;
| label_4:
0x0001fd70 ldr r0, [pc, 0x3c] |
0x0001fd72 add r0, pc | r0 = 0x3fb26;
0x0001fd74 blx 0xe688 | fcn_0000e688 ();
| do {
| label_3:
0x0001fd78 ldr r0, [r4, 0x18] | r0 = *((r4 + 0x18));
| if (r0 != 0) {
0x0001fd7a cbz r0, 0x1fd80 |
0x0001fd7c bl 0x17a28 | r0 = fcn_00017a28 (r0);
| }
0x0001fd80 blx 0xe870 | fcn_0000e870 ();
0x0001fd84 ldr r0, [r4, 0x20] | r0 = *((r4 + 0x20));
0x0001fd86 cmp r0, 0 |
0x0001fd88 beq 0x1fd78 |
| } while (r0 == 0);
0x0001fd8a bl 0x17a28 | fcn_00017a28 (r0);
0x0001fd8e b 0x1fd78 | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x209c4 */
| #include <stdint.h>
|
; (fcn) method.mqtt::iclient_persistence.persistence_keys_void__char__int_ () | void method_mqtt::iclient_persistence_persistence_keys_void_char_int_ (uint32_t arg1, uint32_t arg2, uint32_t arg3) {
| int16_t var_4h;
| int32_t var_4h_2;
| int16_t var_10h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| /* mqtt::iclient_persistence::persistence_keys(void*, char***, int*) */
0x000209c4 cmp r1, 0 |
0x000209c6 it ne |
| if (r1 != 0) {
0x000209c8 cmpne r2, 0 | __asm ("cmpne r2, 0");
| }
0x000209ca push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000209ce ite ne |
| if (r1 == 0) {
0x000209d0 movne r3, 1 | r3 = 1;
| }
| if (r1 != 0) {
0x000209d2 moveq r3, 0 | r3 = 0;
| }
0x000209d4 mov r8, r1 | r8 = r1;
0x000209d6 cmp r0, 0 |
0x000209d8 ite eq |
| if (r0 != 0) {
0x000209da moveq r3, 0 | r3 = 0;
| }
| if (r0 == 0) {
0x000209dc andne r3, r3, 1 | r3 &= 1;
| }
0x000209e0 mov r1, r0 | r1 = r0;
0x000209e2 ldr r0, [pc, 0x114] |
0x000209e4 mov r4, r2 | r4 = r2;
0x000209e6 ldr r2, [pc, 0x114] | r2 = *(0x20afe);
0x000209e8 sub sp, 0x24 |
0x000209ea add r0, pc | r0 = 0x414e8;
0x000209ec ldr r2, [r0, r2] |
0x000209ee ldr r2, [r2] | r2 = *(0x414e8);
0x000209f0 str r2, [sp, 0x1c] | var_1ch = r2;
0x000209f2 mov.w r2, 0 | r2 = 0;
0x000209f6 cmp r3, 0 |
| if (r3 == 0) {
0x000209f8 beq 0x20ae6 | goto label_2;
| }
0x000209fa ldr r3, [r1] | r3 = *(r1);
0x000209fc add r0, sp, 4 | r0 += var_4h;
0x000209fe ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00020a00 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00020a02 ldrd r6, r5, [sp, 4] | __asm ("ldrd r6, r5, [var_4h]");
0x00020a06 movw r3, 0xaaab |
| /* if there is a right shift of 1, then it's a division by 1/3 */
0x00020a0a movt r3, 0xaaaa | r3 = 0xaaaaaaab;
0x00020a0e subs r7, r5, r6 | r7 = r5 - r6;
0x00020a10 asrs r7, r7, 3 | r7 >>= 3;
0x00020a12 mul r7, r3, r7 | r7 = r3 * r7;
0x00020a16 str r7, [r4] | *(r4) = r7;
| if (r7 != 0) {
0x00020a18 cbnz r7, 0x20a6c | goto label_3;
| }
0x00020a1a str.w r7, [r8] | __asm ("str.w r7, [r8]");
| label_0:
0x00020a1e ldr r0, [sp, 0x10] | r0 = var_10h;
| if (r0 != 0) {
0x00020a20 cbz r0, 0x20a26 |
0x00020a22 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x00020a26 ldrd r5, r6, [sp, 4] | __asm ("ldrd r5, r6, [var_4h]");
0x00020a2a cmp r5, r6 |
| if (r5 == r6) {
0x00020a2c beq 0x20a48 | goto label_4;
| }
0x00020a2e add.w r4, r5, 8 | r4 = r5 + 8;
| do {
0x00020a32 ldr r0, [r4, -0x8] | r0 = *((r4 - 0x8));
0x00020a36 cmp r4, r0 |
| if (r4 != r0) {
0x00020a38 beq 0x20a3e |
0x00020a3a blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x00020a3e adds r5, 0x18 | r5 += 0x18;
0x00020a40 adds r4, 0x18 | r4 += 0x18;
0x00020a42 cmp r6, r5 |
0x00020a44 bne 0x20a32 |
| } while (r6 != r5);
0x00020a46 ldr r6, [sp, 4] | r6 = var_4h;
| if (r6 != 0) {
| label_4:
0x00020a48 cbz r6, 0x20a50 |
0x00020a4a mov r0, r6 | r0 = r6;
0x00020a4c blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x00020a50 movs r0, 0 | r0 = 0;
| label_1:
0x00020a52 ldr r2, [pc, 0xac] |
0x00020a54 ldr r3, [pc, 0xa4] | r3 = *(0x20afc);
0x00020a56 add r2, pc | r2 = 0x4155c;
0x00020a58 ldr r3, [r2, r3] | r3 = *(0x4155c);
0x00020a5a ldr r2, [r3] | r2 = *(0x4155c);
0x00020a5c ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00020a5e eors r2, r3 | r2 ^= r3;
0x00020a60 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00020a64 bne 0x20ab4 | goto label_5;
| }
0x00020a66 add sp, 0x24 |
0x00020a68 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_3:
0x00020a6c lsls r0, r7, 2 | r0 = r7 << 2;
0x00020a6e blx 0xe4f0 | fcn_0000e4f0 ();
0x00020a72 cmp r6, r5 |
0x00020a74 str.w r0, [r8] | __asm ("str.w r0, [r8]");
| if (r6 == r5) {
0x00020a78 beq 0x20a1e | goto label_0;
| }
0x00020a7a movs r5, 0 | r5 = 0;
0x00020a7c mov r6, r5 | r6 = r5;
0x00020a7e mov sb, r5 | sb = r5;
| do {
0x00020a80 ldr r3, [sp, 4] | r3 = var_4h;
0x00020a82 add r3, r5 | r3 += r5;
0x00020a84 ldr.w sl, [r3, 4] | sl = *((r3 + 4));
0x00020a88 add.w fp, sl, 1 |
0x00020a8c mov r0, fp | r0 = fp;
0x00020a8e blx 0xe4f0 | fcn_0000e4f0 ();
0x00020a92 ldr r3, [sp, 4] | r3 = var_4h;
0x00020a94 mov r4, r0 | r4 = r0;
0x00020a96 mov r2, fp | r2 = fp;
0x00020a98 ldr r1, [r3, r5] | r1 = *((r3 + r5));
0x00020a9a adds r5, 0x18 | r5 += 0x18;
0x00020a9c blx 0xeb64 | fcn_0000eb64 ();
0x00020aa0 strb.w sb, [r4, sl] | *((r4 + sl)) = sb;
0x00020aa4 ldr.w r3, [r8] | r3 = *(r8);
0x00020aa8 str.w r4, [r3, r6, lsl 2] | __asm ("str.w r4, [r3, r6, lsl 2]");
0x00020aac adds r6, 1 | r6++;
0x00020aae cmp r6, r7 |
0x00020ab0 bne 0x20a80 |
| } while (r6 != r7);
0x00020ab2 b 0x20a1e | goto label_0;
| label_5:
0x00020ab4 blx 0xe864 | fcn_0000e864 ();
0x00020ab8 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00020aba mov r4, r0 | r4 = r0;
| if (r3 != 0) {
0x00020abc cbz r3, 0x20ac4 |
0x00020abe mov r0, r3 | r0 = r3;
0x00020ac0 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x00020ac4 ldrd r5, r6, [sp, 4] | __asm ("ldrd r5, r6, [var_4h]");
| do {
0x00020ac8 cmp r6, r5 |
| if (r6 == r5) {
0x00020aca beq 0x20aec | goto label_6;
| }
0x00020acc mov r3, r5 | r3 = r5;
0x00020ace ldr r0, [r3], 8 | r0 = *(r3);
| r3 += 8;
0x00020ad2 cmp r0, r3 |
| if (r0 != r3) {
0x00020ad4 beq 0x20ada |
0x00020ad6 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x00020ada adds r5, 0x18 | r5 += 0x18;
0x00020adc b 0x20ac8 |
| } while (1);
| do {
0x00020ade blx 0xe538 | fcn_0000e538 ();
0x00020ae2 blx 0xea8c | fcn_0000ea8c ();
| label_2:
0x00020ae6 mvn r0, 1 | r0 = ~1;
0x00020aea b 0x20a52 | goto label_1;
| label_6:
0x00020aec ldr r0, [sp, 4] | r0 = var_4h;
| if (r0 != 0) {
0x00020aee cbz r0, 0x20af4 |
0x00020af0 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x00020af4 mov r0, r4 | r0 = r4;
0x00020af6 b 0x20ade |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x21b4c */
| #include <stdint.h>
|
; (fcn) method.mqtt::message.message_mqtt::buffer_ref_char___MQTTAsync_message_const_ () | void method_mqtt::message_message_mqtt::buffer_ref_char_MQTTAsync_message_const_ (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| /* mqtt::message::message(mqtt::buffer_ref<char>, MQTTAsync_message const&) */
0x00021b4c push.w {r4, r5, r6, r7, r8, sb, sl, lr} |
0x00021b50 mov r6, r2 | r6 = r2;
0x00021b52 mov lr, r2 | lr = r2;
0x00021b54 ldr r2, [pc, 0x194] |
0x00021b56 sub sp, 0x20 |
0x00021b58 mov r4, r0 | r4 = r0;
0x00021b5a ldr r3, [pc, 0x194] | r3 = *(0x21cf2);
0x00021b5c mov sb, r1 | sb = r1;
0x00021b5e add r2, pc | r2 = 0x4384e;
0x00021b60 mov ip, r0 |
0x00021b62 mov.w sl, 0 | sl = 0;
0x00021b66 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00021b6a ldr r3, [r2, r3] |
0x00021b6c mov r7, sp | r7 = sp;
0x00021b6e ldr.w r8, [pc, 0x184] | r8 = *(0x00021cf4);
0x00021b72 ldr r3, [r3] | r3 = *(0x4384e);
0x00021b74 str r3, [sp, 0x1c] | var_1ch = r3;
0x00021b76 mov.w r3, 0 | r3 = 0;
0x00021b7a ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x00021b7e add r8, pc | r8 += pc;
0x00021b80 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00021b84 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x00021b88 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00021b8c ldm.w lr, {r0, r1, r2, r3} | r0 = *(lr);
| r1 = *((lr + 4));
| r2 = *((lr + 8));
| r3 = *((lr + 12));
0x00021b90 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x00021b94 add.w r1, r6, 0x20 | r1 = r6 + 0x20;
0x00021b98 ldr.w r3, [sb] | r3 = *(sb);
0x00021b9c mov r0, r7 | r0 = r7;
0x00021b9e strd r3, sl, [r4, 0x30] | __asm ("strd r3, sl, [r4, 0x30]");
0x00021ba2 ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x00021ba6 vst1.32 {d16}, [sb] | __asm ("vst1.32 {d16}, [sb]");
0x00021baa str.w sl, [r4, 0x3c] | __asm ("str.w sl, [r4, 0x3c]");
0x00021bae strd r3, sl, [r4, 0x34] | __asm ("strd r3, sl, [r4, 0x34]");
0x00021bb2 blx 0xe940 | r0 = fcn_0000e940 ();
0x00021bb6 ldm.w r7, {r0, r1, r2, r3} | r0 = *(r7);
| r1 = *((r7 + 4));
| r2 = *((r7 + 8));
| r3 = *((r7 + 12));
0x00021bba add.w r5, r4, 0x40 | r5 = r4 + 0x40;
0x00021bbe stm.w r5, {r0, r1, r2, r3} | *(r5) = r0;
| *((r5 + 4)) = r1;
| *((r5 + 8)) = r2;
| *((r5 + 12)) = r3;
0x00021bc2 movs r0, 0x24 | r0 = 0x24;
0x00021bc4 ldrd sl, sb, [r6, 8] | __asm ("ldrd sl, sb, [r6, 8]");
0x00021bc8 blx 0xe3f0 | fcn_0000e3f0 ();
0x00021bcc ldr r3, [pc, 0x128] | r3 = *(0x21cf8);
0x00021bce adds r2, r0, 4 | r2 = r0 + 4;
0x00021bd0 vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x00021bd4 cmp.w sl, 0 |
0x00021bd8 mov r7, r0 | r7 = r0;
0x00021bda mov r6, r0 | r6 = r0;
0x00021bdc vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00021be0 clz r2, sb | r2 &= sb;
0x00021be4 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00021be8 lsr.w r2, r2, 5 | r2 >>= 5;
0x00021bec it eq |
| if (sl != 0) {
0x00021bee moveq r2, 0 | r2 = 0;
| }
0x00021bf0 adds r3, 8 | r3 += 8;
0x00021bf2 str r3, [r7], 0xc | *(r7) = r3;
| r7 += 0xc;
0x00021bf6 add.w r3, r0, 0x14 | r3 = r0 + 0x14;
0x00021bfa str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00021bfc cmp r2, 0 |
| if (r2 != 0) {
0x00021bfe bne 0x21cae | goto label_3;
| }
0x00021c00 add.w r2, sb, sl | r2 = sb + sl;
0x00021c04 mov r1, sb | r1 = sb;
0x00021c06 mov r0, r7 | r0 = r7;
0x00021c08 bl 0x20dac | fcn_00020dac (r0, r1, r2);
0x00021c0c add r1, sp, 0x14 | r1 += var_14h;
0x00021c0e mov r0, r4 | r0 = r4;
0x00021c10 str r7, [sp, 0x14] | var_14h = r7;
0x00021c12 str r6, [sp, 0x18] | var_18h = r6;
0x00021c14 blx 0xebe8 | fcn_0000ebe8 ();
0x00021c18 ldr r6, [sp, 0x18] | r6 = var_18h;
| if (r6 == 0) {
0x00021c1a cbz r6, 0x21c30 | goto label_0;
| }
0x00021c1c ldr r3, [pc, 0xdc] | r3 = *(0x21cfc);
0x00021c1e ldr.w r7, [r8, r3] | r7 = *((r8 + r3));
0x00021c22 ldrb r3, [r7] | r3 = *(r7);
| if (r3 == 0) {
0x00021c24 cbz r3, 0x21c78 | goto label_4;
| }
0x00021c26 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00021c28 subs r2, r3, 1 | r2 = r3 - 1;
0x00021c2a str r2, [r6, 4] | *((r6 + 4)) = r2;
| label_1:
0x00021c2c cmp r3, 1 |
0x00021c2e beq 0x21c58 |
| while (r3 != 1) {
| label_0:
0x00021c30 ldm.w r5, {r0, r1, r2, r3} | r0 = *(r5);
| r1 = *((r5 + 4));
| r2 = *((r5 + 8));
| r3 = *((r5 + 12));
0x00021c34 add.w r6, r4, 0x20 | r6 = r4 + 0x20;
0x00021c38 stm.w r6, {r0, r1, r2, r3} | *(r6) = r0;
| *((r6 + 4)) = r1;
| *((r6 + 8)) = r2;
| *((r6 + 12)) = r3;
0x00021c3c ldr r2, [pc, 0xc0] |
0x00021c3e ldr r3, [pc, 0xb0] | r3 = *(0x21cf2);
0x00021c40 add r2, pc | r2 = 0x43944;
0x00021c42 ldr r3, [r2, r3] | r3 = *(0x43944);
0x00021c44 ldr r2, [r3] | r2 = *(0x43944);
0x00021c46 ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x00021c48 eors r2, r3 | r2 ^= r3;
0x00021c4a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00021c4e bne 0x21cb6 | goto label_5;
| }
0x00021c50 mov r0, r4 | r0 = r4;
0x00021c52 add sp, 0x20 |
0x00021c54 pop.w {r4, r5, r6, r7, r8, sb, sl, pc} |
0x00021c58 ldr r3, [r6] | r3 = *(r6);
0x00021c5a mov r0, r6 | r0 = r6;
0x00021c5c ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00021c5e blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00021c60 ldrb r3, [r7] | r3 = *(r7);
| if (r3 == 0) {
0x00021c62 cbz r3, 0x21c92 | goto label_6;
| }
0x00021c64 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00021c66 subs r2, r3, 1 | r2 = r3 - 1;
0x00021c68 str r2, [r6, 8] | *((r6 + 8)) = r2;
| label_2:
0x00021c6a cmp r3, 1 |
0x00021c6c bne 0x21c30 |
| }
0x00021c6e ldr r3, [r6] | r3 = *(r6);
0x00021c70 mov r0, r6 | r0 = r6;
0x00021c72 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00021c74 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00021c76 b 0x21c30 | goto label_0;
| label_4:
0x00021c78 adds r2, r6, 4 | r2 = r6 + 4;
0x00021c7a dmb ish | __asm ("dmb ish");
| do {
0x00021c7e ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00021c82 subs r1, r3, 1 | r1 = r3 - 1;
0x00021c84 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00021c88 cmp r0, 0 |
0x00021c8a bne 0x21c7e |
| } while (r0 != 0);
0x00021c8c dmb ish | __asm ("dmb ish");
0x00021c90 b 0x21c2c | goto label_1;
| label_6:
0x00021c92 add.w r2, r6, 8 | r2 = r6 + 8;
0x00021c96 dmb ish | __asm ("dmb ish");
| do {
0x00021c9a ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00021c9e subs r1, r3, 1 | r1 = r3 - 1;
0x00021ca0 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00021ca4 cmp r0, 0 |
0x00021ca6 bne 0x21c9a |
| } while (r0 != 0);
0x00021ca8 dmb ish | __asm ("dmb ish");
0x00021cac b 0x21c6a | goto label_2;
| label_3:
0x00021cae ldr r0, [pc, 0x54] |
0x00021cb0 add r0, pc | r0 = 0x439ba;
0x00021cb2 blx 0xe688 | fcn_0000e688 ();
| label_5:
0x00021cb6 blx 0xe864 | fcn_0000e864 ();
0x00021cba mov r0, r5 | r0 = r5;
0x00021cbc blx 0xebc4 | fcn_0000ebc4 ();
| do {
0x00021cc0 ldr r0, [r4, 0x3c] | r0 = *((r4 + 0x3c));
| if (r0 != 0) {
0x00021cc2 cbz r0, 0x21cc8 |
0x00021cc4 bl 0x17a28 | fcn_00017a28 (r0);
| }
0x00021cc8 ldr r0, [r4, 0x34] | r0 = *((r4 + 0x34));
| if (r0 != 0) {
0x00021cca cbz r0, 0x21cd0 |
0x00021ccc bl 0x17a28 | r0 = fcn_00017a28 (r0);
| }
0x00021cd0 blx 0xe870 | fcn_0000e870 ();
0x00021cd4 b 0x21cc0 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x218f4 */
| #include <stdint.h>
|
; (fcn) method.mqtt::message.message_mqtt::buffer_ref_char___void_const__unsigned_int__int__bool__mqtt::properties_const_ () | void method_mqtt::message_message_mqtt::buffer_ref_char_void_const_unsigned_int_int_bool_mqtt::properties_const_ (int16_t arg_0h, int16_t arg_6ch, int16_t arg_70h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_2ch;
| int16_t var_3ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| /* mqtt::message::message(mqtt::buffer_ref<char>, void const*, unsigned int, int, bool, mqtt::properties const&) */
0x000218f4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000218f8 mov r4, r0 | r4 = r0;
0x000218fa ldr r0, [pc, 0x224] |
0x000218fc mov fp, r1 |
0x000218fe sub sp, 0x44 |
0x00021900 mov r7, r3 | r7 = r3;
0x00021902 ldr r1, [pc, 0x220] | r1 = *(0x21b26);
0x00021904 mov r6, r2 | r6 = r2;
0x00021906 add r0, pc | r0 = 0x4342c;
0x00021908 ldr.w lr, [pc, 0x21c] |
0x0002190c ldrb.w r3, [sp, 0x6c] | r3 = *(arg_6ch);
0x00021910 mov ip, r4 |
0x00021912 ldr r1, [r0, r1] |
0x00021914 mov.w sl, 0 | sl = 0;
0x00021918 add lr, pc | lr = 0x43444;
0x0002191a ldr.w sb, [sp, 0x70] | sb = *(arg_70h);
0x0002191e vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00021922 add.w r5, r4, 0x40 | r5 = r4 + 0x40;
0x00021926 ldr r1, [r1] | r1 = *(0x4342c);
0x00021928 str r1, [sp, 0x3c] | var_3ch = r1;
0x0002192a mov.w r1, 0 | r1 = 0;
0x0002192e str r3, [sp, 4] | var_4h = r3;
0x00021930 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x00021934 ldr.w r8, [pc, 0x1f4] |
0x00021938 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x0002193c add r8, pc | r8 = 0x4346c;
0x0002193e ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x00021942 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x00021946 ldm.w lr, {r0, r1, r2, r3} | r0 = *(lr);
| r1 = *((lr + 4));
| r2 = *((lr + 8));
| r3 = *((lr + 12));
0x0002194a stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x0002194e movs r0, 0x24 | r0 = 0x24;
0x00021950 ldr.w r3, [fp] | r3 = *(fp);
0x00021954 strd r3, sl, [r4, 0x30] | __asm ("strd r3, sl, [r4, 0x30]");
0x00021958 ldr.w r3, [fp, 4] | r3 = *(arg_6ch);
0x0002195c vst1.32 {d16}, [fp] | __asm ("vst1.32 {d16}, [fp]");
0x00021960 str.w sl, [r4, 0x3c] | __asm ("str.w sl, [r4, 0x3c]");
0x00021964 strd r3, sl, [r4, 0x34] | __asm ("strd r3, sl, [r4, 0x34]");
0x00021968 str.w sl, [r4, 0x40] | __asm ("str.w sl, [r4, 0x40]");
0x0002196c str.w sl, [r4, 0x44] | __asm ("str.w sl, [r4, 0x44]");
0x00021970 str.w sl, [r4, 0x48] | __asm ("str.w sl, [r4, 0x48]");
0x00021974 str.w sl, [r4, 0x4c] | __asm ("str.w sl, [r4, 0x4c]");
0x00021978 blx 0xe3f0 | fcn_0000e3f0 ();
0x0002197c ldr r3, [pc, 0x1b0] | r3 = *(0x21b30);
0x0002197e adds r2, r0, 4 | r2 = r0 + 4;
0x00021980 vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x00021984 cmp r7, 0 |
0x00021986 mov fp, r0 |
0x00021988 mov sl, r0 | sl = r0;
0x0002198a vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x0002198e clz r2, r6 | r2 &= r6;
0x00021992 ldr.w r3, [r8, r3] | r3 = *(0x4346c);
0x00021996 lsr.w r2, r2, 5 | r2 >>= 5;
0x0002199a it eq |
| if (r7 != 0) {
0x0002199c moveq r2, 0 | r2 = 0;
| }
0x0002199e adds r3, 8 | r3 += 8;
0x000219a0 str r3, [fp], 0xc | *(fp) = r3;
| fp += 0xc;
0x000219a4 add.w r3, r0, 0x14 | r3 = r0 + 0x14;
0x000219a8 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x000219aa cmp r2, 0 |
| if (r2 != 0) {
0x000219ac bne 0x21a86 | goto label_4;
| }
0x000219ae adds r2, r6, r7 | r2 = r6 + r7;
0x000219b0 mov r1, r6 | r1 = r6;
0x000219b2 mov r0, fp | r0 = fp;
0x000219b4 bl 0x20dac | fcn_00020dac (r0, r1, r2);
0x000219b8 add r1, sp, 0x1c | r1 += var_1ch;
0x000219ba mov r0, r4 | r0 = r4;
0x000219bc strd fp, sl, [sp, 0x1c] | __asm ("strd fp, sl, [var_1ch]");
0x000219c0 blx 0xebe8 | fcn_0000ebe8 ();
0x000219c4 ldr r6, [sp, 0x20] | r6 = var_20h;
| if (r6 == 0) {
0x000219c6 cbz r6, 0x219de | goto label_0;
| }
0x000219c8 ldr r3, [pc, 0x168] | r3 = *(0x21b34);
0x000219ca ldr.w r7, [r8, r3] | r7 = *((r8 + r3));
0x000219ce ldrb r3, [r7] | r3 = *(r7);
0x000219d0 cmp r3, 0 |
| if (r3 == 0) {
0x000219d2 beq 0x21a50 | goto label_5;
| }
0x000219d4 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x000219d6 subs r2, r3, 1 | r2 = r3 - 1;
0x000219d8 str r2, [r6, 4] | *((r6 + 4)) = r2;
| label_1:
0x000219da cmp r3, 1 |
0x000219dc beq 0x21a30 |
| while (r3 != 1) {
| label_0:
0x000219de ldr r3, [sp, 0x68] | r3 = *(arg_0h);
0x000219e0 cmp r3, 2 |
| if (r3 > 2) {
0x000219e2 bhi 0x21ab4 | goto label_6;
| }
0x000219e4 ldr r3, [sp, 0x68] | r3 = *(arg_0h);
0x000219e6 cmp sb, r5 |
0x000219e8 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x000219ea ldr r3, [sp, 4] | r3 = var_4h;
0x000219ec str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
| if (sb != r5) {
0x000219ee beq 0x21a08 |
0x000219f0 mov r0, r5 | r0 = r5;
0x000219f2 blx 0xebc4 | fcn_0000ebc4 ();
0x000219f6 add r6, sp, 8 | r6 += var_8h;
0x000219f8 mov r1, sb | r1 = sb;
0x000219fa mov r0, r6 | r0 = r6;
0x000219fc blx 0xe940 | r0 = fcn_0000e940 ();
0x00021a00 ldm.w r6, {r0, r1, r2, r3} | r0 = *(r6);
| r1 = *((r6 + 4));
| r2 = *((r6 + 8));
| r3 = *((r6 + 12));
0x00021a04 stm.w r5, {r0, r1, r2, r3} | *(r5) = r0;
| *((r5 + 4)) = r1;
| *((r5 + 8)) = r2;
| *((r5 + 12)) = r3;
| }
0x00021a08 add.w r6, r4, 0x20 | r6 = r4 + 0x20;
0x00021a0c ldm.w r5, {r0, r1, r2, r3} | r0 = *(r5);
| r1 = *((r5 + 4));
| r2 = *((r5 + 8));
| r3 = *((r5 + 12));
0x00021a10 stm.w r6, {r0, r1, r2, r3} | *(r6) = r0;
| *((r6 + 4)) = r1;
| *((r6 + 8)) = r2;
| *((r6 + 12)) = r3;
0x00021a14 ldr r2, [pc, 0x120] |
0x00021a16 ldr r3, [pc, 0x10c] | r3 = *(0x21b26);
0x00021a18 add r2, pc | r2 = 0x43554;
0x00021a1a ldr r3, [r2, r3] | r3 = *(0x43554);
0x00021a1c ldr r2, [r3] | r2 = *(0x43554);
0x00021a1e ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00021a20 eors r2, r3 | r2 ^= r3;
0x00021a22 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00021a26 bne 0x21a8e | goto label_7;
| }
0x00021a28 mov r0, r4 | r0 = r4;
0x00021a2a add sp, 0x44 |
0x00021a2c pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00021a30 ldr r3, [r6] | r3 = *(r6);
0x00021a32 mov r0, r6 | r0 = r6;
0x00021a34 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00021a36 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00021a38 ldrb r3, [r7] | r3 = *(r7);
| if (r3 == 0) {
0x00021a3a cbz r3, 0x21a6a | goto label_8;
| }
0x00021a3c ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00021a3e subs r2, r3, 1 | r2 = r3 - 1;
0x00021a40 str r2, [r6, 8] | *((r6 + 8)) = r2;
| label_2:
0x00021a42 cmp r3, 1 |
0x00021a44 bne 0x219de |
| }
0x00021a46 ldr r3, [r6] | r3 = *(r6);
0x00021a48 mov r0, r6 | r0 = r6;
0x00021a4a ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00021a4c blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00021a4e b 0x219de | goto label_0;
| label_5:
0x00021a50 adds r2, r6, 4 | r2 = r6 + 4;
0x00021a52 dmb ish | __asm ("dmb ish");
| do {
0x00021a56 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00021a5a subs r1, r3, 1 | r1 = r3 - 1;
0x00021a5c strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00021a60 cmp r0, 0 |
0x00021a62 bne 0x21a56 |
| } while (r0 != 0);
0x00021a64 dmb ish | __asm ("dmb ish");
0x00021a68 b 0x219da | goto label_1;
| label_8:
0x00021a6a add.w r2, r6, 8 | r2 = r6 + 8;
0x00021a6e dmb ish | __asm ("dmb ish");
| do {
0x00021a72 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00021a76 subs r1, r3, 1 | r1 = r3 - 1;
0x00021a78 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00021a7c cmp r0, 0 |
0x00021a7e bne 0x21a72 |
| } while (r0 != 0);
0x00021a80 dmb ish | __asm ("dmb ish");
0x00021a84 b 0x21a42 | goto label_2;
| label_4:
0x00021a86 ldr r0, [pc, 0xb4] |
0x00021a88 add r0, pc | r0 = 0x435ca;
0x00021a8a blx 0xe688 | fcn_0000e688 ();
| label_7:
0x00021a8e blx 0xe864 | fcn_0000e864 ();
0x00021a92 mov r0, sl | r0 = sl;
0x00021a94 blx 0xe7c0 | fcn_0000e7c0 ();
| do {
| label_3:
0x00021a98 mov r0, r5 | r0 = r5;
0x00021a9a blx 0xebc4 | fcn_0000ebc4 ();
0x00021a9e ldr r0, [r4, 0x3c] | r0 = *((r4 + 0x3c));
| if (r0 != 0) {
0x00021aa0 cbz r0, 0x21aa6 |
0x00021aa2 bl 0x17a28 | fcn_00017a28 (r0);
| }
0x00021aa6 ldr r0, [r4, 0x34] | r0 = *((r4 + 0x34));
| if (r0 != 0) {
0x00021aa8 cbz r0, 0x21aae |
0x00021aaa bl 0x17a28 | r0 = fcn_00017a28 (r0);
| }
0x00021aae blx 0xe870 | fcn_0000e870 ();
0x00021ab2 b 0x21a98 |
| } while (1);
| label_6:
0x00021ab4 movs r0, 0x28 | r0 = 0x28;
0x00021ab6 add.w sb, sp, 0x24 | sb += var_24h;
0x00021aba blx 0xe580 | fcn_0000e580 ();
0x00021abe ldr r1, [pc, 0x80] |
0x00021ac0 mov r6, r0 | r6 = r0;
0x00021ac2 add r7, sp, 0x2c | r7 += var_2ch;
0x00021ac4 mov r0, sb | r0 = sb;
0x00021ac6 str r7, [sp, 0x24] | var_24h = r7;
0x00021ac8 add r1, pc | r1 = 0x4360e;
0x00021aca adds r2, r1, 7 | r2 = r1 + 7;
0x00021acc bl 0x20dac | fcn_00020dac (r0, r1, r2);
0x00021ad0 mov r2, sb | r2 = sb;
0x00021ad2 mvn r1, 8 | r1 = ~8;
0x00021ad6 mov r0, r6 | r0 = r6;
0x00021ad8 bl 0x18428 | fcn_00018428 (r0, r1, r2);
0x00021adc ldr r0, [sp, 0x24] | r0 = var_24h;
0x00021ade cmp r0, r7 |
| if (r0 != r7) {
0x00021ae0 beq 0x21ae6 |
0x00021ae2 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x00021ae6 ldr r3, [pc, 0x5c] | r3 = *(0x21b46);
0x00021ae8 mov r0, r6 | r0 = r6;
0x00021aea ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00021aee str r3, [sp, 4] | var_4h = r3;
0x00021af0 mov r2, r3 | r2 = r3;
0x00021af2 ldr r3, [pc, 0x54] | r3 = *(0x21b4a);
0x00021af4 ldr.w r3, [r8, r3] | r3 = *((r8 + r3));
0x00021af8 mov r1, r3 | r1 = r3;
0x00021afa str r3, [sp, 4] | var_4h = r3;
0x00021afc blx 0xeb1c | fcn_0000eb1c ();
0x00021b00 ldr r0, [sp, 0x20] | r0 = var_20h;
0x00021b02 cmp r0, 0 |
| if (r0 == 0) {
0x00021b04 beq 0x21a98 | goto label_3;
| }
0x00021b06 bl 0x17a28 | fcn_00017a28 (r0);
0x00021b0a b 0x21a98 | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x220e0 */
| #include <stdint.h>
|
; (fcn) method.mqtt::response_options.set_token_std::shared_ptr_mqtt::token__const_ () | void method_mqtt::response_options_set_token_std::shared_ptr_mqtt::token_const_ (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
| /* mqtt::response_options::set_token(std::shared_ptr<qtt::token> const&) */
0x000220e0 push {r4, r5, r6, lr} |
0x000220e2 mov r5, r1 | r5 = r1;
0x000220e4 invalid |
0x000220e6 adds r6, 0 | r6 += 0;
0x000220e8 mov r4, r0 | r4 = r0;
0x000220ea ldr r2, [pc, 0x80] |
0x000220ec str r3, [r0, 0x44] | *((r0 + 0x44)) = r3;
0x000220ee add r2, pc | r2 = 0x44260;
| if (r6 == 0) {
0x000220f0 cbz r6, 0x22132 | goto label_2;
| }
0x000220f2 ldr r1, [pc, 0x7c] | r1 = *(0x22172);
0x000220f4 ldr r1, [r2, r1] | r1 = *((r2 + r1));
0x000220f6 ldrb r1, [r1] | r1 = *(r1);
| if (r1 != 0) {
0x000220f8 cbz r1, 0x22118 |
0x000220fa ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x000220fc ldr r0, [r0, 0x48] | r0 = *((r0 + 0x48));
0x000220fe adds r2, 1 | r2++;
0x00022100 str r2, [r6, 8] | *((r6 + 8)) = r2;
| if (r0 != 0) {
0x00022102 cbz r0, 0x22112 |
| label_1:
0x00022104 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x00022106 cmp r3, 1 |
0x00022108 add.w r2, r3, -1 | r2 = r3 + -1;
0x0002210c str r2, [r0, 8] | *((r0 + 8)) = r2;
| if (r3 == 1) {
0x0002210e beq 0x22162 | goto label_3;
| }
| label_0:
0x00022110 ldr r3, [r5] | r3 = *(r5);
| }
0x00022112 str r6, [r4, 0x48] | *((r4 + 0x48)) = r6;
0x00022114 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x00022116 pop {r4, r5, r6, pc} |
| }
0x00022118 add.w r3, r6, 8 | r3 = r6 + 8;
0x0002211c dmb ish | __asm ("dmb ish");
| do {
0x00022120 ldrex r0, [r3] | __asm ("ldrex r0, [r3]");
0x00022124 adds r0, 1 | r0++;
0x00022126 strex r1, r0, [r3] | __asm ("strex r1, r0, [r3]");
0x0002212a cmp r1, 0 |
0x0002212c bne 0x22120 |
| } while (r1 != 0);
0x0002212e dmb ish | __asm ("dmb ish");
| label_2:
0x00022132 ldr r0, [r4, 0x48] | r0 = *((r4 + 0x48));
0x00022134 cmp r0, 0 |
| if (r0 == 0) {
0x00022136 beq 0x22110 | goto label_0;
| }
0x00022138 ldr r3, [pc, 0x34] | r3 = *(0x22170);
0x0002213a ldr r3, [r2, r3] | r3 = *((r2 + r3));
0x0002213c ldrb r3, [r3] | r3 = *(r3);
0x0002213e cmp r3, 0 |
| if (r3 != 0) {
0x00022140 bne 0x22104 | goto label_1;
| }
0x00022142 add.w r2, r0, 8 | r2 = r0 + 8;
0x00022146 dmb ish | __asm ("dmb ish");
| do {
0x0002214a ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x0002214e subs r1, r3, 1 | r1 = r3 - 1;
0x00022150 strex ip, r1, [r2] | __asm ("strex ip, r1, [r2]");
0x00022154 cmp.w ip, 0 |
0x00022158 bne 0x2214a |
| } while (ip != 0);
0x0002215a cmp r3, 1 |
0x0002215c dmb ish | __asm ("dmb ish");
| if (r3 != 1) {
0x00022160 bne 0x22110 | goto label_0;
| }
| label_3:
0x00022162 ldr r3, [r0] | r3 = *(r0);
0x00022164 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00022166 blx r3 | uint32_t (*r3)(uint32_t) (r3);
0x00022168 b 0x22110 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x24640 */
| #include <stdint.h>
|
; (fcn) method.mqtt::string_collection.operator_mqtt::string_collection_const_ () | void method_mqtt::string_collection_operator_mqtt::string_collection_const_ (int16_t arg_140h, int16_t arg_3a0h, uint32_t arg1, uint32_t arg2) {
| uint32_t var_0h;
| int16_t var_4h_3;
| int16_t var_8h;
| int16_t var_ch_3;
| r0 = arg1;
| r1 = arg2;
| /* mqtt::string_collection::operator=(mqtt::string_collection const&) */
0x00024640 ldr r2, [pc, 0x204] |
0x00024642 cmp r0, r1 |
0x00024644 ldr r3, [pc, 0x204] | r3 = *(0x2484c);
0x00024646 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0002464a sub sp, 0x14 |
0x0002464c add r2, pc | r2 = 0x48e98;
0x0002464e mov r7, r0 | r7 = r0;
0x00024650 ldr r3, [r2, r3] |
0x00024652 ldr r3, [r3] | r3 = *(0x48e98);
0x00024654 str r3, [sp, 0xc] | var_ch_3 = r3;
0x00024656 mov.w r3, 0 | r3 = 0;
| if (r0 == r1) {
0x0002465a beq 0x246da | goto label_2;
| }
0x0002465c ldr r5, [r0] | r5 = *(r0);
0x0002465e mov sl, r1 | sl = r1;
0x00024660 ldr r3, [r0, 8] | r3 = *((r0 + 8));
0x00024662 ldrd r4, r1, [r1] | __asm ("ldrd r4, r1, [r1]");
0x00024666 subs r3, r3, r5 | r3 -= r5;
0x00024668 sub.w r8, r1, r4 | r8 = r1 - r4;
0x0002466c cmp r3, r8 |
| if (r3 <= r8) {
0x0002466e blo.w 0x247b0 | goto label_3;
| }
0x00024672 ldr.w sb, [r0, 4] | sb = *((r0 + 4));
0x00024676 sub.w r3, sb, r5 | r3 = sb - r5;
0x0002467a cmp r8, r3 |
| if (r8 > r3) {
0x0002467c bhi 0x246fe | goto label_4;
| }
0x0002467e cmp.w r8, 0 |
| if (r8 <= 0) {
0x00024682 ble 0x246b8 | goto label_5;
| }
0x00024684 asr.w r6, r8, 3 | r6 = r8 >> 3;
0x00024688 movw r3, 0xaaab |
| /* if there is a right shift of 1, then it's a division by 1/3 */
0x0002468c movt r3, 0xaaaa | r3 = 0xaaaaaaab;
0x00024690 mul r6, r3, r6 | r6 = r3 * r6;
0x00024694 mov sb, r5 | sb = r5;
| do {
0x00024696 mov r1, r4 | r1 = r4;
0x00024698 mov r0, sb | r0 = sb;
0x0002469a adds r4, 0x18 | r4 += 0x18;
0x0002469c blx 0xe5d4 | fcn_0000e5d4 ();
0x000246a0 subs r6, 1 | r6--;
0x000246a2 add.w sb, sb, 0x18 | sb += 0x18;
0x000246a6 bne 0x24696 |
| } while (r6 != 1);
0x000246a8 cmp.w r8, 0 |
0x000246ac ldr.w sb, [r7, 4] | sb = *((r7 + 4));
0x000246b0 ite gt |
| if (r8 <= 0) {
0x000246b2 movgt r3, r8 | r3 = r8;
| }
| if (r8 > 0) {
0x000246b4 movle r3, 0x18 | r3 = 0x18;
| }
0x000246b6 add r5, r3 | r5 += r3;
| label_5:
0x000246b8 cmp r5, sb |
| if (r5 == sb) {
0x000246ba beq 0x246d4 | goto label_6;
| }
0x000246bc add.w r4, r5, 8 | r4 = r5 + 8;
| do {
0x000246c0 ldr r0, [r4, -0x8] | r0 = *((r4 - 0x8));
0x000246c4 cmp r4, r0 |
| if (r4 != r0) {
0x000246c6 beq 0x246cc |
0x000246c8 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x000246cc adds r5, 0x18 | r5 += 0x18;
0x000246ce adds r4, 0x18 | r4 += 0x18;
0x000246d0 cmp r5, sb |
0x000246d2 bne 0x246c0 |
| } while (r5 != sb);
| label_6:
0x000246d4 ldr r3, [r7] | r3 = *(r7);
0x000246d6 add r3, r8 | r3 += r8;
| label_0:
0x000246d8 str r3, [r7, 4] | *((r7 + 4)) = r3;
| label_2:
0x000246da mov r0, r7 | r0 = r7;
0x000246dc blx 0xe8c8 | fcn_0000e8c8 ();
0x000246e0 ldr r2, [pc, 0x16c] |
0x000246e2 ldr r3, [pc, 0x168] | r3 = *(0x2484e);
0x000246e4 add r2, pc | r2 = 0x48f38;
0x000246e6 ldr r3, [r2, r3] | r3 = *(0x48f38);
0x000246e8 ldr r2, [r3] | r2 = *(0x48f38);
0x000246ea ldr r3, [sp, 0xc] | r3 = var_ch_3;
0x000246ec eors r2, r3 | r2 ^= r3;
0x000246ee mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000246f2 bne.w 0x24810 | goto label_7;
| }
0x000246f6 mov r0, r7 | r0 = r7;
0x000246f8 add sp, 0x14 |
0x000246fa pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x000246fe asrs r6, r3, 3 | r6 = r3 >> 3;
0x00024700 movw r2, 0xaaab |
0x00024704 cmp r3, 0 |
| /* if there is a right shift of 1, then it's a division by 1/3 */
0x00024706 movt r2, 0xaaaa | r2 = 0xaaaaaaab;
0x0002470a mul r6, r2, r6 | r6 = r2 * r6;
| if (r3 <= 0) {
0x0002470e ble 0x2472e | goto label_8;
| }
| do {
0x00024710 mov r1, r4 | r1 = r4;
0x00024712 mov r0, r5 | r0 = r5;
0x00024714 adds r4, 0x18 | r4 += 0x18;
0x00024716 blx 0xe5d4 | fcn_0000e5d4 ();
0x0002471a subs r6, 1 | r6--;
0x0002471c add.w r5, r5, 0x18 | r5 += 0x18;
0x00024720 bne 0x24710 |
| } while (r6 != 1);
0x00024722 ldrd r5, sb, [r7] | __asm ("ldrd r5, sb, [r7]");
0x00024726 ldrd r4, r1, [sl] | __asm ("ldrd r4, r1, [sl]");
0x0002472a sub.w r3, sb, r5 | r3 = sb - r5;
| label_8:
0x0002472e add r4, r3 | r4 += r3;
0x00024730 cmp r4, r1 |
0x00024732 it eq |
| if (r4 == r1) {
0x00024734 addeq r3, r5, r8 | r3 = r5 + r8;
| goto label_9;
| }
| if (r4 == r1) {
| label_9:
0x00024738 beq 0x246d8 | goto label_0;
| }
0x0002473a add r3, sp, 8 | r3 += var_8h;
0x0002473c add.w r5, sb, 0x18 | r5 = sb + 0x18;
0x00024740 strd r3, sb, [sp] | __asm ("strd r3, sb, [sp]");
0x00024744 mov sl, r7 | sl = r7;
0x00024746 mov sb, r1 | sb = r1;
0x00024748 b 0x24764 |
| while (r6 < 0xf) {
0x0002474a cmp r6, 1 |
| if (r6 == 1) {
0x0002474c beq 0x2479e | goto label_10;
| }
| if (r6 != 0) {
0x0002474e cbnz r6, 0x2478e | goto label_11;
| }
| label_1:
0x00024750 adds r4, 0x18 | r4 += 0x18;
0x00024752 mov.w r3, 0 | r3 = 0;
0x00024756 cmp r4, sb |
0x00024758 str r6, [r5, -0x14] | *((r5 - 0x14)) = r6;
0x0002475c add.w r5, r5, 0x18 | r5 += 0x18;
0x00024760 strb r3, [r0, r6] | *((r0 + r6)) = r3;
| if (r4 == sb) {
0x00024762 beq 0x247a6 | goto label_12;
| }
0x00024764 ldr r6, [r4, 4] | r6 = *((r4 + 4));
0x00024766 sub.w r0, r5, 0x10 | r0 = r5 - 0x10;
0x0002476a str r0, [r5, -0x18] | *((r5 - 0x18)) = r0;
0x0002476e sub.w fp, r5, 0x18 |
0x00024772 ldr r7, [r4] | r7 = *(r4);
0x00024774 cmp r6, 0xf |
0x00024776 str r6, [sp, 8] | var_8h = r6;
0x00024778 bls 0x2474a |
| }
0x0002477a ldr r1, [sp] | r1 = *(sp);
0x0002477c movs r2, 0 | r2 = 0;
0x0002477e mov r0, fp | r0 = fp;
0x00024780 blx 0xeb28 | fcn_0000eb28 ();
0x00024784 ldr r3, [sp, 8] | r3 = var_8h;
0x00024786 str r0, [r5, -0x18] | *((r5 - 0x18)) = r0;
0x0002478a str r3, [r5, -0x10] | *((r5 - 0x10)) = r3;
| label_11:
0x0002478e mov r2, r6 | r2 = r6;
0x00024790 mov r1, r7 | r1 = r7;
0x00024792 blx 0xea08 | fcn_0000ea08 ();
0x00024796 ldr r6, [sp, 8] | r6 = var_8h;
0x00024798 ldr r0, [r5, -0x18] | r0 = *((r5 - 0x18));
0x0002479c b 0x24750 | goto label_1;
| label_10:
0x0002479e ldrb r3, [r7] | r3 = *(r7);
0x000247a0 strb r3, [r5, -0x10] | *((r5 - 0x10)) = r3;
0x000247a4 b 0x24750 | goto label_1;
| label_12:
0x000247a6 ldr.w r3, [sl] | r3 = *(sl);
0x000247aa mov r7, sl | r7 = sl;
0x000247ac add r3, r8 | r3 += r8;
0x000247ae b 0x246d8 | goto label_0;
| label_3:
0x000247b0 movw r3, 0xfff8 |
0x000247b4 movt r3, 0x7fff | r3 = 0x7ffffff8;
0x000247b8 cmp r8, r3 |
| if (r8 > r3) {
0x000247ba bhi 0x2480c | goto label_13;
| }
0x000247bc mov r0, r8 | r0 = r8;
0x000247be str r1, [sp] | *(sp) = r1;
0x000247c0 blx 0xe3f0 | r0 = fcn_0000e3f0 ();
0x000247c4 mov r6, r0 | r6 = r0;
0x000247c6 ldr r1, [sp] | r1 = *(sp);
0x000247c8 mov r0, r4 | r0 = r4;
0x000247ca mov r2, r6 | r2 = r6;
0x000247cc blx 0xe478 | fcn_0000e478 ();
0x000247d0 ldrd r5, sb, [r7] | __asm ("ldrd r5, sb, [r7]");
0x000247d4 cmp r5, sb |
0x000247d6 it ne |
| if (r5 == sb) {
0x000247d8 addne r4, r5, 8 | r4 = r5 + 8;
| }
| if (r5 == sb) {
0x000247dc beq 0x247f6 | goto label_14;
| }
| do {
0x000247de ldr r0, [r4, -0x8] | r0 = *((r4 - 0x8));
0x000247e2 cmp r0, r4 |
| if (r0 != r4) {
0x000247e4 beq 0x247ea |
0x000247e6 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x000247ea adds r5, 0x18 | r5 += 0x18;
0x000247ec adds r4, 0x18 | r4 += 0x18;
0x000247ee cmp sb, r5 |
0x000247f0 bne 0x247de |
| } while (sb != r5);
0x000247f2 ldr.w sb, [r7] | sb = *(r7);
| label_14:
0x000247f6 cmp.w sb, 0 |
| if (sb != 0) {
0x000247fa beq 0x24802 |
0x000247fc mov r0, sb | r0 = sb;
0x000247fe blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x00024802 add.w r3, r6, r8 | r3 = r6 + r8;
0x00024806 str r6, [r7] | *(r7) = r6;
0x00024808 str r3, [r7, 8] | *((r7 + 8)) = r3;
0x0002480a b 0x246d8 | goto label_0;
| label_13:
0x0002480c blx 0xe6dc | fcn_0000e6dc ();
| label_7:
0x00024810 blx 0xe864 | fcn_0000e864 ();
0x00024814 ldr.w sb, [sp, 4] | sb = var_4h_3;
0x00024818 blx 0xe538 | fcn_0000e538 ();
0x0002481c mov r1, fp | r1 = fp;
0x0002481e mov r0, sb | r0 = sb;
0x00024820 bl 0x24d20 | r0 = fcn_00024d20 (r0, r1);
0x00024824 blx 0xe9ec | r0 = malloc (r0);
0x00024828 blx 0xe538 | fcn_0000e538 ();
0x0002482c mov r0, r6 | r0 = r6;
0x0002482e blx 0xe7c0 | fcn_0000e7c0 ();
0x00024832 blx 0xe9ec | r0 = malloc (r0);
0x00024836 blx 0xea8c | fcn_0000ea8c ();
0x0002483a blx 0xe870 | fcn_0000e870 ();
0x0002483e blx 0xea8c | fcn_0000ea8c ();
0x00024842 blx 0xe870 | fcn_0000e870 ();
0x00024846 nop |
0x00024848 str r4, [sp, 0x3a0] | *(arg_3a0h) = r4;
0x0002484a movs r0, r0 |
0x0002484c lsls r4, r6, 0xc | r4 = r6 << 0xc;
0x0002484e movs r0, r0 |
0x00024850 str r4, [sp, 0x140] | *(arg_140h) = r4;
0x00024852 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x248d8 */
| #include <stdint.h>
|
; (fcn) method.mqtt::string_collection.string_collection_mqtt::string_collection_const_ () | void method_mqtt::string_collection_string_collection_mqtt::string_collection_const_ (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
| if (? < ?) {
| /* mqtt::string_collection::string_collection(mqtt::string_collection const&) */
0x000248d8 andhs fp, r0, 112, 10 |
| }
0x000248dc ldrd r3, r5, [r1] | __asm ("ldrd r3, r5, [r1]");
0x000248e0 mov r6, r1 | r6 = r1;
0x000248e2 mov r4, r0 | r4 = r0;
0x000248e4 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000248e8 subs r5, r5, r3 | r5 -= r3;
0x000248ea str r2, [r0, 8] | *((r0 + 8)) = r2;
0x000248ec vst1.32 {d16}, [r0] | __asm ("vst1.32 {d16}, [r0]");
| if (r5 == r5) {
0x000248f0 beq 0x24936 | goto label_0;
| }
0x000248f2 movw r3, 0xfff8 |
0x000248f6 movt r3, 0x7fff | r3 = 0x7ffffff8;
0x000248fa cmp r5, r3 |
| if (r5 > r3) {
0x000248fc bhi 0x2493a | goto label_1;
| }
0x000248fe mov r0, r5 | r0 = r5;
0x00024900 blx 0xe3f0 | r0 = fcn_0000e3f0 ();
0x00024904 mov r2, r0 | r2 = r0;
| do {
0x00024906 vdup.32 d16, r2 | __asm ("vdup.32 d16, r2");
0x0002490a add r5, r2 | r5 += r2;
0x0002490c str r5, [r4, 8] | *((r4 + 8)) = r5;
0x0002490e vst1.32 {d16}, [r4] | __asm ("vst1.32 {d16}, [r4]");
0x00024912 ldrd r0, r1, [r6] | __asm ("ldrd r0, r1, [r6]");
0x00024916 blx 0xe478 | fcn_0000e478 ();
0x0002491a vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0002491e add.w r3, r4, 0xc | r3 = r4 + 0xc;
0x00024922 movs r2, 0 | r2 = 0;
0x00024924 str r0, [r4, 4] | *((r4 + 4)) = r0;
0x00024926 mov r0, r4 | r0 = r4;
0x00024928 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x0002492c str r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x0002492e blx 0xe8c8 | fcn_0000e8c8 ();
0x00024932 mov r0, r4 | r0 = r4;
0x00024934 pop {r4, r5, r6, pc} |
| label_0:
0x00024936 mov r2, r5 | r2 = r5;
0x00024938 b 0x24906 |
| } while (1);
| label_1:
0x0002493a blx 0xe6dc | fcn_0000e6dc ();
0x0002493e ldr r0, [r4] | r0 = *(r4);
| if (r0 == 0) {
0x00024940 cbz r0, 0x24946 | goto label_2;
| }
0x00024942 blx 0xe7c0 | fcn_0000e7c0 ();
| do {
| label_2:
0x00024946 blx 0xe870 | fcn_0000e870 ();
0x0002494a ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
| if (r0 != 0) {
0x0002494c cbz r0, 0x24952 |
0x0002494e blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x00024952 mov r0, r4 | r0 = r4;
0x00024954 bl 0x24b40 | fcn_00024b40 (r0);
0x00024958 b 0x24946 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x244a4 */
| #include <stdint.h>
|
; (fcn) method.mqtt::string_collection.string_collection_std::initializer_list_std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char______ () | void method_mqtt::string_collection_string_collection_std::initializer_list_std::_cxx11::basic_string_char_std::char_traits_char_std::allocator_char_ (int16_t arg_1c0h, int16_t arg_3d0h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_8h_2;
| int16_t var_ch_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| /* mqtt::string_collection::string_collection(std::initializer_list<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >) */
0x000244a4 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000244a8 sub sp, 0x14 |
0x000244aa mov r3, sp | r3 = sp;
0x000244ac mov r7, r0 | r7 = r0;
0x000244ae mov r5, r1 | r5 = r1;
0x000244b0 stm.w r3, {r1, r2} | *(r3) = r1;
| *((r3 + 4)) = r2;
0x000244b4 mov r3, r2 | r3 = r2;
0x000244b6 mov r2, r0 | r2 = r0;
0x000244b8 ldr r0, [pc, 0xd8] |
0x000244ba ldr r1, [pc, 0xdc] | r1 = *(0x2459a);
0x000244bc add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x000244c0 vmov.i32 q9, 0 | __asm ("vmov.i32 q9, 0");
0x000244c4 add r0, pc | r0 = 0x48a5c;
0x000244c6 add.w r8, r5, r3, lsl 3 | r8 = r5 + (r3 << 3);
0x000244ca ldr r1, [r0, r1] |
0x000244cc vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000244d0 cmp r5, r8 |
0x000244d2 ldr r1, [r1] | r1 = *(0x48a5c);
0x000244d4 str r1, [sp, 0xc] | var_ch_2 = r1;
0x000244d6 mov.w r1, 0 | r1 = 0;
0x000244da vst1.32 {d18, d19}, [r2]! | __asm ("vst1.32 {d18, d19}, [r2]!");
0x000244de vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
| if (r5 == r8) {
0x000244e2 beq 0x24536 | goto label_2;
| }
0x000244e4 movs r1, 0 | r1 = 0;
0x000244e6 add.w fp, sp, 8 |
0x000244ea mov r4, r1 | r4 = r1;
0x000244ec mov sl, r1 | sl = r1;
0x000244ee b 0x24524 |
| while (r1 != r4) {
0x000244f0 ldr r6, [r5, 4] | r6 = *((r5 + 4));
0x000244f2 add.w r0, r4, 8 | r0 = r4 + 8;
0x000244f6 str r0, [r4] | *(r4) = r0;
0x000244f8 ldr.w sb, [r5] | sb = *(r5);
0x000244fc cmp r6, 0xf |
0x000244fe str r6, [sp, 8] | var_8h_2 = r6;
| if (r6 > 0xf) {
0x00024500 bhi 0x2455e | goto label_3;
| }
0x00024502 cmp r6, 1 |
| if (r6 != 1) {
0x00024504 bne 0x24558 | goto label_4;
| }
0x00024506 ldrb.w r3, [sb] | r3 = *(sb);
0x0002450a strb r3, [r4, 8] | *((r4 + 8)) = r3;
| label_1:
0x0002450c str r6, [r4, 4] | *((r4 + 4)) = r6;
0x0002450e adds r5, 0x18 | r5 += 0x18;
0x00024510 strb.w sl, [r0, r6] | *((r0 + r6)) = sl;
0x00024514 cmp r5, r8 |
0x00024516 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x00024518 add.w r3, r3, 0x18 | r3 += 0x18;
0x0002451c str r3, [r7, 4] | *((r7 + 4)) = r3;
| if (r5 == r8) {
0x0002451e beq 0x24536 | goto label_2;
| }
| label_0:
0x00024520 ldrd r4, r1, [r7, 4] | __asm ("ldrd r4, r1, [r7, 4]");
0x00024524 cmp r1, r4 |
0x00024526 bne 0x244f0 |
| }
0x00024528 mov r2, r5 | r2 = r5;
0x0002452a mov r0, r7 | r0 = r7;
0x0002452c blx 0xe8ec | fcn_0000e8ec ();
0x00024530 adds r5, 0x18 | r5 += 0x18;
0x00024532 cmp r5, r8 |
| if (r5 != r8) {
0x00024534 bne 0x24520 | goto label_0;
| }
| label_2:
0x00024536 mov r0, r7 | r0 = r7;
0x00024538 blx 0xe8c8 | fcn_0000e8c8 ();
0x0002453c ldr r2, [pc, 0x5c] |
0x0002453e ldr r3, [pc, 0x58] | r3 = *(0x2459a);
0x00024540 add r2, pc | r2 = 0x48ae0;
0x00024542 ldr r3, [r2, r3] | r3 = *(0x48ae0);
0x00024544 ldr r2, [r3] | r2 = *(0x48ae0);
0x00024546 ldr r3, [sp, 0xc] | r3 = var_ch_2;
0x00024548 eors r2, r3 | r2 ^= r3;
0x0002454a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0002454e bne 0x2457c | goto label_5;
| }
0x00024550 mov r0, r7 | r0 = r7;
0x00024552 add sp, 0x14 |
0x00024554 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x00024558 cmp r6, 0 |
| if (r6 == 0) {
0x0002455a beq 0x2450c | goto label_1;
| }
0x0002455c b 0x2456e | goto label_6;
| label_3:
0x0002455e movs r2, 0 | r2 = 0;
0x00024560 mov r1, fp | r1 = fp;
0x00024562 mov r0, r4 | r0 = r4;
0x00024564 blx 0xeb28 | fcn_0000eb28 ();
0x00024568 ldr r3, [sp, 8] | r3 = var_8h_2;
0x0002456a str r0, [r4] | *(r4) = r0;
0x0002456c str r3, [r4, 8] | *((r4 + 8)) = r3;
| label_6:
0x0002456e mov r2, r6 | r2 = r6;
0x00024570 mov r1, sb | r1 = sb;
0x00024572 blx 0xea08 | fcn_0000ea08 ();
0x00024576 ldr r6, [sp, 8] | r6 = var_8h_2;
0x00024578 ldr r0, [r4] | r0 = *(r4);
0x0002457a b 0x2450c | goto label_1;
| label_5:
0x0002457c blx 0xe864 | fcn_0000e864 ();
0x00024580 ldr r0, [r7, 0xc] | r0 = *((r7 + 0xc));
| if (r0 != 0) {
0x00024582 cbz r0, 0x24588 |
0x00024584 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x00024588 mov r0, r7 | r0 = r7;
0x0002458a bl 0x24b40 | r0 = fcn_00024b40 (r0);
0x0002458e blx 0xe870 | fcn_0000e870 ();
0x00024592 nop |
0x00024594 str r6, [sp, 0x1c0] | *(arg_1c0h) = r6;
0x00024596 movs r0, r0 |
0x00024598 lsls r4, r6, 0xc | r4 = r6 << 0xc;
0x0002459a movs r0, r0 |
0x0002459c str r5, [sp, 0x3d0] | *(arg_3d0h) = r5;
0x0002459e movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x24854 */
| #include <stdint.h>
|
; (fcn) method.mqtt::string_collection.string_collection_std::vector_std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char_____std::allocator_std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char________const_ () | void method_mqtt::string_collection_string_collection_std::vector_std::_cxx11::basic_string_char_std::char_traits_char_std::allocator_char_std::allocator_std::_cxx11::basic_string_char_std::char_traits_char_std::allocator_char_const_ (int16_t arg1, int16_t arg2) {
| r0 = arg1;
| r1 = arg2;
| if (? < ?) {
| /* mqtt::string_collection::string_collection(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) */
0x00024854 andhs fp, r0, 112, 10 |
| }
0x00024858 ldrd r3, r5, [r1] | __asm ("ldrd r3, r5, [r1]");
0x0002485c mov r6, r1 | r6 = r1;
0x0002485e mov r4, r0 | r4 = r0;
0x00024860 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00024864 subs r5, r5, r3 | r5 -= r3;
0x00024866 str r2, [r0, 8] | *((r0 + 8)) = r2;
0x00024868 vst1.32 {d16}, [r0] | __asm ("vst1.32 {d16}, [r0]");
| if (r5 == r5) {
0x0002486c beq 0x248b2 | goto label_0;
| }
0x0002486e movw r3, 0xfff8 |
0x00024872 movt r3, 0x7fff | r3 = 0x7ffffff8;
0x00024876 cmp r5, r3 |
| if (r5 > r3) {
0x00024878 bhi 0x248b6 | goto label_1;
| }
0x0002487a mov r0, r5 | r0 = r5;
0x0002487c blx 0xe3f0 | r0 = fcn_0000e3f0 ();
0x00024880 mov r2, r0 | r2 = r0;
| do {
0x00024882 vdup.32 d16, r2 | __asm ("vdup.32 d16, r2");
0x00024886 add r5, r2 | r5 += r2;
0x00024888 str r5, [r4, 8] | *((r4 + 8)) = r5;
0x0002488a vst1.32 {d16}, [r4] | __asm ("vst1.32 {d16}, [r4]");
0x0002488e ldrd r0, r1, [r6] | __asm ("ldrd r0, r1, [r6]");
0x00024892 blx 0xe478 | fcn_0000e478 ();
0x00024896 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0002489a add.w r3, r4, 0xc | r3 = r4 + 0xc;
0x0002489e movs r2, 0 | r2 = 0;
0x000248a0 str r0, [r4, 4] | *((r4 + 4)) = r0;
0x000248a2 mov r0, r4 | r0 = r4;
0x000248a4 vst1.32 {d16}, [r3] | __asm ("vst1.32 {d16}, [r3]");
0x000248a8 str r2, [r4, 0x14] | *((r4 + 0x14)) = r2;
0x000248aa blx 0xe8c8 | fcn_0000e8c8 ();
0x000248ae mov r0, r4 | r0 = r4;
0x000248b0 pop {r4, r5, r6, pc} |
| label_0:
0x000248b2 mov r2, r5 | r2 = r5;
0x000248b4 b 0x24882 |
| } while (1);
| label_1:
0x000248b6 blx 0xe6dc | fcn_0000e6dc ();
0x000248ba ldr r0, [r4] | r0 = *(r4);
| if (r0 == 0) {
0x000248bc cbz r0, 0x248c2 | goto label_2;
| }
0x000248be blx 0xe7c0 | fcn_0000e7c0 ();
| do {
| label_2:
0x000248c2 blx 0xe870 | fcn_0000e870 ();
0x000248c6 ldr r0, [r4, 0xc] | r0 = *((r4 + 0xc));
| if (r0 != 0) {
0x000248c8 cbz r0, 0x248ce |
0x000248ca blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x000248ce mov r0, r4 | r0 = r4;
0x000248d0 bl 0x24b40 | fcn_00024b40 (r0);
0x000248d4 b 0x248c2 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x24050 */
| #include <stdint.h>
|
; (fcn) method.mqtt::string_collection.update_c_arr__ () | void method_mqtt::string_collection_update_c_arr_ (int16_t arg_198h, int16_t arg_368h, int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| /* mqtt::string_collection::update_c_arr() */
0x00024050 ldr r2, [pc, 0xe0] |
0x00024052 ldr r3, [pc, 0xe4] | r3 = *(0x2413a);
0x00024054 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x00024058 sub sp, 0xc |
0x0002405a add r2, pc | r2 = 0x48192;
0x0002405c ldrd r4, r8, [r0] | __asm ("ldrd r4, r8, [r0]");
0x00024060 mov r5, r0 | r5 = r0;
0x00024062 add.w r6, r0, 0xc | r6 = r0 + 0xc;
0x00024066 ldr r3, [r2, r3] |
0x00024068 sub.w r1, r8, r4 | r1 = r8 - r4;
0x0002406c ldr r3, [r3] | r3 = *(0x48192);
0x0002406e str r3, [sp, 4] | var_4h = r3;
0x00024070 mov.w r3, 0 | r3 = 0;
0x00024074 ldrd r2, r3, [r0, 0xc] | __asm ("ldrd r2, r3, [r0, 0xc]");
0x00024078 cmp r2, r3 |
0x0002407a asr.w r3, r1, 3 | r3 = r1 >> 3;
0x0002407e it ne |
| if (r2 == r3) {
0x00024080 strne r2, [r0, 0x10] | *((r0 + 0x10)) = r2;
| }
0x00024082 movw r0, 0xaaab |
0x00024086 cmp r1, 0 |
| /* if there is a right shift of 1, then it's a division by 1/3 */
0x00024088 movt r0, 0xaaaa | r0 = 0xaaaaaaab;
0x0002408c mul r3, r0, r3 | r3 = r0 * r3;
| if (r1 < 0) {
0x00024090 blt 0x2412a | goto label_2;
| }
0x00024092 ldr r1, [r5, 0x14] | r1 = *((r5 + 0x14));
0x00024094 subs r1, r1, r2 | r1 -= r2;
0x00024096 cmp.w r3, r1, asr 2 |
| if (r3 > r1) {
0x0002409a bhi 0x240e4 | goto label_3;
| }
| label_1:
0x0002409c cmp r4, r8 |
| if (r4 == r8) {
0x0002409e beq 0x240ca | goto label_4;
| }
0x000240a0 mov r7, sp | r7 = sp;
0x000240a2 b 0x240b0 |
| while (r1 != r2) {
0x000240a4 adds r4, 0x18 | r4 += 0x18;
0x000240a6 str r3, [r1], 4 | *(r1) = r3;
| r1 += 4;
0x000240aa cmp r4, r8 |
0x000240ac str r1, [r5, 0x10] | *((r5 + 0x10)) = r1;
| if (r4 == r8) {
0x000240ae beq 0x240ca | goto label_4;
| }
| label_0:
0x000240b0 ldrd r1, r2, [r5, 0x10] | __asm ("ldrd r1, r2, [r5, 0x10]");
0x000240b4 ldr r3, [r4] | r3 = *(r4);
0x000240b6 cmp r1, r2 |
0x000240b8 str r3, [sp] | *(sp) = r3;
0x000240ba bne 0x240a4 |
| }
0x000240bc mov r2, r7 | r2 = r7;
0x000240be mov r0, r6 | r0 = r6;
0x000240c0 adds r4, 0x18 | r4 += 0x18;
0x000240c2 blx 0xe520 | fcn_0000e520 ();
0x000240c6 cmp r4, r8 |
| if (r4 != r8) {
0x000240c8 bne 0x240b0 | goto label_0;
| }
| label_4:
0x000240ca ldr r2, [pc, 0x70] |
0x000240cc ldr r3, [pc, 0x68] | r3 = *(0x24138);
0x000240ce add r2, pc | r2 = 0x48210;
0x000240d0 ldr r3, [r2, r3] | r3 = *(0x48210);
0x000240d2 ldr r2, [r3] | r2 = *(0x48210);
0x000240d4 ldr r3, [sp, 4] | r3 = var_4h;
0x000240d6 eors r2, r3 | r2 ^= r3;
0x000240d8 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000240dc bne 0x24126 | goto label_5;
| }
0x000240de add sp, 0xc |
0x000240e0 pop.w {r4, r5, r6, r7, r8, sb, pc} |
| label_3:
0x000240e4 ldr r7, [r5, 0x10] | r7 = *((r5 + 0x10));
0x000240e6 lsls r4, r3, 2 | r4 = r3 << 2;
0x000240e8 mov r0, r4 | r0 = r4;
0x000240ea subs r7, r7, r2 | r7 -= r2;
0x000240ec blx 0xe3f0 | fcn_0000e3f0 ();
0x000240f0 ldrd sb, r2, [r5, 0xc] | __asm ("ldrd sb, r2, [r5, 0xc]");
0x000240f4 mov r8, r0 | r8 = r0;
0x000240f6 sub.w r2, r2, sb | r2 -= sb;
0x000240fa cmp r2, 0 |
| if (r2 > 0) {
0x000240fc bgt 0x24118 | goto label_6;
| }
0x000240fe cmp.w sb, 0 |
0x00024102 bne 0x2411e |
| while (1) {
0x00024104 add r4, r8 | r4 += r8;
0x00024106 add r7, r8 | r7 += r8;
0x00024108 str.w r8, [r5, 0xc] | __asm ("str.w r8, [r5, 0xc]");
0x0002410c strd r7, r4, [r5, 0x10] | __asm ("strd r7, r4, [r5, 0x10]");
0x00024110 ldr.w r8, [r5, 4] | r8 = *((r5 + 4));
0x00024114 ldr r4, [r5] | r4 = *(r5);
0x00024116 b 0x2409c | goto label_1;
| label_6:
0x00024118 mov r1, sb | r1 = sb;
0x0002411a blx 0xe74c | sym ();
0x0002411e mov r0, sb | r0 = sb;
0x00024120 blx 0xe7c0 | fcn_0000e7c0 ();
0x00024124 b 0x24104 |
| }
| label_5:
0x00024126 blx 0xe864 | fcn_0000e864 ();
| label_2:
0x0002412a ldr r0, [pc, 0x14] |
0x0002412c add r0, pc | r0 = 0x48272;
0x0002412e blx 0xe5c8 | fcn_0000e5c8 ();
0x00024132 nop |
0x00024134 ldr r2, [sp, 0x368] | r2 = *(arg_368h);
0x00024136 movs r0, r0 |
0x00024138 lsls r4, r6, 0xc | r4 = r6 << 0xc;
0x0002413a movs r0, r0 |
0x0002413c ldr r2, [sp, 0x198] | r2 = *(arg_198h);
0x0002413e movs r0, r0 |
0x00024140 ldrh r0, [r1, r7] | r0 = *((r1 + r7));
0x00024142 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x26e94 */
| #include <stdint.h>
|
; (fcn) method.mqtt::topic.publish_mqtt::buffer_ref_char__ () | void method_mqtt::topic_publish_mqtt::buffer_ref_char_ (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_1h;
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h_2;
| int16_t var_ch;
| int16_t var_14h_2;
| int16_t var_18h;
| int16_t var_1ch_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| /* mqtt::topic::publish(mqtt::buffer_ref<char>) */
0x00026e94 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00026e98 mov r7, r2 | r7 = r2;
0x00026e9a ldr r2, [pc, 0x1a0] |
0x00026e9c sub sp, 0x24 |
0x00026e9e mov r8, r0 | r8 = r0;
0x00026ea0 movs r0, 0x24 | r0 = 0x24;
0x00026ea2 ldr r3, [pc, 0x19c] | r3 = *(0x27042);
0x00026ea4 mov r5, r1 | r5 = r1;
0x00026ea6 add r2, pc | r2 = 0x4dee8;
0x00026ea8 ldr.w sl, [r1] | sl = *(r1);
0x00026eac ldr.w sb, [pc, 0x194] | sb = *(0x00027044);
0x00026eb0 ldr r3, [r2, r3] |
0x00026eb2 add sb, pc | sb += pc;
0x00026eb4 ldr r3, [r3] | r3 = *(0x4dee8);
0x00026eb6 str r3, [sp, 0x1c] | var_1ch_2 = r3;
0x00026eb8 mov.w r3, 0 | r3 = 0;
0x00026ebc ldr.w r3, [sl] | r3 = *(sl);
0x00026ec0 ldr.w fp, [r3, 0x54] | fp = *((r3 + 0x54));
0x00026ec4 blx 0xe3f0 | fcn_0000e3f0 ();
0x00026ec8 ldr r3, [pc, 0x17c] | r3 = *(0x27048);
0x00026eca adds r2, r0, 4 | r2 = r0 + 4;
0x00026ecc vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x00026ed0 mov r6, r0 | r6 = r0;
0x00026ed2 mov r4, r0 | r4 = r0;
0x00026ed4 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00026ed8 ldr.w r3, [sb, r3] | r3 = *((sb + r3));
0x00026edc ldrd r1, r2, [r5, 4] | __asm ("ldrd r1, r2, [r5, 4]");
0x00026ee0 adds r3, 8 | r3 += 8;
0x00026ee2 str r3, [r6], 0xc | *(r6) = r3;
| r6 += 0xc;
0x00026ee6 add.w r3, r0, 0x14 | r3 = r0 + 0x14;
0x00026eea str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00026eec add r2, r1 | r2 += r1;
0x00026eee mov r0, r6 | r0 = r6;
0x00026ef0 bl 0x26b9c | fcn_00026b9c (r0, r1, r2);
0x00026ef4 vmov.i32 d17, 0 | __asm ("vmov.i32 d17, 0");
0x00026ef8 mov r1, sl | r1 = sl;
0x00026efa vld1.32 {d16}, [r7] | __asm ("vld1.32 {d16}, [r7]");
0x00026efe add r2, sp, 0x14 | r2 += var_14h_2;
0x00026f00 mov r0, r8 | r0 = r8;
0x00026f02 strd r6, r4, [sp, 0x14] | __asm ("strd r6, r4, [sp, 0x14]");
0x00026f06 vst1.32 {d17}, [r7] | __asm ("vst1.32 {d17}, [r7]");
0x00026f0a ldrb.w r3, [r5, 0x20] | r3 = *((r5 + 0x20));
0x00026f0e vstr d16, [sp, 8] | __asm ("vstr d16, [sp, 8]");
0x00026f12 str r3, [sp, 4] | var_4h_2 = r3;
0x00026f14 ldr r3, [r5, 0x1c] | r3 = *((r5 + 0x1c));
0x00026f16 str r3, [sp] | *(sp) = r3;
0x00026f18 add r3, sp, 8 | r3 += var_8h_2;
0x00026f1a blx fp | fp (r0, r1, r2, r3);
0x00026f1c ldr r4, [sp, 0xc] | r4 = var_ch;
| if (r4 == 0) {
0x00026f1e cbz r4, 0x26f36 | goto label_0;
| }
0x00026f20 ldr r3, [pc, 0x128] | r3 = *(0x2704c);
0x00026f22 ldr.w r5, [sb, r3] | r5 = *((sb + r3));
0x00026f26 ldrb r3, [r5] | r3 = *(r5);
0x00026f28 cmp r3, 0 |
| if (r3 == 0) {
0x00026f2a beq 0x26fae | goto label_6;
| }
0x00026f2c ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00026f2e subs r2, r3, 1 | r2 = r3 - 1;
0x00026f30 str r2, [r4, 4] | *((r4 + 4)) = r2;
| label_2:
0x00026f32 cmp r3, 1 |
0x00026f34 beq 0x26f6c |
| while (r3 != 1) {
| label_0:
0x00026f36 ldr r4, [sp, 0x18] | r4 = var_18h;
| if (r4 != 0) {
0x00026f38 cbz r4, 0x26f50 |
0x00026f3a ldr r3, [pc, 0x110] | r3 = *(0x2704e);
0x00026f3c ldr.w r5, [sb, r3] | r5 = *((sb + r3));
0x00026f40 ldrb r3, [r5] | r3 = *(r5);
0x00026f42 cmp r3, 0 |
| if (r3 == 0) {
0x00026f44 beq 0x26fc8 | goto label_7;
| }
0x00026f46 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00026f48 subs r2, r3, 1 | r2 = r3 - 1;
0x00026f4a str r2, [r4, 4] | *((r4 + 4)) = r2;
| label_3:
0x00026f4c cmp r3, 1 |
| if (r3 == 1) {
0x00026f4e beq 0x26f8e | goto label_8;
| }
| }
| label_1:
0x00026f50 ldr r2, [pc, 0xfc] |
0x00026f52 ldr r3, [pc, 0xec] | r3 = *(0x27042);
0x00026f54 add r2, pc | r2 = 0x4dfa8;
0x00026f56 ldr r3, [r2, r3] | r3 = *(0x4dfa8);
0x00026f58 ldr r2, [r3] | r2 = *(0x4dfa8);
0x00026f5a ldr r3, [sp, 0x1c] | r3 = var_1ch_2;
0x00026f5c eors r2, r3 | r2 ^= r3;
0x00026f5e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00026f62 bne 0x2701a | goto label_9;
| }
0x00026f64 mov r0, r8 | r0 = r8;
0x00026f66 add sp, 0x24 |
0x00026f68 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00026f6c ldr r3, [r4] | r3 = *(r4);
0x00026f6e mov r0, r4 | r0 = r4;
0x00026f70 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00026f72 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00026f74 ldrb r3, [r5] | r3 = *(r5);
0x00026f76 cmp r3, 0 |
| if (r3 == 0) {
0x00026f78 beq 0x26ffe | goto label_10;
| }
0x00026f7a ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00026f7c subs r2, r3, 1 | r2 = r3 - 1;
0x00026f7e str r2, [r4, 8] | *((r4 + 8)) = r2;
| label_5:
0x00026f80 cmp r3, 1 |
0x00026f82 bne 0x26f36 |
| }
0x00026f84 ldr r3, [r4] | r3 = *(r4);
0x00026f86 mov r0, r4 | r0 = r4;
0x00026f88 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00026f8a blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00026f8c b 0x26f36 | goto label_0;
| label_8:
0x00026f8e ldr r3, [r4] | r3 = *(r4);
0x00026f90 mov r0, r4 | r0 = r4;
0x00026f92 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00026f94 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00026f96 ldrb r3, [r5] | r3 = *(r5);
| if (r3 == 0) {
0x00026f98 cbz r3, 0x26fe2 | goto label_11;
| }
0x00026f9a ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00026f9c subs r2, r3, 1 | r2 = r3 - 1;
0x00026f9e str r2, [r4, 8] | *((r4 + 8)) = r2;
| label_4:
0x00026fa0 cmp r3, 1 |
| if (r3 != 1) {
0x00026fa2 bne 0x26f50 | goto label_1;
| }
0x00026fa4 ldr r3, [r4] | r3 = *(r4);
0x00026fa6 mov r0, r4 | r0 = r4;
0x00026fa8 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00026faa blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00026fac b 0x26f50 | goto label_1;
| label_6:
0x00026fae adds r2, r4, 4 | r2 = r4 + 4;
0x00026fb0 dmb ish | __asm ("dmb ish");
| do {
0x00026fb4 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00026fb8 subs r1, r3, 1 | r1 = r3 - 1;
0x00026fba strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00026fbe cmp r0, 0 |
0x00026fc0 bne 0x26fb4 |
| } while (r0 != 0);
0x00026fc2 dmb ish | __asm ("dmb ish");
0x00026fc6 b 0x26f32 | goto label_2;
| label_7:
0x00026fc8 adds r2, r4, 4 | r2 = r4 + 4;
0x00026fca dmb ish | __asm ("dmb ish");
| do {
0x00026fce ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00026fd2 subs r1, r3, 1 | r1 = r3 - 1;
0x00026fd4 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00026fd8 cmp r0, 0 |
0x00026fda bne 0x26fce |
| } while (r0 != 0);
0x00026fdc dmb ish | __asm ("dmb ish");
0x00026fe0 b 0x26f4c | goto label_3;
| label_11:
0x00026fe2 add.w r2, r4, 8 | r2 = r4 + 8;
0x00026fe6 dmb ish | __asm ("dmb ish");
| do {
0x00026fea ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00026fee subs r1, r3, 1 | r1 = r3 - 1;
0x00026ff0 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00026ff4 cmp r0, 0 |
0x00026ff6 bne 0x26fea |
| } while (r0 != 0);
0x00026ff8 dmb ish | __asm ("dmb ish");
0x00026ffc b 0x26fa0 | goto label_4;
| label_10:
0x00026ffe add.w r2, r4, 8 | r2 = r4 + 8;
0x00027002 dmb ish | __asm ("dmb ish");
| do {
0x00027006 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x0002700a subs r1, r3, 1 | r1 = r3 - 1;
0x0002700c strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00027010 cmp r0, 0 |
0x00027012 bne 0x27006 |
| } while (r0 != 0);
0x00027014 dmb ish | __asm ("dmb ish");
0x00027018 b 0x26f80 | goto label_5;
| label_9:
0x0002701a blx 0xe864 | fcn_0000e864 ();
0x0002701e ldr r0, [sp, 0xc] | r0 = var_ch;
| if (r0 != 0) {
0x00027020 cbz r0, 0x27026 |
0x00027022 bl 0x17a28 | fcn_00017a28 (r0);
| }
0x00027026 ldr r0, [sp, 0x18] | r0 = var_18h;
| if (r0 != 0) {
0x00027028 cbz r0, 0x2702e |
0x0002702a bl 0x17a28 | r0 = fcn_00017a28 (r0);
| }
0x0002702e blx 0xe870 | fcn_0000e870 ();
0x00027032 mov r0, r4 | r0 = r4;
0x00027034 blx 0xe7c0 | fcn_0000e7c0 ();
0x00027038 blx 0xe870 | fcn_0000e870 ();
0x0002703c ldr r6, [r1, 0x48] | r6 = *((r1 + 0x48));
0x0002703e movs r0, r0 |
0x00027040 lsls r4, r6, 0xc | r4 = r6 << 0xc;
0x00027042 movs r0, r0 |
0x00027044 ldr r2, [r0, 0x48] | r2 = *((r0 + 0x48));
0x00027046 movs r0, r0 |
0x00027048 lsls r4, r1, 0x11 | r4 = r1 << 0x11;
0x0002704a movs r0, r0 |
0x0002704c lsls r0, r4, 0x10 | r0 = r4 << 0x10;
0x0002704e movs r0, r0 |
0x00027050 ldr r0, [r4, 0x3c] | r0 = *((r4 + 0x3c));
0x00027052 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x27054 */
| #include <stdint.h>
|
; (fcn) method.mqtt::topic.publish_mqtt::buffer_ref_char___int__bool_ () | void method_mqtt::topic_publish_mqtt::buffer_ref_char_int_bool_ (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_3;
| int16_t var_ch_2;
| int16_t var_10h;
| int16_t var_14h_3;
| int16_t var_1ch_3;
| int16_t var_20h_2;
| int16_t var_24h_2;
| int16_t var_0h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| /* mqtt::topic::publish(mqtt::buffer_ref<char>, int, bool) */
0x00027054 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00027058 mov r6, r2 | r6 = r2;
0x0002705a ldr r2, [pc, 0x1a4] |
0x0002705c mov sb, r3 | sb = r3;
0x0002705e sub sp, 0x2c |
0x00027060 mov r7, r0 | r7 = r0;
0x00027062 ldr r3, [pc, 0x1a0] | r3 = *(0x27206);
0x00027064 movs r0, 0x24 | r0 = 0x24;
0x00027066 add r2, pc | r2 = 0x4e26c;
0x00027068 ldr.w sl, [r1] | sl = *(r1);
0x0002706c ldr.w r8, [pc, 0x198] |
0x00027070 mov r5, r1 | r5 = r1;
0x00027072 ldr r3, [r2, r3] |
0x00027074 ldrb.w fp, [sp, 0x50] | fp = var_0h_2;
0x00027078 add r8, pc | r8 = 0x4e284;
0x0002707a ldr r3, [r3] | r3 = *(0x4e26c);
0x0002707c str r3, [sp, 0x24] | var_24h_2 = r3;
0x0002707e mov.w r3, 0 | r3 = 0;
0x00027082 ldr.w r3, [sl] | r3 = *(sl);
0x00027086 ldr r3, [r3, 0x54] | r3 = *((r3 + 0x54));
0x00027088 str r3, [sp, 0xc] | var_ch_2 = r3;
0x0002708a blx 0xe3f0 | fcn_0000e3f0 ();
0x0002708e ldr r3, [pc, 0x17c] | r3 = *(0x2720e);
0x00027090 adds r2, r0, 4 | r2 = r0 + 4;
0x00027092 vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x00027096 mov r4, r0 | r4 = r0;
0x00027098 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x0002709c ldr.w r3, [r8, r3] | r3 = *(0x4e284);
0x000270a0 ldrd r1, r2, [r5, 4] | __asm ("ldrd r1, r2, [r5, 4]");
0x000270a4 mov r5, r0 | r5 = r0;
0x000270a6 adds r3, 8 | r3 += 8;
0x000270a8 str r3, [r5], 0xc | *(r5) = r3;
| r5 += 0xc;
0x000270ac add.w r3, r0, 0x14 | r3 = r0 + 0x14;
0x000270b0 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x000270b2 add r2, r1 | r2 += r1;
0x000270b4 mov r0, r5 | r0 = r5;
0x000270b6 bl 0x26b9c | fcn_00026b9c (r0, r1, r2);
0x000270ba vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000270be mov r1, sl | r1 = sl;
0x000270c0 strd sb, fp, [sp] | __asm ("strd sb, fp, [sp]");
0x000270c4 add r3, sp, 0x10 | r3 += var_10h;
0x000270c6 vld1.32 {d17}, [r6] | __asm ("vld1.32 {d17}, [r6]");
0x000270ca add r2, sp, 0x1c | r2 += var_1ch_3;
0x000270cc strd r5, r4, [sp, 0x1c] | __asm ("strd r5, r4, [sp, 0x1c]");
0x000270d0 mov r0, r7 | r0 = r7;
0x000270d2 ldr r4, [sp, 0xc] | r4 = var_ch_2;
0x000270d4 vstr d17, [sp, 0x10] | __asm ("vstr d17, [sp, 0x10]");
0x000270d8 vst1.32 {d16}, [r6] | __asm ("vst1.32 {d16}, [r6]");
0x000270dc blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000270de ldr r4, [sp, 0x14] | r4 = var_14h_3;
| if (r4 == 0) {
0x000270e0 cbz r4, 0x270f8 | goto label_0;
| }
0x000270e2 ldr r3, [pc, 0x12c] | r3 = *(0x27212);
0x000270e4 ldr.w r5, [r8, r3] | r5 = *((r8 + r3));
0x000270e8 ldrb r3, [r5] | r3 = *(r5);
0x000270ea cmp r3, 0 |
| if (r3 == 0) {
0x000270ec beq 0x27170 | goto label_6;
| }
0x000270ee ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000270f0 subs r2, r3, 1 | r2 = r3 - 1;
0x000270f2 str r2, [r4, 4] | *((r4 + 4)) = r2;
| label_2:
0x000270f4 cmp r3, 1 |
0x000270f6 beq 0x2712e |
| while (r3 != 1) {
| label_0:
0x000270f8 ldr r4, [sp, 0x20] | r4 = var_20h_2;
| if (r4 != 0) {
0x000270fa cbz r4, 0x27112 |
0x000270fc ldr r3, [pc, 0x110] | r3 = *(0x27210);
0x000270fe ldr.w r5, [r8, r3] | r5 = *((r8 + r3));
0x00027102 ldrb r3, [r5] | r3 = *(r5);
0x00027104 cmp r3, 0 |
| if (r3 == 0) {
0x00027106 beq 0x2718a | goto label_7;
| }
0x00027108 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0002710a subs r2, r3, 1 | r2 = r3 - 1;
0x0002710c str r2, [r4, 4] | *((r4 + 4)) = r2;
| label_3:
0x0002710e cmp r3, 1 |
| if (r3 == 1) {
0x00027110 beq 0x27150 | goto label_8;
| }
| }
| label_1:
0x00027112 ldr r2, [pc, 0x100] |
0x00027114 ldr r3, [pc, 0xec] | r3 = *(0x27204);
0x00027116 add r2, pc | r2 = 0x4e330;
0x00027118 ldr r3, [r2, r3] | r3 = *(0x4e330);
0x0002711a ldr r2, [r3] | r2 = *(0x4e330);
0x0002711c ldr r3, [sp, 0x24] | r3 = var_24h_2;
0x0002711e eors r2, r3 | r2 ^= r3;
0x00027120 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00027124 bne 0x271dc | goto label_9;
| }
0x00027126 mov r0, r7 | r0 = r7;
0x00027128 add sp, 0x2c |
0x0002712a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0002712e ldr r3, [r4] | r3 = *(r4);
0x00027130 mov r0, r4 | r0 = r4;
0x00027132 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00027134 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00027136 ldrb r3, [r5] | r3 = *(r5);
0x00027138 cmp r3, 0 |
| if (r3 == 0) {
0x0002713a beq 0x271c0 | goto label_10;
| }
0x0002713c ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0002713e subs r2, r3, 1 | r2 = r3 - 1;
0x00027140 str r2, [r4, 8] | *((r4 + 8)) = r2;
| label_5:
0x00027142 cmp r3, 1 |
0x00027144 bne 0x270f8 |
| }
0x00027146 ldr r3, [r4] | r3 = *(r4);
0x00027148 mov r0, r4 | r0 = r4;
0x0002714a ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0002714c blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0002714e b 0x270f8 | goto label_0;
| label_8:
0x00027150 ldr r3, [r4] | r3 = *(r4);
0x00027152 mov r0, r4 | r0 = r4;
0x00027154 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00027156 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00027158 ldrb r3, [r5] | r3 = *(r5);
| if (r3 == 0) {
0x0002715a cbz r3, 0x271a4 | goto label_11;
| }
0x0002715c ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0002715e subs r2, r3, 1 | r2 = r3 - 1;
0x00027160 str r2, [r4, 8] | *((r4 + 8)) = r2;
| label_4:
0x00027162 cmp r3, 1 |
| if (r3 != 1) {
0x00027164 bne 0x27112 | goto label_1;
| }
0x00027166 ldr r3, [r4] | r3 = *(r4);
0x00027168 mov r0, r4 | r0 = r4;
0x0002716a ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0002716c blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0002716e b 0x27112 | goto label_1;
| label_6:
0x00027170 adds r2, r4, 4 | r2 = r4 + 4;
0x00027172 dmb ish | __asm ("dmb ish");
| do {
0x00027176 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x0002717a subs r1, r3, 1 | r1 = r3 - 1;
0x0002717c strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00027180 cmp r0, 0 |
0x00027182 bne 0x27176 |
| } while (r0 != 0);
0x00027184 dmb ish | __asm ("dmb ish");
0x00027188 b 0x270f4 | goto label_2;
| label_7:
0x0002718a adds r2, r4, 4 | r2 = r4 + 4;
0x0002718c dmb ish | __asm ("dmb ish");
| do {
0x00027190 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00027194 subs r1, r3, 1 | r1 = r3 - 1;
0x00027196 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x0002719a cmp r0, 0 |
0x0002719c bne 0x27190 |
| } while (r0 != 0);
0x0002719e dmb ish | __asm ("dmb ish");
0x000271a2 b 0x2710e | goto label_3;
| label_11:
0x000271a4 add.w r2, r4, 8 | r2 = r4 + 8;
0x000271a8 dmb ish | __asm ("dmb ish");
| do {
0x000271ac ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000271b0 subs r1, r3, 1 | r1 = r3 - 1;
0x000271b2 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x000271b6 cmp r0, 0 |
0x000271b8 bne 0x271ac |
| } while (r0 != 0);
0x000271ba dmb ish | __asm ("dmb ish");
0x000271be b 0x27162 | goto label_4;
| label_10:
0x000271c0 add.w r2, r4, 8 | r2 = r4 + 8;
0x000271c4 dmb ish | __asm ("dmb ish");
| do {
0x000271c8 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000271cc subs r1, r3, 1 | r1 = r3 - 1;
0x000271ce strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x000271d2 cmp r0, 0 |
0x000271d4 bne 0x271c8 |
| } while (r0 != 0);
0x000271d6 dmb ish | __asm ("dmb ish");
0x000271da b 0x27142 | goto label_5;
| label_9:
0x000271dc blx 0xe864 | fcn_0000e864 ();
0x000271e0 ldr r0, [sp, 0x14] | r0 = var_14h_3;
| if (r0 != 0) {
0x000271e2 cbz r0, 0x271e8 |
0x000271e4 bl 0x17a28 | fcn_00017a28 (r0);
| }
0x000271e8 ldr r0, [sp, 0x20] | r0 = var_20h_2;
| if (r0 != 0) {
0x000271ea cbz r0, 0x271f0 |
0x000271ec bl 0x17a28 | r0 = fcn_00017a28 (r0);
| }
0x000271f0 blx 0xe870 | fcn_0000e870 ();
0x000271f4 mov r0, r4 | r0 = r4;
0x000271f6 blx 0xe7c0 | fcn_0000e7c0 ();
0x000271fa blx 0xe870 | fcn_0000e870 ();
0x000271fe nop |
0x00027200 ldr r6, [r1, 0x2c] | r6 = *((r1 + 0x2c));
0x00027202 movs r0, r0 |
0x00027204 lsls r4, r6, 0xc | r4 = r6 << 0xc;
0x00027206 movs r0, r0 |
0x00027208 ldr r4, [r7, 0x28] | r4 = *((r7 + 0x28));
0x0002720a movs r0, r0 |
0x0002720c lsls r4, r1, 0x11 | r4 = r1 << 0x11;
0x0002720e movs r0, r0 |
0x00027210 lsls r0, r4, 0x10 | r0 = r4 << 0x10;
0x00027212 movs r0, r0 |
0x00027214 ldr r6, [r3, 0x20] | r6 = *((r3 + 0x20));
0x00027216 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x27054 */
| #include <stdint.h>
|
; (fcn) method.mqtt::topic.publish_mqtt::buffer_ref_char___int__bool_ () | void method_mqtt::topic_publish_mqtt::buffer_ref_char_int_bool_ (int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_3;
| int16_t var_ch_2;
| int16_t var_10h;
| int16_t var_14h_3;
| int16_t var_1ch_3;
| int16_t var_20h_2;
| int16_t var_24h_2;
| int16_t var_0h_2;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| /* mqtt::topic::publish(mqtt::buffer_ref<char>, int, bool) */
0x00027054 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00027058 mov r6, r2 | r6 = r2;
0x0002705a ldr r2, [pc, 0x1a4] |
0x0002705c mov sb, r3 | sb = r3;
0x0002705e sub sp, 0x2c |
0x00027060 mov r7, r0 | r7 = r0;
0x00027062 ldr r3, [pc, 0x1a0] | r3 = *(0x27206);
0x00027064 movs r0, 0x24 | r0 = 0x24;
0x00027066 add r2, pc | r2 = 0x4e26c;
0x00027068 ldr.w sl, [r1] | sl = *(r1);
0x0002706c ldr.w r8, [pc, 0x198] |
0x00027070 mov r5, r1 | r5 = r1;
0x00027072 ldr r3, [r2, r3] |
0x00027074 ldrb.w fp, [sp, 0x50] | fp = var_0h_2;
0x00027078 add r8, pc | r8 = 0x4e284;
0x0002707a ldr r3, [r3] | r3 = *(0x4e26c);
0x0002707c str r3, [sp, 0x24] | var_24h_2 = r3;
0x0002707e mov.w r3, 0 | r3 = 0;
0x00027082 ldr.w r3, [sl] | r3 = *(sl);
0x00027086 ldr r3, [r3, 0x54] | r3 = *((r3 + 0x54));
0x00027088 str r3, [sp, 0xc] | var_ch_2 = r3;
0x0002708a blx 0xe3f0 | fcn_0000e3f0 ();
0x0002708e ldr r3, [pc, 0x17c] | r3 = *(0x2720e);
0x00027090 adds r2, r0, 4 | r2 = r0 + 4;
0x00027092 vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x00027096 mov r4, r0 | r4 = r0;
0x00027098 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x0002709c ldr.w r3, [r8, r3] | r3 = *(0x4e284);
0x000270a0 ldrd r1, r2, [r5, 4] | __asm ("ldrd r1, r2, [r5, 4]");
0x000270a4 mov r5, r0 | r5 = r0;
0x000270a6 adds r3, 8 | r3 += 8;
0x000270a8 str r3, [r5], 0xc | *(r5) = r3;
| r5 += 0xc;
0x000270ac add.w r3, r0, 0x14 | r3 = r0 + 0x14;
0x000270b0 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x000270b2 add r2, r1 | r2 += r1;
0x000270b4 mov r0, r5 | r0 = r5;
0x000270b6 bl 0x26b9c | fcn_00026b9c (r0, r1, r2);
0x000270ba vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x000270be mov r1, sl | r1 = sl;
0x000270c0 strd sb, fp, [sp] | __asm ("strd sb, fp, [sp]");
0x000270c4 add r3, sp, 0x10 | r3 += var_10h;
0x000270c6 vld1.32 {d17}, [r6] | __asm ("vld1.32 {d17}, [r6]");
0x000270ca add r2, sp, 0x1c | r2 += var_1ch_3;
0x000270cc strd r5, r4, [sp, 0x1c] | __asm ("strd r5, r4, [sp, 0x1c]");
0x000270d0 mov r0, r7 | r0 = r7;
0x000270d2 ldr r4, [sp, 0xc] | r4 = var_ch_2;
0x000270d4 vstr d17, [sp, 0x10] | __asm ("vstr d17, [sp, 0x10]");
0x000270d8 vst1.32 {d16}, [r6] | __asm ("vst1.32 {d16}, [r6]");
0x000270dc blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000270de ldr r4, [sp, 0x14] | r4 = var_14h_3;
| if (r4 == 0) {
0x000270e0 cbz r4, 0x270f8 | goto label_0;
| }
0x000270e2 ldr r3, [pc, 0x12c] | r3 = *(0x27212);
0x000270e4 ldr.w r5, [r8, r3] | r5 = *((r8 + r3));
0x000270e8 ldrb r3, [r5] | r3 = *(r5);
0x000270ea cmp r3, 0 |
| if (r3 == 0) {
0x000270ec beq 0x27170 | goto label_6;
| }
0x000270ee ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x000270f0 subs r2, r3, 1 | r2 = r3 - 1;
0x000270f2 str r2, [r4, 4] | *((r4 + 4)) = r2;
| label_2:
0x000270f4 cmp r3, 1 |
0x000270f6 beq 0x2712e |
| while (r3 != 1) {
| label_0:
0x000270f8 ldr r4, [sp, 0x20] | r4 = var_20h_2;
| if (r4 != 0) {
0x000270fa cbz r4, 0x27112 |
0x000270fc ldr r3, [pc, 0x110] | r3 = *(0x27210);
0x000270fe ldr.w r5, [r8, r3] | r5 = *((r8 + r3));
0x00027102 ldrb r3, [r5] | r3 = *(r5);
0x00027104 cmp r3, 0 |
| if (r3 == 0) {
0x00027106 beq 0x2718a | goto label_7;
| }
0x00027108 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0002710a subs r2, r3, 1 | r2 = r3 - 1;
0x0002710c str r2, [r4, 4] | *((r4 + 4)) = r2;
| label_3:
0x0002710e cmp r3, 1 |
| if (r3 == 1) {
0x00027110 beq 0x27150 | goto label_8;
| }
| }
| label_1:
0x00027112 ldr r2, [pc, 0x100] |
0x00027114 ldr r3, [pc, 0xec] | r3 = *(0x27204);
0x00027116 add r2, pc | r2 = 0x4e330;
0x00027118 ldr r3, [r2, r3] | r3 = *(0x4e330);
0x0002711a ldr r2, [r3] | r2 = *(0x4e330);
0x0002711c ldr r3, [sp, 0x24] | r3 = var_24h_2;
0x0002711e eors r2, r3 | r2 ^= r3;
0x00027120 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00027124 bne 0x271dc | goto label_9;
| }
0x00027126 mov r0, r7 | r0 = r7;
0x00027128 add sp, 0x2c |
0x0002712a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0002712e ldr r3, [r4] | r3 = *(r4);
0x00027130 mov r0, r4 | r0 = r4;
0x00027132 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00027134 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00027136 ldrb r3, [r5] | r3 = *(r5);
0x00027138 cmp r3, 0 |
| if (r3 == 0) {
0x0002713a beq 0x271c0 | goto label_10;
| }
0x0002713c ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0002713e subs r2, r3, 1 | r2 = r3 - 1;
0x00027140 str r2, [r4, 8] | *((r4 + 8)) = r2;
| label_5:
0x00027142 cmp r3, 1 |
0x00027144 bne 0x270f8 |
| }
0x00027146 ldr r3, [r4] | r3 = *(r4);
0x00027148 mov r0, r4 | r0 = r4;
0x0002714a ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0002714c blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0002714e b 0x270f8 | goto label_0;
| label_8:
0x00027150 ldr r3, [r4] | r3 = *(r4);
0x00027152 mov r0, r4 | r0 = r4;
0x00027154 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00027156 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00027158 ldrb r3, [r5] | r3 = *(r5);
| if (r3 == 0) {
0x0002715a cbz r3, 0x271a4 | goto label_11;
| }
0x0002715c ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0002715e subs r2, r3, 1 | r2 = r3 - 1;
0x00027160 str r2, [r4, 8] | *((r4 + 8)) = r2;
| label_4:
0x00027162 cmp r3, 1 |
| if (r3 != 1) {
0x00027164 bne 0x27112 | goto label_1;
| }
0x00027166 ldr r3, [r4] | r3 = *(r4);
0x00027168 mov r0, r4 | r0 = r4;
0x0002716a ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0002716c blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0002716e b 0x27112 | goto label_1;
| label_6:
0x00027170 adds r2, r4, 4 | r2 = r4 + 4;
0x00027172 dmb ish | __asm ("dmb ish");
| do {
0x00027176 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x0002717a subs r1, r3, 1 | r1 = r3 - 1;
0x0002717c strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00027180 cmp r0, 0 |
0x00027182 bne 0x27176 |
| } while (r0 != 0);
0x00027184 dmb ish | __asm ("dmb ish");
0x00027188 b 0x270f4 | goto label_2;
| label_7:
0x0002718a adds r2, r4, 4 | r2 = r4 + 4;
0x0002718c dmb ish | __asm ("dmb ish");
| do {
0x00027190 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00027194 subs r1, r3, 1 | r1 = r3 - 1;
0x00027196 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x0002719a cmp r0, 0 |
0x0002719c bne 0x27190 |
| } while (r0 != 0);
0x0002719e dmb ish | __asm ("dmb ish");
0x000271a2 b 0x2710e | goto label_3;
| label_11:
0x000271a4 add.w r2, r4, 8 | r2 = r4 + 8;
0x000271a8 dmb ish | __asm ("dmb ish");
| do {
0x000271ac ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000271b0 subs r1, r3, 1 | r1 = r3 - 1;
0x000271b2 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x000271b6 cmp r0, 0 |
0x000271b8 bne 0x271ac |
| } while (r0 != 0);
0x000271ba dmb ish | __asm ("dmb ish");
0x000271be b 0x27162 | goto label_4;
| label_10:
0x000271c0 add.w r2, r4, 8 | r2 = r4 + 8;
0x000271c4 dmb ish | __asm ("dmb ish");
| do {
0x000271c8 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000271cc subs r1, r3, 1 | r1 = r3 - 1;
0x000271ce strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x000271d2 cmp r0, 0 |
0x000271d4 bne 0x271c8 |
| } while (r0 != 0);
0x000271d6 dmb ish | __asm ("dmb ish");
0x000271da b 0x27142 | goto label_5;
| label_9:
0x000271dc blx 0xe864 | fcn_0000e864 ();
0x000271e0 ldr r0, [sp, 0x14] | r0 = var_14h_3;
| if (r0 != 0) {
0x000271e2 cbz r0, 0x271e8 |
0x000271e4 bl 0x17a28 | fcn_00017a28 (r0);
| }
0x000271e8 ldr r0, [sp, 0x20] | r0 = var_20h_2;
| if (r0 != 0) {
0x000271ea cbz r0, 0x271f0 |
0x000271ec bl 0x17a28 | r0 = fcn_00017a28 (r0);
| }
0x000271f0 blx 0xe870 | fcn_0000e870 ();
0x000271f4 mov r0, r4 | r0 = r4;
0x000271f6 blx 0xe7c0 | fcn_0000e7c0 ();
0x000271fa blx 0xe870 | fcn_0000e870 ();
0x000271fe nop |
0x00027200 ldr r6, [r1, 0x2c] | r6 = *((r1 + 0x2c));
0x00027202 movs r0, r0 |
0x00027204 lsls r4, r6, 0xc | r4 = r6 << 0xc;
0x00027206 movs r0, r0 |
0x00027208 ldr r4, [r7, 0x28] | r4 = *((r7 + 0x28));
0x0002720a movs r0, r0 |
0x0002720c lsls r4, r1, 0x11 | r4 = r1 << 0x11;
0x0002720e movs r0, r0 |
0x00027210 lsls r0, r4, 0x10 | r0 = r4 << 0x10;
0x00027212 movs r0, r0 |
0x00027214 ldr r6, [r3, 0x20] | r6 = *((r3 + 0x20));
0x00027216 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x26c1c */
| #include <stdint.h>
|
; (fcn) method.mqtt::topic.publish_void_const__unsigned_int_ () | void method_mqtt::topic_publish_void_const_unsigned_int_ (int16_t arg_0h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h_2;
| int16_t var_4h_2;
| int16_t var_8h_2;
| int16_t var_14h_2;
| int16_t var_1ch_2;
| int16_t var_20h_2;
| int16_t var_24h_2;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| /* mqtt::topic::publish(void const*, unsigned int) */
0x00026c1c svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00026c20 mov r8, r2 | r8 = r2;
0x00026c22 ldr r2, [pc, 0x11c] |
0x00026c24 mov sb, r3 | sb = r3;
0x00026c26 sub sp, 0x2c |
0x00026c28 mov r7, r0 | r7 = r0;
0x00026c2a ldr r3, [pc, 0x118] | r3 = *(0x26d46);
0x00026c2c movs r0, 0x24 | r0 = 0x24;
0x00026c2e add r2, pc | r2 = 0x4d974;
0x00026c30 ldr.w fp, [r1] | fp = *(r1);
0x00026c34 ldr.w sl, [pc, 0x110] |
0x00026c38 mov r5, r1 | r5 = r1;
0x00026c3a ldr r3, [r2, r3] |
0x00026c3c add sl, pc | sl = 0x4d988;
0x00026c3e ldr r3, [r3] | r3 = *(0x4d974);
0x00026c40 str r3, [sp, 0x24] | var_24h = r3;
0x00026c42 mov.w r3, 0 | r3 = 0;
0x00026c46 ldr.w r3, [fp] | r3 = *(fp);
0x00026c4a ldr r3, [r3, 0x48] | r3 = *((r3 + 0x48));
0x00026c4c str r3, [sp, 0x14] | var_14h = r3;
0x00026c4e blx 0xe3f0 | fcn_0000e3f0 ();
0x00026c52 ldr r3, [pc, 0xf8] | r3 = *(0x26d4e);
0x00026c54 adds r2, r0, 4 | r2 = r0 + 4;
0x00026c56 vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x00026c5a mov r6, r0 | r6 = r0;
0x00026c5c mov r4, r0 | r4 = r0;
0x00026c5e vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00026c62 ldr.w r3, [sl, r3] | r3 = *(0x4d988);
0x00026c66 ldrd r1, r2, [r5, 4] | __asm ("ldrd r1, r2, [r5, 4]");
0x00026c6a adds r3, 8 | r3 += 8;
0x00026c6c str r3, [r6], 0xc | *(r6) = r3;
| r6 += 0xc;
0x00026c70 add.w r3, r0, 0x14 | r3 = r0 + 0x14;
0x00026c74 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00026c76 add r2, r1 | r2 += r1;
0x00026c78 mov r0, r6 | r0 = r6;
0x00026c7a bl 0x26b9c | fcn_00026b9c (r0, r1, r2);
0x00026c7e str.w sb, [sp] | __asm ("str.w sb, [sp]");
0x00026c82 mov r3, r8 | r3 = r8;
0x00026c84 ldrb.w r2, [r5, 0x20] | r2 = *((r5 + 0x20));
0x00026c88 mov r1, fp | r1 = fp;
0x00026c8a strd r6, r4, [sp, 0x1c] | __asm ("strd r6, r4, [var_1ch]");
0x00026c8e mov r0, r7 | r0 = r7;
0x00026c90 ldr r4, [sp, 0x14] | r4 = var_14h;
0x00026c92 str r2, [sp, 8] | var_8h = r2;
0x00026c94 ldr r2, [r5, 0x1c] | r2 = *((r5 + 0x1c));
0x00026c96 str r2, [sp, 4] | var_4h = r2;
0x00026c98 add r2, sp, 0x1c | r2 += var_1ch;
0x00026c9a blx r4 | uint32_t (*r4)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00026c9c ldr r4, [sp, 0x20] | r4 = var_20h;
| if (r4 == 0) {
0x00026c9e cbz r4, 0x26cb4 | goto label_0;
| }
0x00026ca0 ldr r3, [pc, 0xac] | r3 = *(0x26d50);
0x00026ca2 ldr.w r5, [sl, r3] | r5 = *((sl + r3));
0x00026ca6 ldrb r3, [r5] | r3 = *(r5);
| if (r3 == 0) {
0x00026ca8 cbz r3, 0x26cf0 | goto label_3;
| }
0x00026caa ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00026cac subs r2, r3, 1 | r2 = r3 - 1;
0x00026cae str r2, [r4, 4] | *((r4 + 4)) = r2;
| label_1:
0x00026cb0 cmp r3, 1 |
0x00026cb2 beq 0x26cd0 |
| while (r3 != 1) {
| label_0:
0x00026cb4 ldr r2, [pc, 0x9c] |
0x00026cb6 ldr r3, [pc, 0x8c] | r3 = *(0x26d46);
0x00026cb8 add r2, pc | r2 = 0x4da10;
0x00026cba ldr r3, [r2, r3] | r3 = *(0x4da10);
0x00026cbc ldr r2, [r3] | r2 = *(0x4da10);
0x00026cbe ldr r3, [sp, 0x24] | r3 = var_24h;
0x00026cc0 eors r2, r3 | r2 ^= r3;
0x00026cc2 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00026cc6 bne 0x26d26 | goto label_4;
| }
0x00026cc8 mov r0, r7 | r0 = r7;
0x00026cca add sp, 0x2c |
0x00026ccc pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00026cd0 ldr r3, [r4] | r3 = *(r4);
0x00026cd2 mov r0, r4 | r0 = r4;
0x00026cd4 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00026cd6 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00026cd8 ldrb r3, [r5] | r3 = *(r5);
| if (r3 == 0) {
0x00026cda cbz r3, 0x26d0a | goto label_5;
| }
0x00026cdc ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00026cde subs r2, r3, 1 | r2 = r3 - 1;
0x00026ce0 str r2, [r4, 8] | *((r4 + 8)) = r2;
| label_2:
0x00026ce2 cmp r3, 1 |
0x00026ce4 bne 0x26cb4 |
| }
0x00026ce6 ldr r3, [r4] | r3 = *(r4);
0x00026ce8 mov r0, r4 | r0 = r4;
0x00026cea ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00026cec blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00026cee b 0x26cb4 | goto label_0;
| label_3:
0x00026cf0 adds r2, r4, 4 | r2 = r4 + 4;
0x00026cf2 dmb ish | __asm ("dmb ish");
| do {
0x00026cf6 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00026cfa subs r1, r3, 1 | r1 = r3 - 1;
0x00026cfc strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00026d00 cmp r0, 0 |
0x00026d02 bne 0x26cf6 |
| } while (r0 != 0);
0x00026d04 dmb ish | __asm ("dmb ish");
0x00026d08 b 0x26cb0 | goto label_1;
| label_5:
0x00026d0a add.w r2, r4, 8 | r2 = r4 + 8;
0x00026d0e dmb ish | __asm ("dmb ish");
| do {
0x00026d12 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00026d16 subs r1, r3, 1 | r1 = r3 - 1;
0x00026d18 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00026d1c cmp r0, 0 |
0x00026d1e bne 0x26d12 |
| } while (r0 != 0);
0x00026d20 dmb ish | __asm ("dmb ish");
0x00026d24 b 0x26ce2 | goto label_2;
| label_4:
0x00026d26 blx 0xe864 | fcn_0000e864 ();
0x00026d2a ldr r0, [sp, 0x20] | r0 = var_20h;
| if (r0 != 0) {
0x00026d2c cbz r0, 0x26d32 |
0x00026d2e bl 0x17a28 | r0 = fcn_00017a28 (r0);
| }
0x00026d32 blx 0xe870 | fcn_0000e870 ();
0x00026d36 mov r0, r4 | r0 = r4;
0x00026d38 blx 0xe7c0 | fcn_0000e7c0 ();
0x00026d3c blx 0xe870 | fcn_0000e870 ();
0x00026d40 ldr r6, [r0, 0x70] | r6 = *((r0 + 0x70));
0x00026d42 movs r0, r0 |
0x00026d44 lsls r4, r6, 0xc | r4 = r6 << 0xc;
0x00026d46 movs r0, r0 |
0x00026d48 ldr r0, [r7, 0x6c] | r0 = *((r7 + 0x6c));
0x00026d4a movs r0, r0 |
0x00026d4c lsls r4, r1, 0x11 | r4 = r1 << 0x11;
0x00026d4e movs r0, r0 |
0x00026d50 lsls r0, r4, 0x10 | r0 = r4 << 0x10;
0x00026d52 movs r0, r0 |
0x00026d54 ldr r4, [r7, 0x64] | r4 = *((r7 + 0x64));
0x00026d56 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x26d58 */
| #include <stdint.h>
|
; (fcn) method.mqtt::topic.publish_void_const__unsigned_int__int__bool_ () | void method_mqtt::topic_publish_void_const_unsigned_int_int_bool_ (int16_t arg_50h, int16_t arg_54h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_ch_3;
| int16_t var_1ch_4;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| /* mqtt::topic::publish(void const*, unsigned int, int, bool) */
0x00026d58 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00026d5c sub sp, 0x2c |
0x00026d5e str r2, [sp, 0x14] | var_14h = r2;
0x00026d60 mov r8, r3 | r8 = r3;
0x00026d62 mov r6, r0 | r6 = r0;
0x00026d64 movs r0, 0x24 | r0 = 0x24;
0x00026d66 ldr r2, [pc, 0x114] |
0x00026d68 mov r5, r1 | r5 = r1;
0x00026d6a ldr r3, [pc, 0x114] | r3 = *(0x26e82);
0x00026d6c ldr.w sl, [r1] | sl = *(r1);
0x00026d70 add r2, pc | r2 = 0x4dbf2;
0x00026d72 ldr.w sb, [pc, 0x110] |
0x00026d76 ldr r3, [r2, r3] |
0x00026d78 ldrb.w fp, [sp, 0x54] | fp = *(arg_54h);
0x00026d7c add sb, pc | sb = 0x4dc06;
0x00026d7e ldr r3, [r3] | r3 = *(0x4dbf2);
0x00026d80 str r3, [sp, 0x24] | var_24h = r3;
0x00026d82 mov.w r3, 0 | r3 = 0;
0x00026d86 ldr.w r3, [sl] | r3 = *(sl);
0x00026d8a ldr r7, [r3, 0x48] | r7 = *((r3 + 0x48));
0x00026d8c blx 0xe3f0 | fcn_0000e3f0 ();
0x00026d90 ldr r3, [pc, 0xf4] | r3 = *(0x26e88);
0x00026d92 adds r2, r0, 4 | r2 = r0 + 4;
0x00026d94 vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x00026d98 mov r4, r0 | r4 = r0;
0x00026d9a vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00026d9e ldr.w r3, [sb, r3] | r3 = *(0x4dc06);
0x00026da2 ldrd r1, r2, [r5, 4] | __asm ("ldrd r1, r2, [r5, 4]");
0x00026da6 mov r5, r0 | r5 = r0;
0x00026da8 adds r3, 8 | r3 += 8;
0x00026daa str r3, [r5], 0xc | *(r5) = r3;
| r5 += 0xc;
0x00026dae add.w r3, r0, 0x14 | r3 = r0 + 0x14;
0x00026db2 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00026db4 add r2, r1 | r2 += r1;
0x00026db6 mov r0, r5 | r0 = r5;
0x00026db8 bl 0x26b9c | fcn_00026b9c (r0, r1, r2);
0x00026dbc ldr r2, [sp, 0x50] | r2 = *(arg_50h);
0x00026dbe mov r1, sl | r1 = sl;
0x00026dc0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00026dc2 mov r0, r6 | r0 = r6;
0x00026dc4 strd r5, r4, [sp, 0x1c] | __asm ("strd r5, r4, [var_1ch]");
0x00026dc8 str r2, [sp, 4] | var_4h = r2;
0x00026dca add r2, sp, 0x1c | r2 += var_1ch;
0x00026dcc str.w fp, [sp, 8] | __asm ("str.w fp, [var_8h]");
0x00026dd0 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00026dd4 blx r7 | uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00026dd6 ldr r4, [sp, 0x20] | r4 = var_20h;
| if (r4 == 0) {
0x00026dd8 cbz r4, 0x26dee | goto label_0;
| }
0x00026dda ldr r3, [pc, 0xb0] | r3 = *(0x26e8e);
0x00026ddc ldr.w r5, [sb, r3] | r5 = *((sb + r3));
0x00026de0 ldrb r3, [r5] | r3 = *(r5);
| if (r3 == 0) {
0x00026de2 cbz r3, 0x26e2a | goto label_3;
| }
0x00026de4 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00026de6 subs r2, r3, 1 | r2 = r3 - 1;
0x00026de8 str r2, [r4, 4] | *((r4 + 4)) = r2;
| label_1:
0x00026dea cmp r3, 1 |
0x00026dec beq 0x26e0a |
| while (r3 != 1) {
| label_0:
0x00026dee ldr r2, [pc, 0xa0] |
0x00026df0 ldr r3, [pc, 0x8c] | r3 = *(0x26e80);
0x00026df2 add r2, pc | r2 = 0x4dc88;
0x00026df4 ldr r3, [r2, r3] | r3 = *(0x4dc88);
0x00026df6 ldr r2, [r3] | r2 = *(0x4dc88);
0x00026df8 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00026dfa eors r2, r3 | r2 ^= r3;
0x00026dfc mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00026e00 bne 0x26e60 | goto label_4;
| }
0x00026e02 mov r0, r6 | r0 = r6;
0x00026e04 add sp, 0x2c |
0x00026e06 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00026e0a ldr r3, [r4] | r3 = *(r4);
0x00026e0c mov r0, r4 | r0 = r4;
0x00026e0e ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00026e10 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00026e12 ldrb r3, [r5] | r3 = *(r5);
| if (r3 == 0) {
0x00026e14 cbz r3, 0x26e44 | goto label_5;
| }
0x00026e16 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00026e18 subs r2, r3, 1 | r2 = r3 - 1;
0x00026e1a str r2, [r4, 8] | *((r4 + 8)) = r2;
| label_2:
0x00026e1c cmp r3, 1 |
0x00026e1e bne 0x26dee |
| }
0x00026e20 ldr r3, [r4] | r3 = *(r4);
0x00026e22 mov r0, r4 | r0 = r4;
0x00026e24 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00026e26 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00026e28 b 0x26dee | goto label_0;
| label_3:
0x00026e2a adds r2, r4, 4 | r2 = r4 + 4;
0x00026e2c dmb ish | __asm ("dmb ish");
| do {
0x00026e30 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00026e34 subs r1, r3, 1 | r1 = r3 - 1;
0x00026e36 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00026e3a cmp r0, 0 |
0x00026e3c bne 0x26e30 |
| } while (r0 != 0);
0x00026e3e dmb ish | __asm ("dmb ish");
0x00026e42 b 0x26dea | goto label_1;
| label_5:
0x00026e44 add.w r2, r4, 8 | r2 = r4 + 8;
0x00026e48 dmb ish | __asm ("dmb ish");
| do {
0x00026e4c ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00026e50 subs r1, r3, 1 | r1 = r3 - 1;
0x00026e52 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00026e56 cmp r0, 0 |
0x00026e58 bne 0x26e4c |
| } while (r0 != 0);
0x00026e5a dmb ish | __asm ("dmb ish");
0x00026e5e b 0x26e1c | goto label_2;
| label_4:
0x00026e60 blx 0xe864 | fcn_0000e864 ();
0x00026e64 ldr r0, [sp, 0x20] | r0 = var_20h;
| if (r0 != 0) {
0x00026e66 cbz r0, 0x26e6c |
0x00026e68 bl 0x17a28 | r0 = fcn_00017a28 (r0);
| }
0x00026e6c blx 0xe870 | fcn_0000e870 ();
0x00026e70 mov r0, r4 | r0 = r4;
0x00026e72 blx 0xe7c0 | fcn_0000e7c0 ();
0x00026e76 blx 0xe870 | fcn_0000e870 ();
0x00026e7a nop |
0x00026e7c ldr r4, [r0, 0x5c] | r4 = *((r0 + 0x5c));
0x00026e7e movs r0, r0 |
0x00026e80 lsls r4, r6, 0xc | r4 = r6 << 0xc;
0x00026e82 movs r0, r0 |
0x00026e84 ldr r0, [r7, 0x58] | r0 = *((r7 + 0x58));
0x00026e86 movs r0, r0 |
0x00026e88 lsls r4, r1, 0x11 | r4 = r1 << 0x11;
0x00026e8a movs r0, r0 |
0x00026e8c lsls r0, r4, 0x10 | r0 = r4 << 0x10;
0x00026e8e movs r0, r0 |
0x00026e90 ldr r2, [r0, 0x54] | r2 = *((r0 + 0x54));
0x00026e92 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x26d58 */
| #include <stdint.h>
|
; (fcn) method.mqtt::topic.publish_void_const__unsigned_int__int__bool_ () | void method_mqtt::topic_publish_void_const_unsigned_int_int_bool_ (int16_t arg_50h, int16_t arg_54h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_ch_3;
| int16_t var_1ch_4;
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_14h;
| int16_t var_1ch;
| int16_t var_20h;
| int16_t var_24h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| /* mqtt::topic::publish(void const*, unsigned int, int, bool) */
0x00026d58 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00026d5c sub sp, 0x2c |
0x00026d5e str r2, [sp, 0x14] | var_14h = r2;
0x00026d60 mov r8, r3 | r8 = r3;
0x00026d62 mov r6, r0 | r6 = r0;
0x00026d64 movs r0, 0x24 | r0 = 0x24;
0x00026d66 ldr r2, [pc, 0x114] |
0x00026d68 mov r5, r1 | r5 = r1;
0x00026d6a ldr r3, [pc, 0x114] | r3 = *(0x26e82);
0x00026d6c ldr.w sl, [r1] | sl = *(r1);
0x00026d70 add r2, pc | r2 = 0x4dbf2;
0x00026d72 ldr.w sb, [pc, 0x110] |
0x00026d76 ldr r3, [r2, r3] |
0x00026d78 ldrb.w fp, [sp, 0x54] | fp = *(arg_54h);
0x00026d7c add sb, pc | sb = 0x4dc06;
0x00026d7e ldr r3, [r3] | r3 = *(0x4dbf2);
0x00026d80 str r3, [sp, 0x24] | var_24h = r3;
0x00026d82 mov.w r3, 0 | r3 = 0;
0x00026d86 ldr.w r3, [sl] | r3 = *(sl);
0x00026d8a ldr r7, [r3, 0x48] | r7 = *((r3 + 0x48));
0x00026d8c blx 0xe3f0 | fcn_0000e3f0 ();
0x00026d90 ldr r3, [pc, 0xf4] | r3 = *(0x26e88);
0x00026d92 adds r2, r0, 4 | r2 = r0 + 4;
0x00026d94 vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x00026d98 mov r4, r0 | r4 = r0;
0x00026d9a vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x00026d9e ldr.w r3, [sb, r3] | r3 = *(0x4dc06);
0x00026da2 ldrd r1, r2, [r5, 4] | __asm ("ldrd r1, r2, [r5, 4]");
0x00026da6 mov r5, r0 | r5 = r0;
0x00026da8 adds r3, 8 | r3 += 8;
0x00026daa str r3, [r5], 0xc | *(r5) = r3;
| r5 += 0xc;
0x00026dae add.w r3, r0, 0x14 | r3 = r0 + 0x14;
0x00026db2 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x00026db4 add r2, r1 | r2 += r1;
0x00026db6 mov r0, r5 | r0 = r5;
0x00026db8 bl 0x26b9c | fcn_00026b9c (r0, r1, r2);
0x00026dbc ldr r2, [sp, 0x50] | r2 = *(arg_50h);
0x00026dbe mov r1, sl | r1 = sl;
0x00026dc0 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00026dc2 mov r0, r6 | r0 = r6;
0x00026dc4 strd r5, r4, [sp, 0x1c] | __asm ("strd r5, r4, [var_1ch]");
0x00026dc8 str r2, [sp, 4] | var_4h = r2;
0x00026dca add r2, sp, 0x1c | r2 += var_1ch;
0x00026dcc str.w fp, [sp, 8] | __asm ("str.w fp, [var_8h]");
0x00026dd0 str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x00026dd4 blx r7 | uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00026dd6 ldr r4, [sp, 0x20] | r4 = var_20h;
| if (r4 == 0) {
0x00026dd8 cbz r4, 0x26dee | goto label_0;
| }
0x00026dda ldr r3, [pc, 0xb0] | r3 = *(0x26e8e);
0x00026ddc ldr.w r5, [sb, r3] | r5 = *((sb + r3));
0x00026de0 ldrb r3, [r5] | r3 = *(r5);
| if (r3 == 0) {
0x00026de2 cbz r3, 0x26e2a | goto label_3;
| }
0x00026de4 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00026de6 subs r2, r3, 1 | r2 = r3 - 1;
0x00026de8 str r2, [r4, 4] | *((r4 + 4)) = r2;
| label_1:
0x00026dea cmp r3, 1 |
0x00026dec beq 0x26e0a |
| while (r3 != 1) {
| label_0:
0x00026dee ldr r2, [pc, 0xa0] |
0x00026df0 ldr r3, [pc, 0x8c] | r3 = *(0x26e80);
0x00026df2 add r2, pc | r2 = 0x4dc88;
0x00026df4 ldr r3, [r2, r3] | r3 = *(0x4dc88);
0x00026df6 ldr r2, [r3] | r2 = *(0x4dc88);
0x00026df8 ldr r3, [sp, 0x24] | r3 = var_24h;
0x00026dfa eors r2, r3 | r2 ^= r3;
0x00026dfc mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00026e00 bne 0x26e60 | goto label_4;
| }
0x00026e02 mov r0, r6 | r0 = r6;
0x00026e04 add sp, 0x2c |
0x00026e06 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00026e0a ldr r3, [r4] | r3 = *(r4);
0x00026e0c mov r0, r4 | r0 = r4;
0x00026e0e ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00026e10 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00026e12 ldrb r3, [r5] | r3 = *(r5);
| if (r3 == 0) {
0x00026e14 cbz r3, 0x26e44 | goto label_5;
| }
0x00026e16 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x00026e18 subs r2, r3, 1 | r2 = r3 - 1;
0x00026e1a str r2, [r4, 8] | *((r4 + 8)) = r2;
| label_2:
0x00026e1c cmp r3, 1 |
0x00026e1e bne 0x26dee |
| }
0x00026e20 ldr r3, [r4] | r3 = *(r4);
0x00026e22 mov r0, r4 | r0 = r4;
0x00026e24 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x00026e26 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00026e28 b 0x26dee | goto label_0;
| label_3:
0x00026e2a adds r2, r4, 4 | r2 = r4 + 4;
0x00026e2c dmb ish | __asm ("dmb ish");
| do {
0x00026e30 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00026e34 subs r1, r3, 1 | r1 = r3 - 1;
0x00026e36 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00026e3a cmp r0, 0 |
0x00026e3c bne 0x26e30 |
| } while (r0 != 0);
0x00026e3e dmb ish | __asm ("dmb ish");
0x00026e42 b 0x26dea | goto label_1;
| label_5:
0x00026e44 add.w r2, r4, 8 | r2 = r4 + 8;
0x00026e48 dmb ish | __asm ("dmb ish");
| do {
0x00026e4c ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00026e50 subs r1, r3, 1 | r1 = r3 - 1;
0x00026e52 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x00026e56 cmp r0, 0 |
0x00026e58 bne 0x26e4c |
| } while (r0 != 0);
0x00026e5a dmb ish | __asm ("dmb ish");
0x00026e5e b 0x26e1c | goto label_2;
| label_4:
0x00026e60 blx 0xe864 | fcn_0000e864 ();
0x00026e64 ldr r0, [sp, 0x20] | r0 = var_20h;
| if (r0 != 0) {
0x00026e66 cbz r0, 0x26e6c |
0x00026e68 bl 0x17a28 | r0 = fcn_00017a28 (r0);
| }
0x00026e6c blx 0xe870 | fcn_0000e870 ();
0x00026e70 mov r0, r4 | r0 = r4;
0x00026e72 blx 0xe7c0 | fcn_0000e7c0 ();
0x00026e76 blx 0xe870 | fcn_0000e870 ();
0x00026e7a nop |
0x00026e7c ldr r4, [r0, 0x5c] | r4 = *((r0 + 0x5c));
0x00026e7e movs r0, r0 |
0x00026e80 lsls r4, r6, 0xc | r4 = r6 << 0xc;
0x00026e82 movs r0, r0 |
0x00026e84 ldr r0, [r7, 0x58] | r0 = *((r7 + 0x58));
0x00026e86 movs r0, r0 |
0x00026e88 lsls r4, r1, 0x11 | r4 = r1 << 0x11;
0x00026e8a movs r0, r0 |
0x00026e8c lsls r0, r4, 0x10 | r0 = r4 << 0x10;
0x00026e8e movs r0, r0 |
0x00026e90 ldr r2, [r0, 0x54] | r2 = *((r0 + 0x54));
0x00026e92 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x23d70 */
| #include <stdint.h>
|
; (fcn) method.std::__cxx11::basic_string_unsigned_char__std::char_traits_unsigned_char___std::allocator_unsigned_char___._M_mutate_unsigned_int__unsigned_int__unsigned_char_const__unsigned_int_ () | void method_std::_cxx11::basic_string_unsigned_char_std::char_traits_unsigned_char_std::allocator_unsigned_char_M_mutate_unsigned_int_unsigned_int_unsigned_char_const_unsigned_int_ (int16_t arg_30h, int16_t arg_88h, int16_t arg_2c8h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| /* std::__cxx11::basic_string<unsigned char, std::char_traits<unsigned char>, std::allocator<unsigned char> >::_M_mutate(unsigned int, unsigned int, unsigned char const*, unsigned int) */
0x00023d70 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x00023d74 mov r4, r0 | r4 = r0;
0x00023d76 ldr r0, [pc, 0xd0] |
0x00023d78 mov r5, r1 | r5 = r1;
0x00023d7a sub sp, 0xc |
0x00023d7c mov sb, r4 | sb = r4;
0x00023d7e ldr r1, [pc, 0xcc] | r1 = *(0x23e4e);
0x00023d80 adds r6, r5, r2 | r6 = r5 + r2;
0x00023d82 add r0, pc | r0 = 0x47bd0;
0x00023d84 ldr.w fp, [sp, 0x30] | fp = *(arg_30h);
0x00023d88 mov sl, r3 | sl = r3;
0x00023d8a ldr r1, [r0, r1] |
0x00023d8c ldr r0, [sb], 8 | r0 = *(sb);
| sb += 8;
0x00023d90 sub.w r3, fp, r2 | r3 = fp - r2;
0x00023d94 ldr r1, [r1] | r1 = *(0x47bd0);
0x00023d96 str r1, [sp, 4] | var_4h = r1;
0x00023d98 mov.w r1, 0 | r1 = 0;
0x00023d9c ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x00023d9e cmp sb, r0 |
0x00023da0 mov r0, sp | r0 = sp;
0x00023da2 add r3, r1 | r3 += r1;
0x00023da4 sub.w r8, r1, r6 | r8 = r1 - r6;
0x00023da8 ite ne |
| if (sb == r0) {
0x00023daa ldrne r1, [r4, 8] | r1 = *((r4 + 8));
| }
| if (sb != r0) {
0x00023dac moveq r1, 0xf | r1 = 0xf;
| }
0x00023dae str r3, [sp] | *(sp) = r3;
0x00023db0 bl 0x2253c | r0 = fcn_0002253c (r0, r1, r2);
0x00023db4 mov r7, r0 | r7 = r0;
| if (r5 != 0) {
0x00023db6 cbz r5, 0x23dc2 |
0x00023db8 cmp r5, 1 |
0x00023dba ldr r1, [r4] | r1 = *(r4);
| if (r5 != 1) {
0x00023dbc bne 0x23e32 | goto label_2;
| }
0x00023dbe ldrb r3, [r1] | r3 = *(r1);
0x00023dc0 strb r3, [r0] | *(r0) = r3;
| }
| label_0:
0x00023dc2 cmp.w sl, 0 |
0x00023dc6 it ne |
| if (sl != 0) {
0x00023dc8 cmpne fp, 0 | __asm ("cmpne fp, 0");
| }
| if (sl == 0) {
0x00023dcc beq 0x23dde | goto label_3;
| }
0x00023dce cmp.w fp, 1 |
0x00023dd2 add.w r0, r7, r5 | r0 = r7 + r5;
| if (fp != 1) {
0x00023dd6 bne 0x23e28 | goto label_4;
| }
0x00023dd8 ldrb.w r3, [sl] | r3 = *(sl);
0x00023ddc strb r3, [r7, r5] | *((r7 + r5)) = r3;
| do {
| label_3:
0x00023dde ldr.w sl, [r4] | sl = *(r4);
0x00023de2 cmp.w r8, 0 |
| if (r8 != 0) {
0x00023de6 beq 0x23dfe |
0x00023de8 cmp.w r8, 1 |
0x00023dec add r5, fp | r5 += fp;
0x00023dee add.w r1, sl, r6 | r1 = sl + r6;
0x00023df2 add.w r0, r7, r5 | r0 = r7 + r5;
| if (r8 != 1) {
0x00023df6 bne 0x23e3a | goto label_5;
| }
0x00023df8 ldrb.w r3, [sl, r6] | r3 = *((sl + r6));
0x00023dfc strb r3, [r7, r5] | *((r7 + r5)) = r3;
| }
| label_1:
0x00023dfe cmp sb, sl |
| if (sb != sl) {
0x00023e00 beq 0x23e08 |
0x00023e02 mov r0, sl | r0 = sl;
0x00023e04 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x00023e08 ldr r3, [sp] | r3 = *(sp);
0x00023e0a ldr r2, [pc, 0x44] |
0x00023e0c str r7, [r4] | *(r4) = r7;
0x00023e0e str r3, [r4, 8] | *((r4 + 8)) = r3;
0x00023e10 ldr r3, [pc, 0x38] | r3 = *(0x23e4c);
0x00023e12 add r2, pc | r2 = 0x47c68;
0x00023e14 ldr r3, [r2, r3] | r3 = *(0x47c68);
0x00023e16 ldr r2, [r3] | r2 = *(0x47c68);
0x00023e18 ldr r3, [sp, 4] | r3 = var_4h;
0x00023e1a eors r2, r3 | r2 ^= r3;
0x00023e1c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00023e20 bne 0x23e42 | goto label_6;
| }
0x00023e22 add sp, 0xc |
0x00023e24 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_4:
0x00023e28 mov r1, sl | r1 = sl;
0x00023e2a mov r2, fp | r2 = fp;
0x00023e2c blx 0xea08 | fcn_0000ea08 ();
0x00023e30 b 0x23dde |
| } while (1);
| label_2:
0x00023e32 mov r2, r5 | r2 = r5;
0x00023e34 blx 0xea08 | fcn_0000ea08 ();
0x00023e38 b 0x23dc2 | goto label_0;
| label_5:
0x00023e3a mov r2, r8 | r2 = r8;
0x00023e3c blx 0xea08 | fcn_0000ea08 ();
0x00023e40 b 0x23dfe | goto label_1;
| label_6:
0x00023e42 blx 0xe864 | fcn_0000e864 ();
0x00023e46 nop |
0x00023e48 ldr r5, [sp, 0x2c8] | r5 = *(arg_2c8h);
0x00023e4a movs r0, r0 |
0x00023e4c lsls r4, r6, 0xc | r4 = r6 << 0xc;
0x00023e4e movs r0, r0 |
0x00023e50 ldr r5, [sp, 0x88] | r5 = *(arg_88h);
0x00023e52 movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x1cb80 */
| #include <stdint.h>
|
; (fcn) method.std::future_std::__invoke_result_std.decay_void__mqtt::callback::__std::shared_ptr_mqtt::delivery_token___::type__std::decay_mqtt::callback_::type__std::decay_std::shared_ptr_mqtt::delivery_token__::type_::type__std::async_void__mqtt::callback () | void method_std::future_std::_invoke_result_std_decay_void_mqtt::callback::_std::shared_ptr_mqtt::delivery_token_::type_std::decay_mqtt::callback_::type_std::decay_std::shared_ptr_mqtt::delivery_token_::type_::type_std::async_void_mqtt::callback (int16_t arg_48h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_10h;
| int16_t var_14h;
| int16_t var_18h;
| int16_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| /* std::future<std::__invoke_result<std::decay<void (mqtt::callback::*)(std::shared_ptr<qtt::delivery_token>)>::type, std::decay<qtt::callback*&>::type, std::decay<std::shared_ptr<qtt::delivery_token>&>::type>::type> std::async<void (mqtt::callback::*)(std::shared_ptr<qtt::delivery_token>), mqtt::callback*&, std::shared_ptr<qtt::delivery_token>&>(std::launch, void (mqtt::callback::*&&)(std::shared_ptr<qtt::delivery_token>), mqtt::callback*&, std::shared_ptr<qtt::delivery_token>&) */
0x0001cb80 svcmi 0xf0e92d | __asm ("svcmi aav.0x000000ff");
0x0001cb84 mov r7, r1 | r7 = r1;
0x0001cb86 ldr r4, [pc, 0x380] |
0x0001cb88 sub sp, 0x24 |
0x0001cb8a mov r5, r0 | r5 = r0;
0x0001cb8c mov r8, r3 | r8 = r3;
0x0001cb8e ldr r1, [pc, 0x37c] | r1 = *(0x1cf0e);
0x0001cb90 add r4, pc | r4 = 0x39a9e;
0x0001cb92 ldr r6, [pc, 0x37c] |
0x0001cb94 ldr.w sb, [sp, 0x48] | sb = *(arg_48h);
0x0001cb98 ldr r1, [r4, r1] |
0x0001cb9a add r6, pc | r6 = 0x39ab0;
0x0001cb9c ldr r1, [r1] | r1 = *(0x39a9e);
0x0001cb9e str r1, [sp, 0x1c] | var_1ch = r1;
0x0001cba0 mov.w r1, 0 | r1 = 0;
0x0001cba4 str r2, [sp, 4] | var_4h = r2;
0x0001cba6 lsls r2, r7, 0x1f | r2 = r7 << 0x1f;
| if (r2 < r7) {
0x0001cba8 bmi 0x1cc9e | goto label_8;
| }
| label_7:
0x0001cbaa movs r0, 0x38 | r0 = 0x38;
0x0001cbac blx 0xe3f0 | fcn_0000e3f0 ();
0x0001cbb0 ldr r3, [pc, 0x360] | r3 = *(0x1cf14);
0x0001cbb2 adds r2, r0, 4 | r2 = r0 + 4;
0x0001cbb4 vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x0001cbb8 mov sl, r0 | sl = r0;
0x0001cbba str r2, [sp, 8] | var_8h = r2;
0x0001cbbc mov r4, r0 | r4 = r0;
0x0001cbbe vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x0001cbc2 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x0001cbc4 ldr r2, [pc, 0x350] | r2 = *(0x1cf18);
0x0001cbc6 add.w r1, r3, 8 | r1 = r3 + 8;
0x0001cbca movs r3, 0 | r3 = 0;
0x0001cbcc str r1, [sl], 0xc | *(sl) = r1;
| sl += 0xc;
0x0001cbd0 strd r3, r3, [r0, 0x10] | __asm ("strd r3, r3, [r0, 0x10]");
0x0001cbd4 strb r3, [r0, 0x18] | *((r0 + 0x18)) = r3;
0x0001cbd6 str r3, [r0, 0x1c] | *((r0 + 0x1c)) = r3;
0x0001cbd8 ldr r3, [r6, r2] | r3 = *((r6 + r2));
0x0001cbda adds r3, 8 | r3 += 8;
0x0001cbdc str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x0001cbde movs r0, 8 | r0 = 8;
0x0001cbe0 blx 0xe3f0 | fcn_0000e3f0 ();
0x0001cbe4 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0001cbe8 mov r7, r0 | r7 = r0;
0x0001cbea vst1.32 {d16}, [r0] | __asm ("vst1.32 {d16}, [r0]");
0x0001cbee blx 0xe61c | fcn_0000e61c ();
0x0001cbf2 ldr r3, [pc, 0x328] | r3 = *(0x1cf1e);
0x0001cbf4 ldr.w r2, [sb, 4] | r2 = *((sb + 4));
0x0001cbf8 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x0001cbfa str r7, [r4, 0x20] | *((r4 + 0x20)) = r7;
0x0001cbfc str r2, [r4, 0x28] | *((r4 + 0x28)) = r2;
0x0001cbfe adds r3, 8 | r3 += 8;
0x0001cc00 str r3, [r7] | *(r7) = r3;
0x0001cc02 ldr.w r3, [sb] | r3 = *(sb);
0x0001cc06 str r3, [r4, 0x24] | *((r4 + 0x24)) = r3;
0x0001cc08 ldr r3, [pc, 0x314] | r3 = *(0x1cf20);
0x0001cc0a ldr r6, [r6, r3] | r6 = *((r6 + r3));
0x0001cc0c ldrb r3, [r6] | r3 = *(r6);
| if (r2 != 0) {
0x0001cc0e cbz r2, 0x1cc1c |
0x0001cc10 cmp r3, 0 |
| if (r3 == 0) {
0x0001cc12 beq.w 0x1cdf2 | goto label_9;
| }
0x0001cc16 ldr r1, [r2, 4] | r1 = *((r2 + 4));
0x0001cc18 adds r1, 1 | r1++;
0x0001cc1a str r1, [r2, 4] | *((r2 + 4)) = r1;
| }
| label_4:
0x0001cc1c ldr.w r2, [r8] | r2 = *(r8);
0x0001cc20 str r2, [r4, 0x2c] | *((r4 + 0x2c)) = r2;
0x0001cc22 ldr r2, [sp, 4] | r2 = var_4h;
0x0001cc24 ldm.w r2, {r0, r1} | r0 = *(r2);
| r1 = *((r2 + 4));
0x0001cc28 add.w r2, r4, 0x30 | r2 = r4 + 0x30;
0x0001cc2c strd sl, r4, [r5] | __asm ("strd sl, r4, [r5]");
0x0001cc30 stm.w r2, {r0, r1} | *(r2) = r0;
| *((r2 + 4)) = r1;
0x0001cc34 cmp r3, 0 |
| if (r3 == 0) {
0x0001cc36 beq.w 0x1cd7e | goto label_10;
| }
| label_0:
0x0001cc3a ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0001cc3c adds r3, 1 | r3++;
0x0001cc3e str r3, [r4, 4] | *((r4 + 4)) = r3;
| label_1:
0x0001cc40 ldr r3, [r5] | r3 = *(r5);
0x0001cc42 cmp r3, 0 |
| if (r3 == 0) {
0x0001cc44 beq.w 0x1ce34 | goto label_11;
| }
0x0001cc48 adds r3, 0xc | r3 += 0xc;
0x0001cc4a mov.w r1, 1 | r1 = 1;
0x0001cc4e dmb ish | __asm ("dmb ish");
| do {
0x0001cc52 ldrexb r2, [r3] | __asm ("ldrexb r2, [r3]");
0x0001cc56 strexb r0, r1, [r3] | __asm ("strexb r0, r1, [r3]");
0x0001cc5a cmp r0, 0 |
0x0001cc5c bne 0x1cc52 |
| } while (r0 != 0);
0x0001cc5e uxtb r2, r2 | r2 = (int8_t) r2;
0x0001cc60 dmb ish | __asm ("dmb ish");
0x0001cc64 cmp r2, 0 |
| if (r2 != 0) {
0x0001cc66 bne.w 0x1ce2e | goto label_12;
| }
0x0001cc6a ldrb r3, [r6] | r3 = *(r6);
0x0001cc6c cmp r3, 0 |
| if (r3 == 0) {
0x0001cc6e beq.w 0x1cd98 | goto label_13;
| }
0x0001cc72 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0001cc74 cmp r3, 1 |
0x0001cc76 add.w r2, r3, -1 | r2 = r3 + -1;
0x0001cc7a str r2, [r4, 4] | *((r4 + 4)) = r2;
| if (r3 == 1) {
0x0001cc7c beq.w 0x1cdb6 | goto label_14;
| }
| label_2:
0x0001cc80 ldr r2, [pc, 0x2a0] |
0x0001cc82 ldr r3, [pc, 0x288] | r3 = *(0x1cf0e);
0x0001cc84 add r2, pc | r2 = 0x39bac;
0x0001cc86 ldr r3, [r2, r3] | r3 = *(0x39bac);
0x0001cc88 ldr r2, [r3] | r2 = *(0x39bac);
0x0001cc8a ldr r3, [sp, 0x1c] | r3 = var_1ch;
0x0001cc8c eors r2, r3 | r2 ^= r3;
0x0001cc8e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0001cc92 bne.w 0x1ce2a | goto label_15;
| }
0x0001cc96 mov r0, r5 | r0 = r5;
0x0001cc98 add sp, 0x24 |
0x0001cc9a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_8:
0x0001cc9e movs r0, 0x40 | r0 = 0x40;
0x0001cca0 blx 0xe3f0 | fcn_0000e3f0 ();
0x0001cca4 ldr r3, [pc, 0x280] | r3 = *(0x1cf28);
0x0001cca6 adds r2, r0, 4 | r2 = r0 + 4;
0x0001cca8 vmov.i32 d16, 1 | __asm ("vmov.i32 d16, 1");
0x0001ccac mov sl, r0 | sl = r0;
0x0001ccae str r2, [sp, 8] | var_8h = r2;
0x0001ccb0 mov r4, r0 | r4 = r0;
0x0001ccb2 vst1.32 {d16}, [r2] | __asm ("vst1.32 {d16}, [r2]");
0x0001ccb6 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x0001ccb8 ldr r2, [pc, 0x270] | r2 = *(0x1cf2c);
0x0001ccba add.w r1, r3, 8 | r1 = r3 + 8;
0x0001ccbe movs r3, 0 | r3 = 0;
0x0001ccc0 str r1, [sl], 0xc | *(sl) = r1;
| sl += 0xc;
0x0001ccc4 strd r3, r3, [r0, 0x10] | __asm ("strd r3, r3, [r0, 0x10]");
0x0001ccc8 strb r3, [r0, 0x18] | *((r0 + 0x18)) = r3;
0x0001ccca strd r3, r3, [r0, 0x1c] | __asm ("strd r3, r3, [r0, 0x1c]");
0x0001ccce str r3, [r0, 0x24] | *((r0 + 0x24)) = r3;
0x0001ccd0 ldr r3, [r6, r2] | r3 = *((r6 + r2));
0x0001ccd2 adds r3, 8 | r3 += 8;
0x0001ccd4 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x0001ccd6 movs r0, 8 | r0 = 8;
0x0001ccd8 blx 0xe3f0 | fcn_0000e3f0 ();
0x0001ccdc vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x0001cce0 mov fp, r0 |
0x0001cce2 vst1.32 {d16}, [r0] | __asm ("vst1.32 {d16}, [r0]");
0x0001cce6 blx 0xe61c | fcn_0000e61c ();
0x0001ccea ldr r3, [pc, 0x230] | r3 = *(0x1cf1e);
0x0001ccec ldr.w r2, [sb] | r2 = *(sb);
0x0001ccf0 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x0001ccf2 str.w fp, [r4, 0x28] | __asm ("str.w fp, [r4, 0x28]");
0x0001ccf6 str r2, [r4, 0x2c] | *((r4 + 0x2c)) = r2;
0x0001ccf8 adds r3, 8 | r3 += 8;
0x0001ccfa str.w r3, [fp] | __asm ("str.w r3, [fp]");
0x0001ccfe ldr.w r3, [sb, 4] | r3 = *((sb + 4));
0x0001cd02 str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
| if (r3 != 0) {
0x0001cd04 cbz r3, 0x1cd16 |
0x0001cd06 ldr r2, [pc, 0x218] | r2 = *(0x1cf22);
0x0001cd08 ldr r2, [r6, r2] | r2 = *((r6 + r2));
0x0001cd0a ldrb r2, [r2] | r2 = *(r2);
0x0001cd0c cmp r2, 0 |
| if (r2 == 0) {
0x0001cd0e beq 0x1cdd8 | goto label_16;
| }
0x0001cd10 ldr r2, [r3, 4] | r2 = *((r3 + 4));
0x0001cd12 adds r2, 1 | r2++;
0x0001cd14 str r2, [r3, 4] | *((r3 + 4)) = r2;
| }
| label_3:
0x0001cd16 movs r2, 0 | r2 = 0;
0x0001cd18 ldr.w r3, [r8] | r3 = *(r8);
0x0001cd1c str r2, [sp, 0x10] | var_10h = r2;
0x0001cd1e ldr r2, [sp, 4] | r2 = var_4h;
0x0001cd20 str r3, [r4, 0x34] | *((r4 + 0x34)) = r3;
0x0001cd22 add.w r3, r4, 0x38 | r3 = r4 + 0x38;
0x0001cd26 ldm.w r2, {r0, r1} | r0 = *(r2);
| r1 = *((r2 + 4));
0x0001cd2a stm.w r3, {r0, r1} | *(r3) = r0;
| *((r3 + 4)) = r1;
0x0001cd2c movs r3, r0 | r3 = r0;
0x0001cd2e movs r0, 0x10 | r0 = 0x10;
0x0001cd30 blx 0xe3f0 | fcn_0000e3f0 ();
0x0001cd34 ldr r3, [pc, 0x1f8] | r3 = *(0x1cf30);
0x0001cd36 movs r2, 0 | r2 = 0;
0x0001cd38 add.w fp, sp, 0x14 |
0x0001cd3c mov r1, fp | r1 = fp;
0x0001cd3e ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x0001cd40 str.w sl, [r0, 4] | __asm ("str.w sl, [r0, 4]");
0x0001cd44 adds r3, 8 | r3 += 8;
0x0001cd46 str r3, [r0] | *(r0) = r3;
0x0001cd48 ldr r3, [pc, 0x1e8] | r3 = *(0x1cf34);
0x0001cd4a ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x0001cd4c str r0, [sp, 0x14] | var_14h = r0;
0x0001cd4e str r2, [r0, 0xc] | *((r0 + 0xc)) = r2;
0x0001cd50 str r3, [r0, 8] | *((r0 + 8)) = r3;
0x0001cd52 add r0, sp, 0x10 | r0 += var_10h;
0x0001cd54 blx 0xe77c | cxa_init_primary_exception ();
0x0001cd58 ldr r0, [sp, 0x14] | r0 = var_14h;
| if (r0 != 0) {
0x0001cd5a cbz r0, 0x1cd62 |
0x0001cd5c ldr r3, [r0] | r3 = *(r0);
0x0001cd5e ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0001cd60 blx r3 | uint32_t (*r3)(uint32_t) (r3);
| }
0x0001cd62 ldr r3, [r4, 0x20] | r3 = *((r4 + 0x20));
0x0001cd64 cmp r3, 0 |
| if (r3 != 0) {
0x0001cd66 bne 0x1ce3a | goto label_17;
| }
0x0001cd68 ldr r3, [pc, 0x1b4] | r3 = *(0x1cf20);
0x0001cd6a ldr r2, [sp, 0x10] | r2 = var_10h;
0x0001cd6c str.w sl, [r5] | __asm ("str.w sl, [r5]");
0x0001cd70 str r4, [r5, 4] | *((r5 + 4)) = r4;
0x0001cd72 str r2, [r4, 0x20] | *((r4 + 0x20)) = r2;
0x0001cd74 ldr r6, [r6, r3] | r6 = *((r6 + r3));
0x0001cd76 ldrb r3, [r6] | r3 = *(r6);
0x0001cd78 cmp r3, 0 |
| if (r3 != 0) {
0x0001cd7a bne.w 0x1cc3a | goto label_0;
| }
| label_10:
0x0001cd7e ldr r1, [sp, 8] | r1 = var_8h;
0x0001cd80 dmb ish | __asm ("dmb ish");
| do {
0x0001cd84 ldrex r3, [r1] | __asm ("ldrex r3, [r1]");
0x0001cd88 adds r3, 1 | r3++;
0x0001cd8a strex r2, r3, [r1] | __asm ("strex r2, r3, [r1]");
0x0001cd8e cmp r2, 0 |
0x0001cd90 bne 0x1cd84 |
| } while (r2 != 0);
0x0001cd92 dmb ish | __asm ("dmb ish");
0x0001cd96 b 0x1cc40 | goto label_1;
| label_13:
0x0001cd98 ldr r0, [sp, 8] | r0 = var_8h;
0x0001cd9a dmb ish | __asm ("dmb ish");
| do {
0x0001cd9e ldrex r3, [r0] | __asm ("ldrex r3, [r0]");
0x0001cda2 subs r2, r3, 1 | r2 = r3 - 1;
0x0001cda4 strex r1, r2, [r0] | __asm ("strex r1, r2, [r0]");
0x0001cda8 cmp r1, 0 |
0x0001cdaa bne 0x1cd9e |
| } while (r1 != 0);
0x0001cdac cmp r3, 1 |
0x0001cdae dmb ish | __asm ("dmb ish");
0x0001cdb0 ldrh r3, [r3, 0x3a] | r3 = *((r3 + 0x3a));
| if (r3 != 1) {
0x0001cdb2 bne.w 0x1cc80 | goto label_2;
| }
| label_14:
0x0001cdb6 ldr r3, [r4] | r3 = *(r4);
0x0001cdb8 mov r0, r4 | r0 = r4;
0x0001cdba ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0001cdbc blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0001cdbe ldrb r3, [r6] | r3 = *(r6);
| if (r3 == 0) {
0x0001cdc0 cbz r3, 0x1ce0e | goto label_18;
| }
0x0001cdc2 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0001cdc4 subs r2, r3, 1 | r2 = r3 - 1;
0x0001cdc6 str r2, [r4, 8] | *((r4 + 8)) = r2;
| label_5:
0x0001cdc8 cmp r3, 1 |
| if (r3 != 1) {
0x0001cdca bne.w 0x1cc80 | goto label_2;
| }
0x0001cdce ldr r3, [r4] | r3 = *(r4);
0x0001cdd0 mov r0, r4 | r0 = r4;
0x0001cdd2 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0001cdd4 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0001cdd6 b 0x1cc80 | goto label_2;
| label_16:
0x0001cdd8 adds r3, 4 | r3 += 4;
0x0001cdda dmb ish | __asm ("dmb ish");
| do {
0x0001cdde ldrex r1, [r3] | __asm ("ldrex r1, [r3]");
0x0001cde2 adds r1, 1 | r1++;
0x0001cde4 strex r2, r1, [r3] | __asm ("strex r2, r1, [r3]");
0x0001cde8 cmp r2, 0 |
0x0001cdea bne 0x1cdde |
| } while (r2 != 0);
0x0001cdec dmb ish | __asm ("dmb ish");
0x0001cdf0 b 0x1cd16 | goto label_3;
| label_9:
0x0001cdf2 adds r2, 4 | r2 += 4;
0x0001cdf4 dmb ish | __asm ("dmb ish");
| do {
0x0001cdf8 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x0001cdfc adds r3, 1 | r3++;
0x0001cdfe strex r1, r3, [r2] | __asm ("strex r1, r3, [r2]");
0x0001ce02 cmp r1, 0 |
0x0001ce04 bne 0x1cdf8 |
| } while (r1 != 0);
0x0001ce06 dmb ish | __asm ("dmb ish");
0x0001ce0a ldrb r3, [r6] | r3 = *(r6);
0x0001ce0c b 0x1cc1c | goto label_4;
| label_18:
0x0001ce0e add.w r2, r4, 8 | r2 = r4 + 8;
0x0001ce12 dmb ish | __asm ("dmb ish");
| do {
0x0001ce16 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x0001ce1a subs r1, r3, 1 | r1 = r3 - 1;
0x0001ce1c strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x0001ce20 cmp r0, 0 |
0x0001ce22 bne 0x1ce16 |
| } while (r0 != 0);
0x0001ce24 dmb ish | __asm ("dmb ish");
0x0001ce28 b 0x1cdc8 | goto label_5;
| label_15:
0x0001ce2a blx 0xe864 | fcn_0000e864 ();
| label_12:
0x0001ce2e movs r0, 1 | r0 = 1;
0x0001ce30 blx 0xe448 | fcn_0000e448 ();
| label_11:
0x0001ce34 movs r0, 3 | r0 = 3;
0x0001ce36 blx 0xe448 | fcn_0000e448 ();
| label_17:
0x0001ce3a blx 0xe484 | fcn_0000e484 ();
0x0001ce3e ldr r0, [r5, 4] | r0 = *((r5 + 4));
| if (r0 != 0) {
0x0001ce40 cbz r0, 0x1ce46 |
0x0001ce42 bl 0x17a28 | fcn_00017a28 (r0);
| }
0x0001ce46 mov r0, r4 | r0 = r4;
0x0001ce48 bl 0x17a28 | r0 = fcn_00017a28 (r0);
0x0001ce4c blx 0xe870 | fcn_0000e870 ();
0x0001ce50 mov r3, r1 | r3 = r1;
| do {
0x0001ce52 cmp r3, 1 |
| if (r3 != 1) {
0x0001ce54 bne 0x1cef8 | goto label_19;
| }
0x0001ce56 blx 0xe538 | r0 = fcn_0000e538 ();
0x0001ce5a mov r4, r0 | r4 = r0;
0x0001ce5c blx 0xe598 | fcn_0000e598 ();
0x0001ce60 movs r3, 0xb | r3 = 0xb;
0x0001ce62 str r0, [sp, 0x18] | var_18h = r0;
0x0001ce64 add r1, sp, 0x14 | r1 += var_14h;
0x0001ce66 add.w r0, r4, 8 | r0 = r4 + 8;
0x0001ce6a str r3, [sp, 0x14] | var_14h = r3;
0x0001ce6c bl 0x1bf90 | r0 = fcn_0001bf90 (r0, r1);
0x0001ce70 cmp r0, 0 |
| if (r0 != 0) {
0x0001ce72 bne 0x1cefc | goto label_20;
| }
| label_6:
0x0001ce74 blx 0xe9ec | malloc (r0);
0x0001ce78 ldr r3, [pc, 0xbc] | r3 = *(0x1cf38);
0x0001ce7a add.w r0, r4, 0x10 | r0 = r4 + 0x10;
0x0001ce7e ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x0001ce80 adds r3, 8 | r3 += 8;
0x0001ce82 str r3, [r4, 0xc] | *((r4 + 0xc)) = r3;
0x0001ce84 bl 0x1c6d0 | fcn_0001c6d0 (r0);
0x0001ce88 mov r0, r4 | r0 = r4;
0x0001ce8a blx 0xe7c0 | fcn_0000e7c0 ();
0x0001ce8e blx 0xe870 | r0 = fcn_0000e870 ();
0x0001ce92 mov fp, r0 |
0x0001ce94 mov r3, r1 | r3 = r1;
0x0001ce96 ldr r0, [r4, 0x30] | r0 = *((r4 + 0x30));
| if (r0 != 0) {
0x0001ce98 cbz r0, 0x1cea2 |
0x0001ce9a str r3, [sp, 8] | var_8h = r3;
0x0001ce9c bl 0x17a28 | fcn_00017a28 (r0);
0x0001cea0 ldr r3, [sp, 8] | r3 = var_8h;
| }
0x0001cea2 add.w r0, r4, 0x28 | r0 = r4 + 0x28;
0x0001cea6 str r3, [sp, 8] | var_8h = r3;
0x0001cea8 bl 0x1ca64 | fcn_0001ca64 (r0);
0x0001ceac ldr r3, [sp, 8] | r3 = var_8h;
0x0001ceae mov r0, sl | r0 = sl;
0x0001ceb0 str r3, [sp, 8] | var_8h = r3;
0x0001ceb2 bl 0x1b370 | fcn_0001b370 (r0);
0x0001ceb6 mov r0, r4 | r0 = r4;
0x0001ceb8 blx 0xe7c0 | fcn_0000e7c0 ();
0x0001cebc ldr r3, [sp, 8] | r3 = var_8h;
0x0001cebe mov r0, fp | r0 = fp;
0x0001cec0 b 0x1ce52 |
| } while (1);
| label_19:
0x0001cef8 blx 0xe870 | fcn_0000e870 ();
| label_20:
0x0001cefc lsls r3, r7, 0x1e | r3 = r7 << 0x1e;
| if (r3 >= r7) {
0x0001cefe bpl 0x1ce74 | goto label_6;
| }
0x0001cf00 blx 0xea8c | fcn_0000ea8c ();
0x0001cf04 b 0x1cbaa | goto label_7;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x24d48 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) sym.void_std::vector_std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char_____std::allocator_std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char_______::_M_realloc_insert_std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char____const____gnu_cxx::__normal_iterator_std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char_____std::vector_std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char_____std::allocator_std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char___________std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char____const_ () | void void_std::vector_std::_cxx11::basic_string_char_std::char_traits_char_std::allocator_char_std::allocator_std::_cxx11::basic_string_char_std::char_traits_char_std::allocator_char_::_M_realloc_insert_std::_cxx11::basic_string_char_std::char_traits_char_std::allocator_char_const_gnu_cxx::_normal_iterator_std::_cxx11::basic_string_char_std::char_traits_char_std::allocator_char_std::vector_std::_cxx11::basic_string_char_std::char_traits_char_std::allocator_char_std::allocator_std::_cxx11::basic_string_char_std::char_traits_char_std::allocator_char_std::_cxx11::basic_string_char_std::char_traits_char_std::allocator_char_const_ (int16_t arg_0h, int16_t arg_4h, int16_t arg_8h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| /* void std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >::_M_realloc_insert<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>(__gnu_cxx::__normal_iterator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) */
0x00024d48 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00024d4c mov r7, r0 | r7 = r0;
0x00024d4e ldrd r6, r5, [r0] | __asm ("ldrd r6, r5, [r0]");
0x00024d52 sub sp, 0x14 |
0x00024d54 mov sl, r2 | sl = r2;
0x00024d56 movw r2, 0xaaab |
0x00024d5a ldr r0, [pc, 0x24c] |
| /* if there is a right shift of 1, then it's a division by 1/3 */
0x00024d5c movt r2, 0xaaaa | r2 = 0xaaaaaaab;
0x00024d60 ldr r3, [pc, 0x248] | r3 = *(0x24fac);
0x00024d62 add r0, pc | r0 = 0x49d10;
0x00024d64 ldr r3, [r0, r3] |
0x00024d66 ldr r3, [r3] | r3 = *(0x49d10);
0x00024d68 str r3, [sp, 0xc] | var_ch = r3;
0x00024d6a mov.w r3, 0 | r3 = 0;
0x00024d6e subs r3, r5, r6 | r3 = r5 - r6;
0x00024d70 asrs r3, r3, 3 | r3 >>= 3;
0x00024d72 mul r3, r2, r3 | r3 = r2 * r3;
0x00024d76 movw r2, 0x5555 |
0x00024d7a movt r2, 0x555 | r2 = 0x5555555;
0x00024d7e cmp r3, r2 |
| if (r3 == r2) {
0x00024d80 beq.w 0x24f72 | goto label_7;
| }
0x00024d84 mov r4, r1 | r4 = r1;
0x00024d86 cmp r6, r5 |
0x00024d88 ite ne |
| if (r6 == r5) {
0x00024d8a movne r1, r3 | r1 = r3;
| }
| if (r6 != r5) {
0x00024d8c moveq r1, 1 | r1 = 1;
| }
0x00024d8e adds r3, r3, r1 | r3 += r1;
0x00024d90 mov r1, r3 | r1 = r3;
0x00024d92 str r3, [sp] | *(sp) = r3;
0x00024d94 sub.w r3, r4, r6 | r3 = r4 - r6;
| if (r3 >= r3) {
0x00024d98 bhs.w 0x24f1e | goto label_8;
| }
0x00024d9c ldr.w r8, [sp] | r8 = *(sp);
0x00024da0 cmp r1, 0 |
| if (r1 != 0) {
0x00024da2 bne.w 0x24f5e | goto label_9;
| }
| label_4:
0x00024da6 ldrd r2, sb, [sl] | __asm ("ldrd r2, sb, [sl]");
0x00024daa add.w fp, r8, r3 |
0x00024dae add.w sl, fp, 8 | sl += arg_8h;
0x00024db2 str.w sl, [r8, r3] | __asm ("str.w sl, [r8, r3]");
0x00024db6 cmp.w sb, 0xf |
0x00024dba strd r2, sb, [sp, 4] | __asm ("strd r2, sb, [var_4h]");
| if (sb > 0xf) {
0x00024dbe bhi.w 0x24f34 | goto label_10;
| }
0x00024dc2 cmp.w sb, 1 |
| if (sb == 1) {
0x00024dc6 beq 0x24e2a | goto label_11;
| }
0x00024dc8 cmp.w sb, 0 |
| if (sb != 0) {
0x00024dcc bne.w 0x24f5a | goto label_12;
| }
| label_5:
0x00024dd0 cmp r4, r6 |
0x00024dd2 mov.w r3, 0 | r3 = 0;
0x00024dd6 str.w sb, [fp, 4] | __asm ("str.w sb, [arg_4h]");
0x00024dda strb.w r3, [sl, sb] | *((sl + sb)) = r3;
| if (r4 == r6) {
0x00024dde beq 0x24e42 | goto label_13;
| }
| label_1:
0x00024de0 add.w r3, r8, 8 | r3 = r8 + 8;
0x00024de4 add.w sl, r6, 8 | sl = r6 + 8;
0x00024de8 mov sb, r6 | sb = r6;
0x00024dea b 0x24e0a |
| while (r0 != sl) {
0x00024dec ldr.w r2, [sb, 8] | r2 = *((sb + 8));
0x00024df0 str r0, [r3, -0x8] | *((r3 - 0x8)) = r0;
0x00024df4 str r2, [r3] | *(r3) = r2;
| label_0:
0x00024df6 add.w sb, sb, 0x18 | sb += 0x18;
0x00024dfa str r1, [r3, -0x4] | *((r3 - 0x4)) = r1;
0x00024dfe cmp sb, r4 |
0x00024e00 add.w sl, sl, 0x18 | sl += 0x18;
0x00024e04 add.w r3, r3, 0x18 | r3 += 0x18;
| if (sb == r4) {
0x00024e08 beq 0x24e7e | goto label_14;
| }
0x00024e0a str r3, [r3, -0x8] | *((r3 - 0x8)) = r3;
0x00024e0e ldrd r0, r1, [sb] | __asm ("ldrd r0, r1, [sb]");
0x00024e12 cmp r0, sl |
0x00024e14 bne 0x24dec |
| }
0x00024e16 adds r2, r1, 1 | r2 = r1 + 1;
| if (r2 == r1) {
0x00024e18 beq 0x24df6 | goto label_0;
| }
0x00024e1a mov r1, sl | r1 = sl;
0x00024e1c mov r0, r3 | r0 = r3;
0x00024e1e blx 0xea08 | fcn_0000ea08 ();
0x00024e22 ldr.w r1, [sb, 4] | r1 = *((sb + 4));
0x00024e26 mov r3, r0 | r3 = r0;
0x00024e28 b 0x24df6 | goto label_0;
| label_11:
0x00024e2a ldr r3, [sp, 4] | r3 = var_4h;
0x00024e2c cmp r4, r6 |
0x00024e2e ldrb r3, [r3] | r3 = *(r3);
0x00024e30 str.w sb, [fp, 4] | __asm ("str.w sb, [arg_4h]");
0x00024e34 strb.w r3, [fp, 8] | *(arg_8h) = r3;
0x00024e38 mov.w r3, 0 | r3 = 0;
0x00024e3c strb.w r3, [sl, sb] | *((sl + sb)) = r3;
| if (r4 != r6) {
0x00024e40 bne 0x24de0 | goto label_1;
| }
| label_13:
0x00024e42 cmp r4, r5 |
0x00024e44 mov r3, r8 | r3 = r8;
0x00024e46 add.w fp, r3, 0x18 |
| if (r4 != r5) {
0x00024e4a bne 0x24eaa | goto label_15;
| }
| do {
| if (r6 != 0) {
| label_3:
0x00024e4c cbz r6, 0x24e54 |
0x00024e4e mov r0, r6 | r0 = r6;
0x00024e50 blx 0xe7c0 | fcn_0000e7c0 ();
| }
0x00024e54 ldr r3, [sp] | r3 = *(sp);
0x00024e56 ldr r2, [pc, 0x158] |
0x00024e58 strd r8, fp, [r7] | __asm ("strd r8, fp, [r7]");
0x00024e5c add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00024e60 add r2, pc | r2 = 0x49e16;
0x00024e62 add.w r3, r8, r3, lsl 3 | r3 = r8 + (r3 << 3);
0x00024e66 str r3, [r7, 8] | *((r7 + 8)) = r3;
0x00024e68 ldr r3, [pc, 0x140] | r3 = *(0x24fac);
0x00024e6a ldr r3, [r2, r3] | r3 = *(0x49e16);
0x00024e6c ldr r2, [r3] | r2 = *(0x49e16);
0x00024e6e ldr r3, [sp, 0xc] | r3 = var_ch;
0x00024e70 eors r2, r3 | r2 ^= r3;
0x00024e72 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00024e76 bne 0x24f6e | goto label_16;
| }
0x00024e78 add sp, 0x14 |
0x00024e7a pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_14:
0x00024e7e sub.w r3, r4, 0x18 | r3 = r4 - 0x18;
0x00024e82 movw r2, 0xaaab |
0x00024e86 subs r3, r3, r6 | r3 -= r6;
0x00024e88 movt r2, 0xaaa | r2 = 0xaaaaaab;
0x00024e8c lsrs r3, r3, 3 | r3 >>= 3;
0x00024e8e cmp r4, r5 |
0x00024e90 mul r3, r2, r3 | r3 = r2 * r3;
0x00024e94 bic r3, r3, 0xe0000000 | r3 = BIT_MASK (r3, 0xe0000000);
0x00024e98 add.w r3, r3, 1 | r3++;
0x00024e9c add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00024ea0 add.w r3, r8, r3, lsl 3 | r3 = r8 + (r3 << 3);
0x00024ea4 add.w fp, r3, 0x18 |
0x00024ea8 beq 0x24e4c |
| } while (r4 == r5);
| label_15:
0x00024eaa add.w sl, r4, 8 | sl = r4 + 8;
0x00024eae mov sb, r4 | sb = r4;
0x00024eb0 str r4, [sp, 4] | var_4h = r4;
0x00024eb2 adds r3, 0x20 | r3 += 0x20;
0x00024eb4 mov r4, sl | r4 = sl;
0x00024eb6 mov sl, r5 | sl = r5;
0x00024eb8 b 0x24ed8 |
| while (r2 != r4) {
0x00024eba str r2, [r3, -0x8] | *((r3 - 0x8)) = r2;
0x00024ebe ldr.w r2, [sb, 8] | r2 = *((sb + 8));
0x00024ec2 str r2, [r3] | *(r3) = r2;
| label_2:
0x00024ec4 add.w sb, sb, 0x18 | sb += 0x18;
0x00024ec8 str r5, [r3, -0x4] | *((r3 - 0x4)) = r5;
0x00024ecc cmp sb, sl |
0x00024ece add.w r4, r4, 0x18 | r4 += 0x18;
0x00024ed2 add.w r3, r3, 0x18 | r3 += 0x18;
| if (sb == sl) {
0x00024ed6 beq 0x24ef8 | goto label_17;
| }
0x00024ed8 ldr.w r2, [sb] | r2 = *(sb);
0x00024edc ldr.w r5, [sb, 4] | r5 = *((sb + 4));
0x00024ee0 str r3, [r3, -0x8] | *((r3 - 0x8)) = r3;
0x00024ee4 cmp r2, r4 |
0x00024ee6 bne 0x24eba |
| }
0x00024ee8 adds r2, r5, 1 | r2 = r5 + 1;
| if (r2 == r5) {
0x00024eea beq 0x24ec4 | goto label_2;
| }
0x00024eec mov r0, r3 | r0 = r3;
0x00024eee mov r1, r4 | r1 = r4;
0x00024ef0 blx 0xea08 | r0 = fcn_0000ea08 ();
0x00024ef4 mov r3, r0 | r3 = r0;
0x00024ef6 b 0x24ec4 | goto label_2;
| label_17:
0x00024ef8 ldr r4, [sp, 4] | r4 = var_4h;
0x00024efa movw r2, 0xaaab |
0x00024efe movt r2, 0xaaa | r2 = 0xaaaaaab;
0x00024f02 sub.w r3, sb, r4 | r3 = sb - r4;
0x00024f06 subs r3, 0x18 | r3 -= 0x18;
0x00024f08 lsrs r3, r3, 3 | r3 >>= 3;
0x00024f0a mul r3, r2, r3 | r3 = r2 * r3;
0x00024f0e bic r3, r3, 0xe0000000 | r3 = BIT_MASK (r3, 0xe0000000);
0x00024f12 adds r3, 1 | r3++;
0x00024f14 add.w r3, r3, r3, lsl 1 | r3 += (r3 << 1);
0x00024f18 add.w fp, fp, r3, lsl 3 |
0x00024f1c b 0x24e4c | goto label_3;
| label_8:
0x00024f1e movw r0, 0xfff8 |
0x00024f22 str r2, [sp] | *(sp) = r2;
0x00024f24 movt r0, 0x7fff | r0 = 0x7ffffff8;
| label_6:
0x00024f28 str r3, [sp, 4] | var_4h = r3;
0x00024f2a blx 0xe3f0 | fcn_0000e3f0 ();
0x00024f2e ldr r3, [sp, 4] | r3 = var_4h;
0x00024f30 mov r8, r0 | r8 = r0;
0x00024f32 b 0x24da6 | goto label_4;
| label_10:
0x00024f34 movs r2, 0 | r2 = 0;
0x00024f36 add r1, sp, 8 | r1 += var_8h;
0x00024f38 mov r0, fp | r0 = fp;
0x00024f3a blx 0xeb28 | fcn_0000eb28 ();
0x00024f3e ldr r3, [sp, 8] | r3 = var_8h;
0x00024f40 str.w r0, [fp] | __asm ("str.w r0, [fp]");
0x00024f44 str.w r3, [fp, 8] | __asm ("str.w r3, [arg_8h]");
| do {
0x00024f48 mov r2, sb | r2 = sb;
0x00024f4a ldr r1, [sp, 4] | r1 = var_4h;
0x00024f4c blx 0xea08 | fcn_0000ea08 ();
0x00024f50 ldr.w sb, [sp, 8] | sb = var_8h;
0x00024f54 ldr.w sl, [fp] | sl = *(fp);
0x00024f58 b 0x24dd0 | goto label_5;
| label_12:
0x00024f5a mov r0, sl | r0 = sl;
0x00024f5c b 0x24f48 |
| } while (1);
| label_9:
0x00024f5e cmp r1, r2 |
0x00024f60 it hs |
| if (r1 < r2) {
0x00024f62 movhs r1, r2 | r1 = r2;
| }
0x00024f64 add.w r0, r1, r1, lsl 1 | r0 = r1 + (r1 << 1);
0x00024f68 str r1, [sp] | *(sp) = r1;
0x00024f6a lsls r0, r0, 3 | r0 <<= 3;
0x00024f6c b 0x24f28 | goto label_6;
| label_16:
0x00024f6e blx 0xe864 | fcn_0000e864 ();
| label_7:
0x00024f72 ldr r0, [pc, 0x40] |
0x00024f74 add r0, pc | r0 = 0x49f2e;
0x00024f76 blx 0xe5c8 | fcn_0000e5c8 ();
0x00024f7a blx 0xe538 | fcn_0000e538 ();
0x00024f7e cmp.w r8, 0 |
| if (r8 != 0) {
0x00024f82 bne 0x24f94 | goto label_18;
| }
0x00024f84 ldr.w r0, [fp] | r0 = *(fp);
0x00024f88 cmp r0, sl |
0x00024f8a beq 0x24f90 |
| while (1) {
0x00024f8c blx 0xe7c0 | fcn_0000e7c0 ();
0x00024f90 blx 0xe9ec | malloc (r0);
| label_18:
0x00024f94 mov r0, r8 | r0 = r8;
0x00024f96 mov r1, r8 | r1 = r8;
0x00024f98 bl 0x24d20 | fcn_00024d20 (r0, r1);
0x00024f9c mov r0, r8 | r0 = r8;
0x00024f9e b 0x24f8c |
| }
| }
[*] Function system used 1 times libpaho-mqttpp3.so.1.2.0