[*] Binary protection state of libpaho-mqttpp3.so.1.2.0
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function sprintf 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-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x1d6f4 */
| #include <stdint.h>
|
; (fcn) fcn.0001d6f4 () | void fcn_0001d6f4 (int16_t arg1, int16_t arg2) {
| int16_t var_0h;
| int16_t var_4h;
| r0 = arg1;
| r1 = arg2;
0x0001d6f4 ldr r2, [pc, 0x124] |
0x0001d6f6 ldr r3, [pc, 0x128] | r3 = *(0x1d822);
0x0001d6f8 push.w {r4, r5, r6, r7, r8, lr} |
0x0001d6fc add.w r8, r0, 0x18 | r8 = r0 + 0x18;
0x0001d700 add r2, pc | r2 = 0x3af20;
0x0001d702 ldr r5, [r1, 4] | r5 = *((r1 + 4));
0x0001d704 sub sp, 8 |
0x0001d706 mov r4, r0 | r4 = r0;
0x0001d708 str.w r8, [r0, 0x10] | __asm ("str.w r8, [r0, 0x10]");
0x0001d70c ldr r3, [r2, r3] |
0x0001d70e ldr r7, [r1] | r7 = *(r1);
0x0001d710 ldr r3, [r3] | r3 = *(0x3af20);
0x0001d712 str r3, [sp, 4] | var_4h = r3;
0x0001d714 mov.w r3, 0 | r3 = 0;
0x0001d718 rsbs r3, r5, 0 | r3 = r5 - ;
0x0001d71a clz r2, r7 | r2 &= r7;
0x0001d71e cmp r7, r3 |
0x0001d720 lsr.w r2, r2, 5 | r2 >>= 5;
0x0001d724 it eq |
| if (r7 != r3) {
0x0001d726 moveq r2, 0 | r2 = 0;
| }
0x0001d728 cmp r2, 0 |
| if (r2 != 0) {
0x0001d72a bne 0x1d7e4 | goto label_2;
| }
0x0001d72c cmp r5, 0xf |
0x0001d72e mov r6, r1 | r6 = r1;
0x0001d730 str r5, [sp] | *(sp) = r5;
| if (r5 > 0xf) {
0x0001d732 bhi 0x1d7a8 | goto label_3;
| }
0x0001d734 cmp r5, 1 |
| if (r5 != 1) {
0x0001d736 bne 0x1d798 | goto label_4;
| }
0x0001d738 ldrb r3, [r7] | r3 = *(r7);
0x0001d73a strb r3, [r0, 0x18] | *((r0 + 0x18)) = r3;
0x0001d73c mov r3, r8 | r3 = r8;
| do {
| label_1:
0x0001d73e movs r2, 0 | r2 = 0;
0x0001d740 add.w r0, r4, 0x30 | r0 = r4 + 0x30;
0x0001d744 str r5, [r4, 0x14] | *((r4 + 0x14)) = r5;
0x0001d746 add.w r1, r4, 0x28 | r1 = r4 + 0x28;
0x0001d74a strb r2, [r3, r5] | *((r3 + r5)) = r2;
0x0001d74c str r0, [r4, 0x28] | *((r4 + 0x28)) = r0;
0x0001d74e ldrd r7, r5, [r6, 0x18] | __asm ("ldrd r7, r5, [r6, 0x18]");
0x0001d752 subs r2, r7, r2 | r2 = r7 - r2;
0x0001d754 rsbs r3, r5, 0 | r3 = r5 - ;
0x0001d756 clz r2, r2 | r2 &= r2;
0x0001d75a cmp r7, r3 |
0x0001d75c lsr.w r2, r2, 5 | r2 >>= 5;
0x0001d760 it eq |
| if (r7 != r3) {
0x0001d762 moveq r2, 0 | r2 = 0;
| }
0x0001d764 cmp r2, 0 |
| if (r2 != 0) {
0x0001d766 bne 0x1d7ec | goto label_5;
| }
0x0001d768 cmp r5, 0xf |
0x0001d76a str r5, [sp] | *(sp) = r5;
| if (r5 > 0xf) {
0x0001d76c bhi 0x1d7c4 | goto label_6;
| }
0x0001d76e cmp r5, 1 |
| if (r5 != 1) {
0x0001d770 bne 0x1d7a2 | goto label_7;
| }
0x0001d772 ldrb r3, [r7] | r3 = *(r7);
0x0001d774 strb.w r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
| label_0:
0x0001d778 movs r3, 0 | r3 = 0;
0x0001d77a ldr r2, [pc, 0xa8] |
0x0001d77c str r5, [r4, 0x2c] | *((r4 + 0x2c)) = r5;
0x0001d77e strb r3, [r0, r5] | *((r0 + r5)) = r3;
0x0001d780 ldr r3, [pc, 0x9c] | r3 = *(0x1d820);
0x0001d782 add r2, pc | r2 = 0x3afac;
0x0001d784 ldr r3, [r2, r3] | r3 = *(0x3afac);
0x0001d786 ldr r2, [r3] | r2 = *(0x3afac);
0x0001d788 ldr r3, [sp, 4] | r3 = var_4h;
0x0001d78a eors r2, r3 | r2 ^= r3;
0x0001d78c mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0001d790 bne 0x1d7e0 | goto label_8;
| }
0x0001d792 add sp, 8 |
0x0001d794 pop.w {r4, r5, r6, r7, r8, pc} |
| label_4:
0x0001d798 mov r3, r8 | r3 = r8;
0x0001d79a cmp r5, 0 |
0x0001d79c beq 0x1d73e |
| } while (r5 == 0);
0x0001d79e mov r0, r8 | r0 = r8;
0x0001d7a0 b 0x1d7b6 | goto label_9;
| label_7:
0x0001d7a2 cmp r5, 0 |
| if (r5 == 0) {
0x0001d7a4 beq 0x1d778 | goto label_0;
| }
0x0001d7a6 b 0x1d7d2 | goto label_10;
| label_3:
0x0001d7a8 adds r0, 0x10 | r0 += 0x10;
0x0001d7aa mov r1, sp | r1 = sp;
0x0001d7ac blx 0xed18 | fcn_0000ed18 ();
0x0001d7b0 ldr r3, [sp] | r3 = *(sp);
0x0001d7b2 str r0, [r4, 0x10] | *((r4 + 0x10)) = r0;
0x0001d7b4 str r3, [r4, 0x18] | *((r4 + 0x18)) = r3;
| label_9:
0x0001d7b6 mov r2, r5 | r2 = r5;
0x0001d7b8 mov r1, r7 | r1 = r7;
0x0001d7ba blx 0xebf8 | fcn_0000ebf8 ();
0x0001d7be ldr r5, [sp] | r5 = *(sp);
0x0001d7c0 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0001d7c2 b 0x1d73e | goto label_1;
| label_6:
0x0001d7c4 mov r0, r1 | r0 = r1;
0x0001d7c6 mov r1, sp | r1 = sp;
0x0001d7c8 blx 0xed18 | fcn_0000ed18 ();
0x0001d7cc ldr r3, [sp] | r3 = *(sp);
0x0001d7ce str r0, [r4, 0x28] | *((r4 + 0x28)) = r0;
0x0001d7d0 str r3, [r4, 0x30] | *((r4 + 0x30)) = r3;
| label_10:
0x0001d7d2 mov r2, r5 | r2 = r5;
0x0001d7d4 mov r1, r7 | r1 = r7;
0x0001d7d6 blx 0xebf8 | fcn_0000ebf8 ();
0x0001d7da ldr r5, [sp] | r5 = *(sp);
0x0001d7dc ldr r0, [r4, 0x28] | r0 = *((r4 + 0x28));
0x0001d7de b 0x1d778 | goto label_0;
| label_8:
0x0001d7e0 blx 0xea48 | fcn_0000ea48 ();
| label_2:
0x0001d7e4 ldr r0, [pc, 0x40] |
0x0001d7e6 add r0, pc | r0 = 0x3b012;
0x0001d7e8 blx 0xe86c | fcn_0000e86c ();
| label_5:
0x0001d7ec ldr r0, [pc, 0x3c] |
0x0001d7ee add r0, pc | r0 = 0x3b01e;
0x0001d7f0 blx 0xe86c | fcn_0000e86c ();
| do {
0x0001d7f4 blx 0xe71c | fcn_0000e71c ();
0x0001d7f8 mov r0, r4 | r0 = r4;
0x0001d7fa blx 0xe9a4 | fcn_0000e9a4 ();
0x0001d7fe blx 0xebdc | malloc (r0);
0x0001d802 ldr r3, [r4, 0x10] | r3 = *((r4 + 0x10));
0x0001d804 mov r5, r0 | r5 = r0;
0x0001d806 cmp r3, r8 |
| if (r3 != r8) {
0x0001d808 beq 0x1d810 |
0x0001d80a mov r0, r3 | r0 = r3;
0x0001d80c blx 0xe9a4 | fcn_0000e9a4 ();
| }
0x0001d810 mov r0, r5 | r0 = r5;
0x0001d812 b 0x1d7f4 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x21074 */
| #include <stdint.h>
|
; (fcn) method.mqtt::message.message_mqtt::buffer_ref_char___mqtt::buffer_ref_char___int__bool__mqtt::properties_const_ () | void method_mqtt::message_message_mqtt::buffer_ref_char_mqtt::buffer_ref_char_int_bool_mqtt::properties_const_ (int16_t arg_0h, int16_t arg_4h, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_4h_2;
| int16_t var_8h_3;
| int16_t var_1ch_2;
| int16_t var_20h_2;
| int16_t var_24h_2;
| int16_t var_2ch;
| int16_t var_3ch;
| int16_t var_68h;
| int16_t var_6ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
| /* mqtt::message::message(mqtt::buffer_ref<char>, mqtt::buffer_ref<char>, int, bool, mqtt::properties const&) */
0x00021074 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00021078 sub sp, 0x44 |
0x0002107a mov sl, r2 | sl = r2;
0x0002107c ldrb.w r2, [sp, 0x68] | r2 = var_68h;
0x00021080 mov fp, r1 |
0x00021082 mov r4, r0 | r4 = r0;
0x00021084 ldr r1, [pc, 0x1bc] |
0x00021086 mov ip, r0 |
0x00021088 str r2, [sp, 4] | *(arg_4h) = r2;
0x0002108a mov r7, r3 | r7 = r3;
0x0002108c ldr r2, [pc, 0x1b8] | r2 = *(0x21248);
0x0002108e add.w r6, r0, 0x40 | r6 = r0 + 0x40;
0x00021092 add r1, pc | r1 = 0x422da;
0x00021094 ldr.w lr, [pc, 0x1b4] |
0x00021098 movs r5, 0 | r5 = 0;
0x0002109a ldr.w sb, [sp, 0x6c] | sb = var_6ch;
0x0002109e ldr r2, [r1, r2] |
0x000210a0 add lr, pc | lr = 0x422f0;
0x000210a2 ldr.w r8, [pc, 0x1ac] | r8 = *(0x00021250);
0x000210a6 ldr r2, [r2] | r2 = *(0x422da);
0x000210a8 str r2, [sp, 0x3c] | var_3ch = r2;
0x000210aa mov.w r2, 0 | r2 = 0;
0x000210ae ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x000210b2 add r8, pc | r8 += pc;
0x000210b4 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x000210b8 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x000210bc stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x000210c0 ldm.w lr, {r0, r1, r2, r3} | r0 = *(lr);
| r1 = *((lr + 4));
| r2 = *((lr + 8));
| r3 = *((lr + 12));
0x000210c4 stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x000210c8 add r1, sp, 0x1c | r1 += var_1ch_2;
0x000210ca ldr.w r3, [fp] | r3 = *(fp);
0x000210ce mov r0, r4 | r0 = r4;
0x000210d0 strd r3, r5, [r4, 0x30] | __asm ("strd r3, r5, [r4, 0x30]");
0x000210d4 ldr.w r3, [fp, 4] | r3 = *(arg_4h);
0x000210d8 strd r5, r5, [fp] | __asm ("strd r5, r5, [fp]");
0x000210dc str r5, [r4, 0x40] | *((r4 + 0x40)) = r5;
0x000210de str r3, [r4, 0x34] | *((r4 + 0x34)) = r3;
0x000210e0 str r5, [r4, 0x44] | *((r4 + 0x44)) = r5;
0x000210e2 str r5, [r4, 0x48] | *((r4 + 0x48)) = r5;
0x000210e4 str r5, [r4, 0x4c] | *((r4 + 0x4c)) = r5;
0x000210e6 strd r5, r5, [r4, 0x38] | __asm ("strd r5, r5, [r4, 0x38]");
0x000210ea ldr.w r3, [sl] | r3 = *(sl);
0x000210ee str.w r5, [sl] | __asm ("str.w r5, [sl]");
0x000210f2 str r3, [sp, 0x1c] | var_1ch_2 = r3;
0x000210f4 ldr.w r3, [sl, 4] | r3 = *((sl + 4));
0x000210f8 str.w r5, [sl, 4] | __asm ("str.w r5, [sl, 4]");
0x000210fc str r3, [sp, 0x20] | var_20h_2 = r3;
0x000210fe blx 0xedd8 | fcn_0000edd8 ();
0x00021102 ldr r5, [sp, 0x20] | r5 = var_20h_2;
| if (r5 == 0) {
0x00021104 cbz r5, 0x2111e | goto label_0;
| }
0x00021106 ldr r3, [pc, 0x14c] | r3 = *(0x21256);
0x00021108 ldr.w sl, [r8, r3] | sl = *((r8 + r3));
0x0002110c ldrb.w r3, [sl] | r3 = *(sl);
0x00021110 cmp r3, 0 |
| if (r3 == 0) {
0x00021112 beq 0x2118e | goto label_4;
| }
0x00021114 ldr r3, [r5, 4] | r3 = *((r5 + 4));
0x00021116 subs r2, r3, 1 | r2 = r3 - 1;
0x00021118 str r2, [r5, 4] | *((r5 + 4)) = r2;
| label_1:
0x0002111a cmp r3, 1 |
0x0002111c beq 0x2116c |
| while (r3 != 1) {
| label_0:
0x0002111e cmp r7, 2 |
| if (r7 > 2) {
0x00021120 bhi 0x211ee | goto label_5;
| }
0x00021122 ldr r3, [sp, 4] | r3 = *(arg_4h);
0x00021124 cmp sb, r6 |
0x00021126 str r7, [r4, 0x10] | *((r4 + 0x10)) = r7;
0x00021128 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
| if (sb != r6) {
0x0002112a beq 0x21144 |
0x0002112c mov r0, r6 | r0 = r6;
0x0002112e blx 0xedb4 | fcn_0000edb4 ();
0x00021132 add r5, sp, 8 | r5 += var_8h_3;
0x00021134 mov r1, sb | r1 = sb;
0x00021136 mov r0, r5 | r0 = r5;
0x00021138 blx 0xeb24 | r0 = fcn_0000eb24 ();
0x0002113c ldm.w r5, {r0, r1, r2, r3} | r0 = *(r5);
| r1 = *((r5 + 4));
| r2 = *((r5 + 8));
| r3 = *((r5 + 12));
0x00021140 stm.w r6, {r0, r1, r2, r3} | *(r6) = r0;
| *((r6 + 4)) = r1;
| *((r6 + 8)) = r2;
| *((r6 + 12)) = r3;
| }
0x00021144 add.w r5, r4, 0x20 | r5 = r4 + 0x20;
0x00021148 ldm.w r6, {r0, r1, r2, r3} | r0 = *(r6);
| r1 = *((r6 + 4));
| r2 = *((r6 + 8));
| r3 = *((r6 + 12));
0x0002114c stm.w r5, {r0, r1, r2, r3} | *(r5) = r0;
| *((r5 + 4)) = r1;
| *((r5 + 8)) = r2;
| *((r5 + 12)) = r3;
0x00021150 ldr r2, [pc, 0x104] |
0x00021152 ldr r3, [pc, 0xf4] | r3 = *(0x2124a);
0x00021154 add r2, pc | r2 = 0x423b0;
0x00021156 ldr r3, [r2, r3] | r3 = *(0x423b0);
0x00021158 ldr r2, [r3] | r2 = *(0x423b0);
0x0002115a ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x0002115c eors r2, r3 | r2 ^= r3;
0x0002115e mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00021162 bne 0x211c4 | goto label_6;
| }
0x00021164 mov r0, r4 | r0 = r4;
0x00021166 add sp, 0x44 |
0x00021168 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x0002116c ldr r3, [r5] | r3 = *(r5);
0x0002116e mov r0, r5 | r0 = r5;
0x00021170 ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x00021172 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00021174 ldrb.w r3, [sl] | r3 = *(sl);
| if (r3 == 0) {
0x00021178 cbz r3, 0x211a8 | goto label_7;
| }
0x0002117a ldr r3, [r5, 8] | r3 = *((r5 + 8));
0x0002117c subs r2, r3, 1 | r2 = r3 - 1;
0x0002117e str r2, [r5, 8] | *((r5 + 8)) = r2;
| label_2:
0x00021180 cmp r3, 1 |
0x00021182 bne 0x2111e |
| }
0x00021184 ldr r3, [r5] | r3 = *(r5);
0x00021186 mov r0, r5 | r0 = r5;
0x00021188 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0002118a blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x0002118c b 0x2111e | goto label_0;
| label_4:
0x0002118e adds r2, r5, 4 | r2 = r5 + 4;
0x00021190 dmb ish | __asm ("dmb ish");
| do {
0x00021194 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x00021198 subs r1, r3, 1 | r1 = r3 - 1;
0x0002119a strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x0002119e cmp r0, 0 |
0x000211a0 bne 0x21194 |
| } while (r0 != 0);
0x000211a2 dmb ish | __asm ("dmb ish");
0x000211a6 b 0x2111a | goto label_1;
| label_7:
0x000211a8 add.w r2, r5, 8 | r2 = r5 + 8;
0x000211ac dmb ish | __asm ("dmb ish");
| do {
0x000211b0 ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000211b4 subs r1, r3, 1 | r1 = r3 - 1;
0x000211b6 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x000211ba cmp r0, 0 |
0x000211bc bne 0x211b0 |
| } while (r0 != 0);
0x000211be dmb ish | __asm ("dmb ish");
0x000211c2 b 0x21180 | goto label_2;
| label_6:
0x000211c4 blx 0xea48 | fcn_0000ea48 ();
| do {
| label_3:
0x000211c8 mov r0, r6 | r0 = r6;
0x000211ca blx 0xedb4 | fcn_0000edb4 ();
0x000211ce ldr r0, [r4, 0x3c] | r0 = *((r4 + 0x3c));
| if (r0 != 0) {
0x000211d0 cbz r0, 0x211d6 |
0x000211d2 bl 0x18a84 | fcn_00018a84 (r0);
| }
0x000211d6 ldr r0, [r4, 0x34] | r0 = *((r4 + 0x34));
| if (r0 != 0) {
0x000211d8 cbz r0, 0x211de |
0x000211da bl 0x18a84 | r0 = fcn_00018a84 (r0);
| }
0x000211de blx 0xea54 | fcn_0000ea54 ();
0x000211e2 ldr r0, [sp, 0x20] | r0 = var_20h_2;
0x000211e4 cmp r0, 0 |
0x000211e6 beq 0x211c8 |
| } while (r0 == 0);
0x000211e8 bl 0x18a84 | fcn_00018a84 (r0);
0x000211ec b 0x211c8 | goto label_3;
| label_5:
0x000211ee movs r0, 0x28 | r0 = 0x28;
0x000211f0 add r7, sp, 0x24 | r7 += var_24h_2;
0x000211f2 blx 0xe764 | fcn_0000e764 ();
0x000211f6 ldr r1, [pc, 0x64] |
0x000211f8 mov r5, r0 | r5 = r0;
0x000211fa mov r0, r7 | r0 = r7;
0x000211fc add r1, pc | r1 = 0x4245e;
0x000211fe bl 0xeef8 | entry0 (r0, r1);
0x00021202 mov r2, r7 | r2 = r7;
0x00021204 mvn r1, 8 | r1 = ~8;
0x00021208 mov r0, r5 | r0 = r5;
0x0002120a bl 0x21618 | fcn_00021618 (r0, r1, r2);
0x0002120e ldr r0, [sp, 0x24] | r0 = var_24h_2;
0x00021210 add r3, sp, 0x2c | r3 += var_2ch;
0x00021212 cmp r0, r3 |
| if (r0 != r3) {
0x00021214 beq 0x2121a |
0x00021216 blx 0xe9a4 | fcn_0000e9a4 ();
| }
0x0002121a ldr r3, [pc, 0x44] | r3 = *(0x21262);
0x0002121c mov r0, r5 | r0 = r5;
0x0002121e ldr.w r2, [r8, r3] | r2 = *((r8 + r3));
0x00021222 ldr r3, [pc, 0x40] | r3 = *(0x21266);
0x00021224 ldr.w r1, [r8, r3] | r1 = *((r8 + r3));
0x00021228 blx 0xed0c | fcn_0000ed0c ();
0x0002122c ldr r0, [sp, 0x24] | r0 = var_24h_2;
0x0002122e add r3, sp, 0x2c | r3 += var_2ch;
0x00021230 cmp r0, r3 |
| if (r0 != r3) {
0x00021232 beq 0x21238 |
0x00021234 blx 0xe9a4 | fcn_0000e9a4 ();
| }
0x00021238 mov r0, r5 | r0 = r5;
0x0002123a blx 0xe878 | fcn_0000e878 ();
0x0002123e b 0x211c8 | goto label_3;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-50593792.squashfs_v4_le_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x21268 */
| #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&) */
0x00021268 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0002126c mov r4, r0 | r4 = r0;
0x0002126e ldr r0, [pc, 0x1f4] |
0x00021270 mov fp, r1 |
0x00021272 sub sp, 0x44 |
0x00021274 mov r7, r3 | r7 = r3;
0x00021276 ldr r1, [pc, 0x1f0] | r1 = *(0x2146a);
0x00021278 mov r6, r2 | r6 = r2;
0x0002127a add r0, pc | r0 = 0x426e4;
0x0002127c ldr.w lr, [pc, 0x1ec] |
0x00021280 ldrb.w r3, [sp, 0x6c] | r3 = *(arg_6ch);
0x00021284 mov ip, r4 |
0x00021286 ldr r1, [r0, r1] |
0x00021288 mov.w sl, 0 | sl = 0;
0x0002128c add lr, pc | lr = 0x426fc;
0x0002128e ldr.w sb, [sp, 0x70] | sb = *(arg_70h);
0x00021292 ldr.w r8, [pc, 0x1dc] |
0x00021296 add.w r5, r4, 0x40 | r5 = r4 + 0x40;
0x0002129a ldr r1, [r1] | r1 = *(0x426e4);
0x0002129c str r1, [sp, 0x3c] | var_3ch = r1;
0x0002129e mov.w r1, 0 | r1 = 0;
0x000212a2 str r3, [sp, 4] | var_4h = r3;
0x000212a4 ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x000212a8 add r8, pc | r8 = 0x4271e;
0x000212aa stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x000212ae ldm.w lr!, {r0, r1, r2, r3} | r0 = *(lr!);
| r1 = *((lr! + 4));
| r2 = *((lr! + 8));
| r3 = *((lr! + 12));
0x000212b2 stm.w ip!, {r0, r1, r2, r3} | *(ip!) = r0;
| *((ip! + 4)) = r1;
| *((ip! + 8)) = r2;
| *((ip! + 12)) = r3;
0x000212b6 ldm.w lr, {r0, r1, r2, r3} | r0 = *(lr);
| r1 = *((lr + 4));
| r2 = *((lr + 8));
| r3 = *((lr + 12));
0x000212ba stm.w ip, {r0, r1, r2, r3} | *(ip) = r0;
| *((ip + 4)) = r1;
| *((ip + 8)) = r2;
| *((ip + 12)) = r3;
0x000212be movs r0, 0x24 | r0 = 0x24;
0x000212c0 ldr.w r3, [fp] | r3 = *(fp);
0x000212c4 strd r3, sl, [r4, 0x30] | __asm ("strd r3, sl, [r4, 0x30]");
0x000212c8 ldr.w r3, [fp, 4] | r3 = *(arg_6ch);
0x000212cc strd sl, sl, [fp] | __asm ("strd sl, sl, [fp]");
0x000212d0 strd sl, sl, [r4, 0x38] | __asm ("strd sl, sl, [r4, 0x38]");
0x000212d4 str r3, [r4, 0x34] | *((r4 + 0x34)) = r3;
0x000212d6 str.w sl, [r4, 0x40] | __asm ("str.w sl, [r4, 0x40]");
0x000212da str.w sl, [r4, 0x44] | __asm ("str.w sl, [r4, 0x44]");
0x000212de str.w sl, [r4, 0x48] | __asm ("str.w sl, [r4, 0x48]");
0x000212e2 str.w sl, [r4, 0x4c] | __asm ("str.w sl, [r4, 0x4c]");
0x000212e6 blx 0xe5ec | fcn_0000e5ec ();
0x000212ea ldr r3, [pc, 0x188] | r3 = *(0x21476);
0x000212ec adds r2, r6, r7 | r2 = r6 + r7;
0x000212ee mov r7, r0 | r7 = r0;
0x000212f0 movs r0, 1 | r0 = 1;
0x000212f2 strd r0, r0, [r7, 4] | __asm ("strd r0, r0, [r7, 4]");
0x000212f6 mov r1, r6 | r1 = r6;
0x000212f8 ldr.w r3, [r8, r3] | r3 = *(0x4271e);
0x000212fc mov r6, r7 | r6 = r7;
0x000212fe adds r3, 8 | r3 += 8;
0x00021300 str r3, [r6], 0xc | *(r6) = r3;
| r6 += 0xc;
0x00021304 add.w r3, r7, 0x14 | r3 = r7 + 0x14;
0x00021308 mov r0, r6 | r0 = r6;
0x0002130a str r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
0x0002130c bl 0x20774 | fcn_00020774 (r0, r1, r2);
0x00021310 add r1, sp, 0x1c | r1 += var_1ch;
0x00021312 mov r0, r4 | r0 = r4;
0x00021314 strd r6, r7, [sp, 0x1c] | __asm ("strd r6, r7, [var_1ch]");
0x00021318 blx 0xedd8 | fcn_0000edd8 ();
0x0002131c ldr r6, [sp, 0x20] | r6 = var_20h;
| if (r6 == 0) {
0x0002131e cbz r6, 0x21336 | goto label_0;
| }
0x00021320 ldr r3, [pc, 0x154] | r3 = *(0x21478);
0x00021322 ldr.w r7, [r8, r3] | r7 = *((r8 + r3));
0x00021326 ldrb r3, [r7] | r3 = *(r7);
0x00021328 cmp r3, 0 |
| if (r3 == 0) {
0x0002132a beq 0x213a8 | goto label_4;
| }
0x0002132c ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x0002132e subs r2, r3, 1 | r2 = r3 - 1;
0x00021330 str r2, [r6, 4] | *((r6 + 4)) = r2;
| label_1:
0x00021332 cmp r3, 1 |
0x00021334 beq 0x21388 |
| while (r3 != 1) {
| label_0:
0x00021336 ldr r3, [sp, 0x68] | r3 = *(arg_0h);
0x00021338 cmp r3, 2 |
| if (r3 > 2) {
0x0002133a bhi 0x21408 | goto label_5;
| }
0x0002133c ldr r3, [sp, 0x68] | r3 = *(arg_0h);
0x0002133e cmp r5, sb |
0x00021340 str r3, [r4, 0x10] | *((r4 + 0x10)) = r3;
0x00021342 ldr r3, [sp, 4] | r3 = var_4h;
0x00021344 str r3, [r4, 0x14] | *((r4 + 0x14)) = r3;
| if (r5 != sb) {
0x00021346 beq 0x21360 |
0x00021348 mov r0, r5 | r0 = r5;
0x0002134a blx 0xedb4 | fcn_0000edb4 ();
0x0002134e add r6, sp, 8 | r6 += var_8h;
0x00021350 mov r1, sb | r1 = sb;
0x00021352 mov r0, r6 | r0 = r6;
0x00021354 blx 0xeb24 | r0 = fcn_0000eb24 ();
0x00021358 ldm.w r6, {r0, r1, r2, r3} | r0 = *(r6);
| r1 = *((r6 + 4));
| r2 = *((r6 + 8));
| r3 = *((r6 + 12));
0x0002135c stm.w r5, {r0, r1, r2, r3} | *(r5) = r0;
| *((r5 + 4)) = r1;
| *((r5 + 8)) = r2;
| *((r5 + 12)) = r3;
| }
0x00021360 add.w r6, r4, 0x20 | r6 = r4 + 0x20;
0x00021364 ldm.w r5, {r0, r1, r2, r3} | r0 = *(r5);
| r1 = *((r5 + 4));
| r2 = *((r5 + 8));
| r3 = *((r5 + 12));
0x00021368 stm.w r6, {r0, r1, r2, r3} | *(r6) = r0;
| *((r6 + 4)) = r1;
| *((r6 + 8)) = r2;
| *((r6 + 12)) = r3;
0x0002136c ldr r2, [pc, 0x10c] |
0x0002136e ldr r3, [pc, 0xf8] | r3 = *(0x2146a);
0x00021370 add r2, pc | r2 = 0x427f0;
0x00021372 ldr r3, [r2, r3] | r3 = *(0x427f0);
0x00021374 ldr r2, [r3] | r2 = *(0x427f0);
0x00021376 ldr r3, [sp, 0x3c] | r3 = var_3ch;
0x00021378 eors r2, r3 | r2 ^= r3;
0x0002137a mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0002137e bne 0x213de | goto label_6;
| }
0x00021380 mov r0, r4 | r0 = r4;
0x00021382 add sp, 0x44 |
0x00021384 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00021388 ldr r3, [r6] | r3 = *(r6);
0x0002138a mov r0, r6 | r0 = r6;
0x0002138c ldr r3, [r3, 8] | r3 = *((r3 + 8));
0x0002138e blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x00021390 ldrb r3, [r7] | r3 = *(r7);
| if (r3 == 0) {
0x00021392 cbz r3, 0x213c2 | goto label_7;
| }
0x00021394 ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00021396 subs r2, r3, 1 | r2 = r3 - 1;
0x00021398 str r2, [r6, 8] | *((r6 + 8)) = r2;
| label_2:
0x0002139a cmp r3, 1 |
0x0002139c bne 0x21336 |
| }
0x0002139e ldr r3, [r6] | r3 = *(r6);
0x000213a0 mov r0, r6 | r0 = r6;
0x000213a2 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x000213a4 blx r3 | uint32_t (*r3)(uint32_t, uint32_t) (r0, r3);
0x000213a6 b 0x21336 | goto label_0;
| label_4:
0x000213a8 adds r2, r6, 4 | r2 = r6 + 4;
0x000213aa dmb ish | __asm ("dmb ish");
| do {
0x000213ae ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000213b2 subs r1, r3, 1 | r1 = r3 - 1;
0x000213b4 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x000213b8 cmp r0, 0 |
0x000213ba bne 0x213ae |
| } while (r0 != 0);
0x000213bc dmb ish | __asm ("dmb ish");
0x000213c0 b 0x21332 | goto label_1;
| label_7:
0x000213c2 add.w r2, r6, 8 | r2 = r6 + 8;
0x000213c6 dmb ish | __asm ("dmb ish");
| do {
0x000213ca ldrex r3, [r2] | __asm ("ldrex r3, [r2]");
0x000213ce subs r1, r3, 1 | r1 = r3 - 1;
0x000213d0 strex r0, r1, [r2] | __asm ("strex r0, r1, [r2]");
0x000213d4 cmp r0, 0 |
0x000213d6 bne 0x213ca |
| } while (r0 != 0);
0x000213d8 dmb ish | __asm ("dmb ish");
0x000213dc b 0x2139a | goto label_2;
| label_6:
0x000213de blx 0xea48 | fcn_0000ea48 ();
| do {
| label_3:
0x000213e2 mov r0, r5 | r0 = r5;
0x000213e4 blx 0xedb4 | fcn_0000edb4 ();
0x000213e8 ldr r0, [r4, 0x3c] | r0 = *((r4 + 0x3c));
| if (r0 != 0) {
0x000213ea cbz r0, 0x213f0 |
0x000213ec bl 0x18a84 | fcn_00018a84 (r0);
| }
0x000213f0 ldr r0, [r4, 0x34] | r0 = *((r4 + 0x34));
| if (r0 != 0) {
0x000213f2 cbz r0, 0x213f8 |
0x000213f4 bl 0x18a84 | r0 = fcn_00018a84 (r0);
| }
0x000213f8 blx 0xea54 | fcn_0000ea54 ();
0x000213fc ldr r0, [sp, 0x20] | r0 = var_20h;
0x000213fe cmp r0, 0 |
0x00021400 beq 0x213e2 |
| } while (r0 == 0);
0x00021402 bl 0x18a84 | fcn_00018a84 (r0);
0x00021406 b 0x213e2 | goto label_3;
| label_5:
0x00021408 movs r0, 0x28 | r0 = 0x28;
0x0002140a add r7, sp, 0x24 | r7 += var_24h;
0x0002140c blx 0xe764 | fcn_0000e764 ();
0x00021410 ldr r1, [pc, 0x6c] |
0x00021412 mov r6, r0 | r6 = r0;
0x00021414 mov r0, r7 | r0 = r7;
0x00021416 add r1, pc | r1 = 0x4289a;
0x00021418 bl 0xeef8 | entry0 (r0, r1);
0x0002141c mov r2, r7 | r2 = r7;
0x0002141e mvn r1, 8 | r1 = ~8;
0x00021422 mov r0, r6 | r0 = r6;
0x00021424 bl 0x21618 | fcn_00021618 (r0, r1, r2);
0x00021428 ldr r0, [sp, 0x24] | r0 = var_24h;
0x0002142a add r3, sp, 0x2c | r3 += var_2ch;
0x0002142c cmp r0, r3 |
| if (r0 != r3) {
0x0002142e beq 0x21434 |
0x00021430 blx 0xe9a4 | fcn_0000e9a4 ();
| }
0x00021434 ldr r3, [pc, 0x4c] | r3 = *(0x21484);
0x00021436 mov r0, r6 | r0 = r6;
0x00021438 ldr.w r2, [r8, r3] | r2 = *((r8 + r3));
0x0002143c ldr r3, [pc, 0x48] | r3 = *(0x21488);
0x0002143e ldr.w r1, [r8, r3] | r1 = *((r8 + r3));
0x00021442 blx 0xed0c | fcn_0000ed0c ();
0x00021446 mov r0, r7 | r0 = r7;
0x00021448 blx 0xe9a4 | fcn_0000e9a4 ();
0x0002144c b 0x213e2 | goto label_3;
| }
[*] Function sprintf used 1 times libpaho-mqttpp3.so.1.2.0