[*] Binary protection state of libpaho-mqttpp3.so.1.2.0
Partial RELRO No Canary found NX disabled DSO No RPATH No RUNPATH No Symbols
[*] Function printf tear down of libpaho-mqttpp3.so.1.2.0
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x1c4d0 */
| #include <stdint.h>
|
; (fcn) fcn.0001c4d0 () | void fcn_0001c4d0 (int32_t arg1, int32_t arg2) {
| int32_t var_4h_2;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
0x0001c4d0 push {r0, r1, r4, r5, r6, lr} |
0x0001c4d4 add r3, r0, 8 | r3 = r0 + 8;
0x0001c4d8 subs r5, r1, 0 | r5 = r1 - 0;
0x0001c4dc str r3, [r0] | *(r0) = r3;
| if (r5 != r1) {
0x0001c4e0 beq 0x1c54c |
0x0001c4e4 mov r4, r0 | r4 = r0;
0x0001c4e8 mov r0, r5 | r0 = r5;
0x0001c4ec bl 0x1acb0 | r0 = strlen (r0);
0x0001c4f0 cmp r0, 0xf |
0x0001c4f4 add r6, r5, r0 | r6 = r5 + r0;
0x0001c4f8 str r0, [sp, 4] | var_4h_2 = r0;
| if (r0 >= 0xf) {
0x0001c4fc bls 0x1c51c |
0x0001c500 mov r2, 0 | r2 = 0;
0x0001c504 add r1, sp, 4 | r1 += var_4h_2;
0x0001c508 mov r0, r4 | r0 = r4;
0x0001c50c bl 0x1b9f4 | sym ();
0x0001c510 ldr r3, [sp, 4] | r3 = var_4h_2;
0x0001c514 str r3, [r4, 8] | *((r4 + 8)) = r3;
0x0001c518 str r0, [r4] | *(r4) = r0;
| }
0x0001c51c mov r2, r6 | r2 = r6;
0x0001c520 mov r1, r5 | r1 = r5;
0x0001c524 ldr r0, [r4] | r0 = *(r4);
0x0001c528 bl 0x1b484 | sym ();
0x0001c52c ldr r3, [sp, 4] | r3 = var_4h_2;
0x0001c530 ldr r2, [r4] | r2 = *(r4);
0x0001c534 mov r1, 0 | r1 = 0;
0x0001c538 mov r0, r4 | r0 = r4;
0x0001c53c str r3, [r4, 4] | *((r4 + 4)) = r3;
0x0001c540 strb r1, [r2, r3] | *((r2 + r3)) = r1;
0x0001c544 add sp, sp, 8 |
0x0001c548 pop {r4, r5, r6, pc} |
| }
0x0001c54c ldr r0, [pc, 4] | r0 = *(0x1c554);
0x0001c550 add r0, pc, r0 | r0 = pc + r0;
0x0001c554 bl 0x1b1a8 | sym ();
| /* Beware that this jump is a conditional jump.
| * r2dec transformed it as a return, due being the
| * last instruction. Please, check 'pdda' output
| * for more hints. */
0x0001c558 andeq r1, r1, r7, lsr 22 | return r1 &= (r7 >> 22);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x22814 */
| #include <stdint.h>
|
; (fcn) fcn.00022814 () | void fcn_00022814 (int32_t arg1, int32_t arg2) {
| int32_t var_4h;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
0x00022814 push {r0, r1, r4, r5, r6, lr} |
0x00022818 add r3, r0, 8 | r3 = r0 + 8;
0x0002281c subs r5, r1, 0 | r5 = r1 - 0;
0x00022820 str r3, [r0] | *(r0) = r3;
| if (r5 != r1) {
0x00022824 beq 0x22890 |
0x00022828 mov r4, r0 | r4 = r0;
0x0002282c mov r0, r5 | r0 = r5;
0x00022830 bl 0x1acb0 | r0 = strlen (r0);
0x00022834 cmp r0, 0xf |
0x00022838 add r6, r5, r0 | r6 = r5 + r0;
0x0002283c str r0, [sp, 4] | var_4h = r0;
| if (r0 >= 0xf) {
0x00022840 bls 0x22860 |
0x00022844 mov r2, 0 | r2 = 0;
0x00022848 add r1, sp, 4 | r1 += var_4h;
0x0002284c mov r0, r4 | r0 = r4;
0x00022850 bl 0x1b9f4 | sym ();
0x00022854 ldr r3, [sp, 4] | r3 = var_4h;
0x00022858 str r3, [r4, 8] | *((r4 + 8)) = r3;
0x0002285c str r0, [r4] | *(r4) = r0;
| }
0x00022860 mov r2, r6 | r2 = r6;
0x00022864 mov r1, r5 | r1 = r5;
0x00022868 ldr r0, [r4] | r0 = *(r4);
0x0002286c bl 0x1b484 | sym ();
0x00022870 ldr r3, [sp, 4] | r3 = var_4h;
0x00022874 ldr r2, [r4] | r2 = *(r4);
0x00022878 mov r1, 0 | r1 = 0;
0x0002287c mov r0, r4 | r0 = r4;
0x00022880 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x00022884 strb r1, [r2, r3] | *((r2 + r3)) = r1;
0x00022888 add sp, sp, 8 |
0x0002288c pop {r4, r5, r6, pc} |
| }
0x00022890 ldr r0, [pc, 4] | r0 = *(0x22898);
0x00022894 add r0, pc, r0 | r0 = pc + r0;
0x00022898 bl 0x1b1a8 | r0 = sym ();
| /* Beware that this jump is a conditional jump.
| * r2dec transformed it as a return, due being the
| * last instruction. Please, check 'pdda' output
| * for more hints. */
0x0002289c andeq fp, r0, r3, ror 15 | return void (*0x2289d)() ();
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x27218 */
| #include <stdint.h>
|
; (fcn) fcn.00027218 () | void fcn_00027218 (int32_t arg1, int32_t arg2) {
| int32_t var_4h;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
0x00027218 push {r0, r1, r4, r5, r6, lr} |
0x0002721c add r3, r0, 8 | r3 = r0 + 8;
0x00027220 subs r5, r1, 0 | r5 = r1 - 0;
0x00027224 str r3, [r0] | *(r0) = r3;
| if (r5 != r1) {
0x00027228 beq 0x27294 |
0x0002722c mov r4, r0 | r4 = r0;
0x00027230 mov r0, r5 | r0 = r5;
0x00027234 bl 0x1acb0 | r0 = strlen (r0);
0x00027238 cmp r0, 0xf |
0x0002723c add r6, r5, r0 | r6 = r5 + r0;
0x00027240 str r0, [sp, 4] | var_4h = r0;
| if (r0 >= 0xf) {
0x00027244 bls 0x27264 |
0x00027248 mov r2, 0 | r2 = 0;
0x0002724c add r1, sp, 4 | r1 += var_4h;
0x00027250 mov r0, r4 | r0 = r4;
0x00027254 bl 0x1b9f4 | sym ();
0x00027258 ldr r3, [sp, 4] | r3 = var_4h;
0x0002725c str r3, [r4, 8] | *((r4 + 8)) = r3;
0x00027260 str r0, [r4] | *(r4) = r0;
| }
0x00027264 mov r2, r6 | r2 = r6;
0x00027268 mov r1, r5 | r1 = r5;
0x0002726c ldr r0, [r4] | r0 = *(r4);
0x00027270 bl 0x1b484 | sym ();
0x00027274 ldr r3, [sp, 4] | r3 = var_4h;
0x00027278 ldr r2, [r4] | r2 = *(r4);
0x0002727c mov r1, 0 | r1 = 0;
0x00027280 mov r0, r4 | r0 = r4;
0x00027284 str r3, [r4, 4] | *((r4 + 4)) = r3;
0x00027288 strb r1, [r2, r3] | *((r2 + r3)) = r1;
0x0002728c add sp, sp, 8 |
0x00027290 pop {r4, r5, r6, pc} |
| }
0x00027294 ldr r0, [pc, 4] | r0 = *(0x2729c);
0x00027298 add r0, pc, r0 | r0 = pc + r0;
0x0002729c bl 0x1b1a8 | r0 = sym ();
0x000272a0 ldrdeq r6, r7, [r0], -pc | __asm ("ldrdeq r6, r7, [r0], -pc");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x29fc0 */
| #include <stdint.h>
|
; (fcn) fcn.00029fc0 () | void fcn_00029fc0 (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x00029fc0 push {r4, r5, r6, r7, r8, lr} |
0x00029fc4 sub r4, r2, r1 | r4 = r2 - r1;
0x00029fc8 mov r8, r2 | r8 = r2;
0x00029fcc ldr r2, [pc, 0x74] | r2 = *(0x2a044);
0x00029fd0 asr r3, r4, 3 | r3 = r4 >> 3;
0x00029fd4 mov r7, r0 | r7 = r0;
0x00029fd8 mul r0, r3, r2 | r0 = r3 * r2;
0x00029fdc mov r5, r1 | r5 = r1;
0x00029fe0 bl 0x29cd0 | r0 = fcn_00029cd0 (r0);
0x00029fe4 add r4, r0, r4 | r4 = r0 + r4;
0x00029fe8 str r4, [r7, 8] | *((r7 + 8)) = r4;
0x00029fec mov r6, r0 | r6 = r0;
0x00029ff0 mov r4, r0 | r4 = r0;
0x00029ff4 str r0, [r7] | *(r7) = r0;
| do {
0x00029ff8 cmp r8, r5 |
| if (r8 == r5) {
0x00029ffc beq 0x2a024 | goto label_1;
| }
0x0002a000 cmp r4, 0 |
| if (r4 != 0) {
0x0002a004 bne 0x2a014 | goto label_2;
| }
| label_0:
0x0002a008 add r5, r5, 0x18 | r5 += 0x18;
0x0002a00c add r4, r4, 0x18 | r4 += 0x18;
0x0002a010 b 0x29ff8 |
| } while (1);
| label_2:
0x0002a014 mov r1, r5 | r1 = r5;
0x0002a018 mov r0, r4 | r0 = r4;
0x0002a01c bl 0x1af08 | sym ();
0x0002a020 b 0x2a008 | goto label_0;
| label_1:
0x0002a024 str r4, [r7, 4] | *((r7 + 4)) = r4;
0x0002a028 pop {r4, r5, r6, r7, r8, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x2ce98 */
| #include <stdint.h>
|
; (fcn) fcn.0002ce98 () | void fcn_0002ce98 (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
0x0002ce98 push {r4, r5, r6, r7, r8, lr} |
0x0002ce9c ldr r6, [pc, 0x28] | r6 = *(0x2cec8);
0x0002cea0 mov r5, r0 | r5 = r0;
0x0002cea4 mov r7, r1 | r7 = r1;
| do {
0x0002cea8 ldr r4, [r5] | r4 = *(r5);
0x0002ceac mov r2, r5 | r2 = r5;
0x0002ceb0 add r1, r4, r7 | r1 = r4 + r7;
0x0002ceb4 mov r0, r4 | r0 = r4;
0x0002ceb8 blx r6 | r0 = uint32_t (*r6)(uint32_t, uint32_t, uint32_t) (r2, r1, r0);
0x0002cebc cmp r0, 0 |
0x0002cec0 bne 0x2cea8 |
| } while (r0 != 0);
0x0002cec4 mov r0, r4 | r0 = r4;
0x0002cec8 pop {r4, r5, r6, r7, r8, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x20940 */
| #include <stdint.h>
|
; (fcn) method.mqtt::exception.printable_error_int__int__std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char____const_ () | void method_mqtt::exception_printable_error_int_int_std::_cxx11::basic_string_char_std::char_traits_char_std::allocator_char_const_ (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_28h;
| int32_t var_2ch;
| int32_t var_30h;
| int32_t var_40h;
| int32_t var_58h;
| r0 = arg1;
| r1 = arg2;
| /* mqtt::exception::printable_error(int, int, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) */
0x00020940 push {r4, r5, r6, r7, r8, lr} |
0x00020944 mov r7, r3 | r7 = r3;
0x00020948 ldr r3, [pc, 0x21c] |
0x0002094c mov r8, r2 | r8 = r2;
0x00020950 ldr r2, [pc, 0x218] | r2 = *(0x20b6c);
0x00020954 add r3, pc, r3 | r3 = pc + r3;
0x00020958 ldr r3, [r3, r2] | r3 = *(0x20b68);
0x0002095c sub sp, sp, 0x58 |
0x00020960 str r3, [sp, 0xc] | var_ch = r3;
0x00020964 ldr r3, [pc, 0x208] | r3 = *(0x20b70);
0x00020968 add r4, sp, 0x28 | r4 += var_28h;
0x0002096c str r1, [sp] | *(sp) = r1;
0x00020970 mov r2, 0x10 | r2 = 0x10;
0x00020974 ldr r1, [sp, 0xc] | r1 = var_ch;
0x00020978 mov r6, r0 | r6 = r0;
0x0002097c add r3, pc, r3 | r3 = pc + r3;
0x00020980 mov r0, r4 | r0 = r4;
0x00020984 bl 0x1ba54 | fcn_0001ba54 ();
0x00020988 ldr r2, [pc, 0x1e8] | r2 = "EEEPSB_SH_EEEEvEE";
0x0002098c mov r1, 0 | r1 = 0;
0x00020990 add r2, pc, r2 | r2 = pc + r2;
0x00020994 mov r0, r4 | r0 = r4;
0x00020998 bl 0x1b1fc | sym ();
0x0002099c add r5, sp, 0x40 | r5 += var_40h;
0x000209a0 mov r1, r0 | r1 = r0;
0x000209a4 mov r0, r5 | r0 = r5;
0x000209a8 bl 0x1b0ac | sym ();
0x000209ac ldr r1, [pc, 0x1c8] | r1 = *(0x20b78);
0x000209b0 mov r0, r5 | r0 = r5;
0x000209b4 add r1, pc, r1 | r1 = pc + r1;
0x000209b8 bl 0x1bbec | r0 = sym ();
0x000209bc mov r1, r0 | r1 = r0;
0x000209c0 mov r0, r6 | r0 = r6;
0x000209c4 bl 0x1b0ac | sym ();
0x000209c8 mov r0, r5 | r0 = r5;
0x000209cc bl 0x1b610 | sym ();
0x000209d0 mov r0, r4 | r0 = r4;
0x000209d4 bl 0x1b610 | sym ();
0x000209d8 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x000209dc cmp r3, 0 |
| if (r3 != 0) {
0x000209e0 beq 0x20a28 |
0x000209e4 ldr r1, [pc, 0x194] | r1 = "_12basic_stringIcSt11char_traitsIcESaIcEEEEPSB_SH_EEEEvEE";
0x000209e8 mov r0, r4 | r0 = r4;
0x000209ec add r1, pc, r1 | r1 = pc + r1;
0x000209f0 bl 0x1c4d0 | fcn_0001c4d0 (r0, r1);
0x000209f4 mov r1, r7 | r1 = r7;
0x000209f8 mov r0, r4 | r0 = r4;
0x000209fc bl 0x1bc58 | r0 = sym ();
0x00020a00 mov r1, r0 | r1 = r0;
0x00020a04 mov r0, r5 | r0 = r5;
0x00020a08 bl 0x1b0ac | sym ();
0x00020a0c mov r1, r5 | r1 = r5;
0x00020a10 mov r0, r6 | r0 = r6;
0x00020a14 bl 0x1b658 | sym ();
0x00020a18 mov r0, r5 | r0 = r5;
0x00020a1c bl 0x1b610 | sym ();
0x00020a20 mov r0, r4 | r0 = r4;
0x00020a24 bl 0x1b610 | sym ();
| }
0x00020a28 cmp r8, 0xff |
0x00020a2c cmpne r8, 0 | __asm ("cmpne r8, 0");
| if (r8 != 0xff) {
0x00020a30 beq 0x20b08 |
0x00020a34 ldr r1, [pc, 0x148] | r1 = "okerISt5tupleIJMN4mqtt8callbackEFvRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEPSB_SH_EEEEvEE";
0x00020a38 add r7, sp, 0x10 | r7 += var_10h;
0x00020a3c add r1, pc, r1 | r1 = pc + r1;
0x00020a40 mov r0, r7 | r0 = r7;
0x00020a44 bl 0x1c4d0 | fcn_0001c4d0 (r0, r1);
0x00020a48 mov r0, r8 | r0 = r8;
0x00020a4c bl 0x1b2b0 | r0 = MQTTReasonCode_toString ();
0x00020a50 subs r1, r0, 0 | r1 = r0 - 0;
| if (r1 != r0) {
0x00020a54 beq 0x20a64 |
0x00020a58 mov r0, r4 | r0 = r4;
0x00020a5c bl 0x1c4d0 | fcn_0001c4d0 (r0, r1);
0x00020a60 b 0x20a74 |
| } else {
0x00020a64 add r3, sp, 0x30 | r3 += var_30h;
0x00020a68 str r3, [sp, 0x28] | var_28h = r3;
0x00020a6c str r1, [sp, 0x2c] | var_2ch = r1;
0x00020a70 strb r1, [sp, 0x30] | var_30h = r1;
| }
0x00020a74 ldr r2, [sp, 0x2c] | r2 = var_2ch;
0x00020a78 ldr r3, [sp, 0x14] | r3 = var_14h;
0x00020a7c ldr r1, [sp, 0x10] | r1 = var_10h;
0x00020a80 add r3, r3, r2 | r3 += r2;
0x00020a84 add r2, sp, 0x18 | r2 += var_18h;
0x00020a88 cmp r1, r2 |
| if (r1 == r2) {
0x00020a8c ldrne r2, [sp, 0x18] | r2 = var_18h;
| }
| if (r1 != r2) {
0x00020a90 moveq r2, 0xf | r2 = 0xf;
| }
0x00020a94 cmp r3, r2 |
| if (r3 >= r2) {
0x00020a98 bls 0x20acc |
0x00020a9c ldr r1, [sp, 0x28] | r1 = var_28h;
0x00020aa0 add r2, sp, 0x30 | r2 += var_30h;
0x00020aa4 cmp r1, r2 |
| if (r1 == r2) {
0x00020aa8 ldrne r2, [sp, 0x30] | r2 = var_30h;
| }
| if (r1 != r2) {
0x00020aac moveq r2, 0xf | r2 = 0xf;
| }
0x00020ab0 cmp r3, r2 |
| if (r3 <= r2) {
0x00020ab4 bhi 0x20acc |
0x00020ab8 mov r2, r7 | r2 = r7;
0x00020abc mov r1, 0 | r1 = 0;
0x00020ac0 mov r0, r4 | r0 = r4;
0x00020ac4 bl 0x1ac68 | sym ();
0x00020ac8 b 0x20ad8 |
| }
| } else {
0x00020acc mov r1, r4 | r1 = r4;
0x00020ad0 mov r0, r7 | r0 = r7;
0x00020ad4 bl 0x1bc58 | r0 = sym ();
| }
0x00020ad8 mov r1, r0 | r1 = r0;
0x00020adc mov r0, r5 | r0 = r5;
0x00020ae0 bl 0x1b0ac | sym ();
0x00020ae4 mov r1, r5 | r1 = r5;
0x00020ae8 mov r0, r6 | r0 = r6;
0x00020aec bl 0x1b658 | sym ();
0x00020af0 mov r0, r5 | r0 = r5;
0x00020af4 bl 0x1b610 | sym ();
0x00020af8 mov r0, r4 | r0 = r4;
0x00020afc bl 0x1b610 | sym ();
0x00020b00 mov r0, r7 | r0 = r7;
0x00020b04 bl 0x1b610 | sym ();
| }
0x00020b08 mov r0, r6 | r0 = r6;
0x00020b0c add sp, sp, 0x58 |
0x00020b10 pop {r4, r5, r6, r7, r8, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x274d8 */
| #include <stdint.h>
|
; (fcn) method.mqtt::iclient_persistence.persistence_keys_void__char__int_ () | uint32_t method_mqtt::iclient_persistence_persistence_keys_void_char_int_ (uint32_t arg1, uint32_t arg2) {
| char * src;
| int32_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| /* mqtt::iclient_persistence::persistence_keys(void*, char***, int*) */
0x000274d8 adds r3, r2, 0 | r3 = r2 + 0;
| if (r3 == r2) {
0x000274dc movne r3, 1 | r3 = 1;
| }
0x000274e0 cmp r1, 0 |
| if (r1 != 0) {
0x000274e4 moveq r3, 0 | r3 = 0;
| }
0x000274e8 cmp r0, 0 |
| if (r0 != 0) {
0x000274ec moveq r3, 0 | r3 = 0;
| }
0x000274f0 cmp r3, 0 |
| if (r3 == 0) {
0x000274f4 beq 0x275b8 | goto label_0;
| }
0x000274f8 ldr r3, [r0] | r3 = *(r0);
0x000274fc push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00027500 ldr r3, [r3, 0x18] | r3 = *((r3 + 0x18));
0x00027504 sub sp, sp, 0x1c |
0x00027508 mov r7, sp | r7 = sp;
0x0002750c mov r6, r1 | r6 = r1;
0x00027510 mov r1, r0 | r1 = r0;
0x00027514 mov r0, r7 | r0 = r7;
0x00027518 mov r5, r2 | r5 = r2;
0x0002751c blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00027520 ldm sp, {r3, r4} | r3 = *(sp);
| r4 = *((sp + 4));
0x00027524 sub r4, r4, r3 | r4 -= r3;
0x00027528 ldr r3, [pc, 0xb4] | r3 = *(0x275e0);
0x0002752c asr r4, r4, 3 | r4 >>= 3;
0x00027530 mul r2, r3, r4 | r2 = r3 * r4;
0x00027534 cmp r2, 0 |
0x00027538 str r2, [r5] | *(r5) = r2;
0x0002753c mov r4, r2 | r4 = r2;
| if (r2 != 0) {
0x00027540 streq r2, [r6] | *(r6) = r2;
| }
| if (r2 == 0) {
0x00027544 beq 0x275a4 | goto label_1;
| }
0x00027548 lsl r0, r2, 2 | r0 = r2 << 2;
0x0002754c bl 0x1ae6c | MQTTAsync_malloc ();
0x00027550 mov r5, 0 | r5 = 0;
0x00027554 mov fp, 0x18 |
0x00027558 str r0, [r6] | *(r6) = r0;
| do {
0x0002755c mul sb, fp, r5 | sb = fp * r5;
0x00027560 ldr r3, [sp] | r3 = *(sp);
0x00027564 add r3, r3, sb | r3 += sb;
0x00027568 ldr r8, [r3, 4] | r8 = *((r3 + 4));
0x0002756c add sl, r8, 1 | sl = r8 + 1;
0x00027570 mov r0, sl | r0 = sl;
0x00027574 bl 0x1ae6c | MQTTAsync_malloc ();
0x00027578 ldr r1, [sp] | r1 = *(sp);
0x0002757c mov r2, sl | r2 = sl;
0x00027580 ldr r1, [r1, sb] | r1 = *((r1 + sb));
0x00027584 bl 0x1ac8c | strncpy (r0, r1, r2);
0x00027588 mov r2, 0 | r2 = 0;
0x0002758c strb r2, [r0, r8] | *((r0 + r8)) = r2;
0x00027590 ldr r2, [r6] | r2 = *(r6);
0x00027594 str r0, [r2, r5, lsl 2] | offset_0 = r5 << 2;
| *((r2 + offset_0)) = r0;
0x00027598 add r5, r5, 1 | r5++;
0x0002759c cmp r5, r4 |
0x000275a0 bne 0x2755c |
| } while (r5 != r4);
| label_1:
0x000275a4 mov r0, r7 | r0 = r7;
0x000275a8 bl 0x1b148 | fcn_0001b148 ();
0x000275ac mov r0, 0 | r0 = 0;
0x000275b0 add sp, sp, 0x1c |
0x000275b4 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_0:
0x000275b8 mvn r0, 1 | r0 = ~1;
0x000275bc bx lr | return r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x28c6c */
| #include <stdint.h>
|
; (fcn) method.mqtt::ssl_options.on_error_char_const__unsigned_int__void_ () | uint32_t method_mqtt::ssl_options_on_error_char_const_unsigned_int_void_ (uint32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_8h;
| int32_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| /* mqtt::ssl_options::on_error(char const*, unsigned int, void*) */
0x00028c6c adds r3, r1, 0 | r3 = r1 + 0;
| if (r3 == r1) {
0x00028c70 movne r3, 1 | r3 = 1;
| }
0x00028c74 cmp r0, 0 |
| if (r0 != 0) {
0x00028c78 moveq r3, 0 | r3 = 0;
| }
0x00028c7c cmp r2, 0 |
| if (r2 != 0) {
0x00028c80 moveq r3, 0 | r3 = 0;
| }
0x00028c84 cmp r3, 0 |
| if (r3 == 0) {
0x00028c88 beq 0x28cec | goto label_0;
| }
0x00028c8c push {r4, r5, lr} |
0x00028c90 sub sp, sp, 0x1c |
0x00028c94 mov r4, r2 | r4 = r2;
0x00028c98 mov r5, sp | r5 = sp;
0x00028c9c mov r2, r1 | r2 = r1;
0x00028ca0 add r3, sp, 8 | r3 += var_8h;
0x00028ca4 mov r1, r0 | r1 = r0;
0x00028ca8 add r2, r0, r2 | r2 = r0 + r2;
0x00028cac mov r0, r5 | r0 = r5;
0x00028cb0 str r3, [sp] | *(sp) = r3;
0x00028cb4 bl 0x28be4 | fcn_00028be4 (r0, r1);
0x00028cb8 ldr r3, [r4, 0xe0] | r3 = *((r4 + 0xe0));
0x00028cbc cmp r3, 0 |
0x00028cc0 bne 0x28cd8 |
| while (1) {
0x00028cc4 mov r0, r5 | r0 = r5;
0x00028cc8 bl 0x1b610 | sym ();
0x00028ccc mov r0, 0 | r0 = 0;
0x00028cd0 add sp, sp, 0x1c |
0x00028cd4 pop {r4, r5, pc} |
0x00028cd8 ldr r3, [r4, 0xe4] | r3 = *((r4 + 0xe4));
0x00028cdc mov r1, r5 | r1 = r5;
0x00028ce0 add r0, r4, 0xd8 | r0 = r4 + 0xd8;
0x00028ce4 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x00028ce8 b 0x28cc4 |
| }
| label_0:
0x00028cec mvn r0, 0 | r0 = ~0;
0x00028cf0 bx lr | return r0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x28d18 */
| #include <stdint.h>
|
; (fcn) method.mqtt::ssl_options.on_psk_char_const__char__unsigned_int__unsigned_char__unsigned_int__void_ () | void method_mqtt::ssl_options_on_psk_char_const_char_unsigned_int_unsigned_char_unsigned_int_void_ (int32_t arg_50h, int32_t arg_54h, uint32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_34h;
| r0 = arg1;
| r1 = arg2;
| /* mqtt::ssl_options::on_psk(char const*, char*, unsigned int, unsigned char*, unsigned int, void*) */
0x00028d18 push {r4, r5, r6, r7, r8, sb, lr} |
0x00028d1c sub sp, sp, 0x34 |
0x00028d20 ldr r4, [sp, 0x54] | r4 = *(arg_54h);
0x00028d24 cmp r4, 0 |
| if (r4 == 0) {
0x00028d28 beq 0x28dc4 | goto label_0;
| }
0x00028d2c mov r7, r3 | r7 = r3;
0x00028d30 cmp r0, 0 |
0x00028d34 add r3, sp, 0x20 | r3 += var_20h;
0x00028d38 mov r5, r0 | r5 = r0;
0x00028d3c mov r8, r2 | r8 = r2;
0x00028d40 mov sb, r1 | sb = r1;
0x00028d44 add r6, sp, 0x18 | r6 += var_18h;
0x00028d48 str r3, [sp, 0x18] | var_18h = r3;
| if (arg_50h != ) {
0x00028d4c beq 0x28d68 |
0x00028d50 bl 0x1acb0 | strlen (r0);
0x00028d54 mov r1, r5 | r1 = r5;
0x00028d58 add r2, r5, r0 | r2 = r5 + r0;
0x00028d5c mov r0, r6 | r0 = r6;
0x00028d60 bl 0x28be4 | fcn_00028be4 (r0, r1);
0x00028d64 b 0x28d70 |
| } else {
0x00028d68 str r0, [sp, 0x1c] | var_1ch = r0;
0x00028d6c strb r0, [sp, 0x20] | var_20h = r0;
| }
0x00028d70 ldr r3, [r4, 0xf0] | r3 = *((r4 + 0xf0));
0x00028d74 cmp r3, 0 |
| if (r3 == 0) {
0x00028d78 beq 0x28dd0 | goto label_1;
| }
0x00028d7c ldr r3, [sp, 0x50] | r3 = *(arg_50h);
0x00028d80 str sb, [sp, 8] | var_8h = sb;
0x00028d84 str r3, [sp, 0x14] | var_14h = r3;
0x00028d88 add r3, sp, 0x14 | r3 += var_14h;
0x00028d8c str r3, [sp, 4] | var_4h = r3;
0x00028d90 add r3, sp, 0x10 | r3 += var_10h;
0x00028d94 str r3, [sp] | *(sp) = r3;
0x00028d98 str r8, [sp, 0xc] | var_ch = r8;
0x00028d9c str r7, [sp, 0x10] | var_10h = r7;
0x00028da0 ldr r5, [r4, 0xf4] | r5 = *((r4 + 0xf4));
0x00028da4 add r3, sp, 0xc | r3 += var_ch;
0x00028da8 add r2, sp, 8 | r2 += var_8h;
0x00028dac mov r1, r6 | r1 = r6;
0x00028db0 add r0, r4, 0xe8 | r0 = r4 + 0xe8;
0x00028db4 blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00028db8 mov r4, r0 | r4 = r0;
| do {
0x00028dbc mov r0, r6 | r0 = r6;
0x00028dc0 bl 0x1b610 | sym ();
| label_0:
0x00028dc4 mov r0, r4 | r0 = r4;
0x00028dc8 add sp, sp, 0x34 |
0x00028dcc pop {r4, r5, r6, r7, r8, sb, pc} |
| label_1:
0x00028dd0 mov r4, r3 | r4 = r3;
0x00028dd4 b 0x28dbc |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x2a20c */
| #include <stdint.h>
|
; (fcn) method.mqtt::string_collection.string_collection_std::initializer_list_char_const__ () | void method_mqtt::string_collection_string_collection_std::initializer_list_char_const_ (int32_t arg1, int32_t arg2) {
| int32_t var_4h;
| int32_t var_8h;
| int32_t var_ch;
| int32_t var_14h;
| int32_t var_18h;
| int32_t var_1ch;
| int32_t var_20h;
| int32_t var_34h;
| r0 = arg1;
| r1 = arg2;
| /* mqtt::string_collection::string_collection(std::initializer_list<char const*>) */
0x0002a20c push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0002a210 ldr fp, [pc, 0x1b8] | fp = *(0x2a3cc);
0x0002a214 sub sp, sp, 0x34 |
0x0002a218 add r3, sp, 8 | r3 += var_8h;
0x0002a21c stm r3, {r1, r2} | *(r3) = r1;
| *((r3 + 4)) = r2;
0x0002a220 ldr sb, [sp, 0xc] | sb = var_ch;
0x0002a224 mov r3, 0 | r3 = 0;
0x0002a228 mov r4, r0 | r4 = r0;
0x0002a22c mov r5, r1 | r5 = r1;
0x0002a230 add sb, r1, sb, lsl 2 | sb = r1 + (sb << 2);
0x0002a234 add r8, sp, 0x18 | r8 += var_18h;
0x0002a238 add fp, pc, fp |
0x0002a23c str r3, [r0] | *(r0) = r3;
0x0002a240 str r3, [r0, 4] | *((r0 + 4)) = r3;
0x0002a244 str r3, [r0, 8] | *((r0 + 8)) = r3;
0x0002a248 str r3, [r0, 0xc] | *((r0 + 0xc)) = r3;
0x0002a24c str r3, [r0, 0x10] | *((r0 + 0x10)) = r3;
0x0002a250 str r3, [r0, 0x14] | *((r0 + 0x14)) = r3;
| do {
0x0002a254 cmp sb, r5 |
| if (sb == r5) {
0x0002a258 beq 0x2a39c | goto label_1;
| }
0x0002a25c ldr r6, [r5], 4 | r6 = *(r5);
| r5 += 4;
0x0002a260 add r3, sp, 0x20 | r3 += var_20h;
0x0002a264 cmp r6, 0 |
0x0002a268 str r3, [sp, 0x18] | var_18h = r3;
| if (r6 != 0) {
0x0002a26c beq 0x2a29c |
0x0002a270 mov r0, r6 | r0 = r6;
0x0002a274 bl 0x1acb0 | r0 = strlen (r0);
0x0002a278 cmp r0, 0xf |
0x0002a27c add r7, r6, r0 | r7 = r6 + r0;
0x0002a280 str r0, [sp, 0x14] | var_14h = r0;
| if (r0 < 0xf) {
0x0002a284 bls 0x2a2b8 | goto label_2;
| }
0x0002a288 mov r2, 0 | r2 = 0;
0x0002a28c add r1, sp, 0x14 | r1 += var_14h;
0x0002a290 mov r0, r8 | r0 = r8;
0x0002a294 bl 0x1b9f4 | sym ();
0x0002a298 b 0x2a2ac |
| } else {
0x0002a29c ldr r0, [pc, 0x130] | r0 = *(0x2a3d0);
0x0002a2a0 add r0, pc, r0 | r0 = pc + r0;
0x0002a2a4 bl 0x1b1a8 | sym ();
0x0002a2a8 b 0x2a3b0 | goto label_3;
| }
0x0002a2ac ldr r3, [sp, 0x14] | r3 = var_14h;
0x0002a2b0 str r0, [sp, 0x18] | var_18h = r0;
0x0002a2b4 str r3, [sp, 0x20] | var_20h = r3;
| label_2:
0x0002a2b8 mov r1, r6 | r1 = r6;
0x0002a2bc mov r2, r7 | r2 = r7;
0x0002a2c0 ldr r0, [sp, 0x18] | r0 = var_18h;
0x0002a2c4 bl 0x1b484 | sym ();
0x0002a2c8 ldr r3, [sp, 0x14] | r3 = var_14h;
0x0002a2cc ldr r2, [sp, 0x18] | r2 = var_18h;
0x0002a2d0 mov r1, 0 | r1 = 0;
0x0002a2d4 str r3, [sp, 0x1c] | var_1ch = r3;
0x0002a2d8 strb r1, [r2, r3] | *((r2 + r3)) = r1;
0x0002a2dc ldr r6, [r4, 4] | r6 = *((r4 + 4));
0x0002a2e0 ldr r3, [r4, 8] | r3 = *((r4 + 8));
0x0002a2e4 cmp r6, r3 |
| if (r6 == r3) {
0x0002a2e8 beq 0x2a318 | goto label_4;
| }
0x0002a2ec cmp r6, r1 |
| if (r6 != r1) {
0x0002a2f0 beq 0x2a300 |
0x0002a2f4 mov r1, r8 | r1 = r8;
0x0002a2f8 mov r0, r6 | r0 = r6;
0x0002a2fc bl 0x1b0ac | sym ();
| }
0x0002a300 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x0002a304 add r3, r3, 0x18 | r3 += 0x18;
0x0002a308 str r3, [r4, 4] | *((r4 + 4)) = r3;
| label_0:
0x0002a30c mov r0, r8 | r0 = r8;
0x0002a310 bl 0x1b610 | sym ();
0x0002a314 b 0x2a254 |
| } while (1);
| label_4:
0x0002a318 mov r2, fp | r2 = fp;
0x0002a31c mov r1, 1 | r1 = 1;
0x0002a320 mov r0, r4 | r0 = r4;
0x0002a324 bl 0x1b238 | fcn_0001b238 ();
0x0002a328 ldr r7, [r4] | r7 = *(r4);
0x0002a32c str r0, [sp, 4] | var_4h = r0;
0x0002a330 sub r7, r6, r7 | r7 = r6 - r7;
0x0002a334 bl 0x29cd0 | r0 = fcn_00029cd0 (r0);
0x0002a338 mov sl, r0 | sl = r0;
0x0002a33c adds r0, r0, r7 | r0 += r7;
| if (r0 != r0) {
0x0002a340 beq 0x2a34c |
0x0002a344 mov r1, r8 | r1 = r8;
0x0002a348 bl 0x1b0ac | sym ();
| }
0x0002a34c mov r1, r6 | r1 = r6;
0x0002a350 mov r2, sl | r2 = sl;
0x0002a354 ldr r0, [r4] | r0 = *(r4);
0x0002a358 bl 0x29cfc | fcn_00029cfc (r0, r1);
0x0002a35c ldr r1, [r4, 4] | r1 = *((r4 + 4));
0x0002a360 add r2, r0, 0x18 | r2 = r0 + 0x18;
0x0002a364 mov r0, r6 | r0 = r6;
0x0002a368 bl 0x29cfc | r0 = fcn_00029cfc (r0, r1);
0x0002a36c mov r6, r0 | r6 = r0;
0x0002a370 ldm r4, {r0, r1} | r0 = *(r4);
| r1 = *((r4 + 4));
0x0002a374 bl 0x1acc8 | fcn_0001acc8 ();
0x0002a378 ldr r0, [r4] | r0 = *(r4);
0x0002a37c bl 0x29cc4 | fcn_00029cc4 (r0);
0x0002a380 ldr r3, [sp, 4] | r3 = var_4h;
0x0002a384 mov r2, 0x18 | r2 = 0x18;
0x0002a388 mla r3, r2, r3, sl | __asm ("mla r3, r2, r3, sl");
0x0002a38c str sl, [r4] | *(r4) = sl;
0x0002a390 str r6, [r4, 4] | *((r4 + 4)) = r6;
0x0002a394 str r3, [r4, 8] | *((r4 + 8)) = r3;
0x0002a398 b 0x2a30c | goto label_0;
| label_1:
0x0002a39c mov r0, r4 | r0 = r4;
0x0002a3a0 bl 0x1b544 | fcn_0001b544 ();
0x0002a3a4 b 0x2a3c4 | goto label_5;
| label_3:
0x0002a3b0 add r0, r4, 0xc | r0 = r4 + 0xc;
0x0002a3b4 bl 0x1ad04 | fcn_0001ad04 ();
0x0002a3b8 mov r0, r4 | r0 = r4;
0x0002a3bc bl 0x1b730 | fcn_0001b730 ();
0x0002a3c0 bl 0x1b49c | cxa_end_cleanup ();
| label_5:
0x0002a3c4 mov r0, r4 | r0 = r4;
0x0002a3c8 add sp, sp, 0x34 |
0x0002a3cc pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x2b4fc */
| #include <stdint.h>
|
; (fcn) method.mqtt::token.on_success_MQTTAsync_successData_ () | void method_mqtt::token_on_success_MQTTAsync_successData_ (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_ch;
| int32_t var_10h;
| int32_t var_18h;
| int32_t var_1ch;
| r0 = arg1;
| r1 = arg2;
| /* mqtt::token::on_success(MQTTAsync_successData*) */
0x0002b4fc push {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x0002b500 ldr r6, [pc, 0x244] | r6 = *(0x2b748);
0x0002b504 sub sp, sp, 0x1c |
0x0002b508 add r8, sp, 0x10 | r8 += var_10h;
0x0002b50c mov r4, r0 | r4 = r0;
0x0002b510 mov r7, r1 | r7 = r1;
0x0002b514 add r1, r0, 4 | r1 = r0 + 4;
0x0002b518 mov r0, r8 | r0 = r8;
0x0002b51c bl 0x1b1c0 | fcn_0001b1c0 ();
0x0002b520 cmp r7, 0 |
0x0002b524 add r6, pc, r6 | r6 = pc + r6;
0x0002b528 ldr sl, [r4, 0x88] | sl = *((r4 + 0x88));
| if (r7 == 0) {
0x0002b52c beq 0x2b550 | goto label_0;
| }
0x0002b530 ldr r3, [r7] | r3 = *(r7);
0x0002b534 str r3, [r4, 0x78] | *((r4 + 0x78)) = r3;
0x0002b538 ldr r3, [r4, 0x50] | r3 = *((r4 + 0x50));
0x0002b53c cmp r3, 1 |
| if (r3 == 1) {
0x0002b540 beq 0x2b5ec | goto label_1;
| }
| if (r3 <= 1) {
0x0002b544 blo 0x2b56c | goto label_2;
| }
0x0002b548 cmp r3, 3 |
| if (r3 == 3) {
0x0002b54c beq 0x2b6a8 | goto label_3;
| }
| do {
| label_0:
0x0002b550 mov r3, 0 | r3 = 0;
0x0002b554 str r3, [r4, 0x58] | *((r4 + 0x58)) = r3;
0x0002b558 mov r3, 1 | r3 = 1;
0x0002b55c strb r3, [r4, 0x90] | *((r4 + 0x90)) = r3;
0x0002b560 mov r0, r8 | r0 = r8;
0x0002b564 bl 0x1abf0 | fcn_0001abf0 ();
0x0002b568 b 0x2b6f8 | goto label_4;
| label_2:
0x0002b56c mov r0, 0x34 | r0 = 0x34;
0x0002b570 add sb, r4, 0x94 | sb = r4 + 0x94;
0x0002b574 bl 0x1ac38 | r0 = sym ();
0x0002b578 mov r5, r0 | r5 = r0;
0x0002b57c mov r1, 0 | r1 = 0;
0x0002b580 mov r2, 0x10 | r2 = 0x10;
0x0002b584 add r0, r0, 4 | r0 += 4;
0x0002b588 bl 0x1b2e0 | memset (r0, r1, r2);
0x0002b58c ldr r3, [pc, 0x1bc] | r3 = "_5get_alpn_protosB5cxx11Ev";
0x0002b590 mov r0, r5 | r0 = r5;
0x0002b594 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x0002b598 ldr r1, [r7, 4] | r1 = *((r7 + 4));
0x0002b59c add r3, r3, 8 | r3 += 8;
0x0002b5a0 str r3, [r0], 0x14 | *(r0) = r3;
| r0 += 0x14;
0x0002b5a4 bl 0x2aad4 | fcn_0002aad4 (r0, r1);
0x0002b5a8 ldr r3, [r7, 8] | r3 = *((r7 + 8));
0x0002b5ac mov r1, r5 | r1 = r5;
0x0002b5b0 str r3, [r5, 0x2c] | *((r5 + 0x2c)) = r3;
0x0002b5b4 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x0002b5b8 mov r0, sb | r0 = sb;
0x0002b5bc adds r3, r3, 0 | r3 += 0;
| if (r3 == r3) {
0x0002b5c0 movne r3, 1 | r3 = 1;
| }
0x0002b5c4 strb r3, [r5, 0x30] | *((r5 + 0x30)) = r3;
0x0002b5c8 bl 0x1bc1c | fcn_0001bc1c ();
0x0002b5cc b 0x2b550 |
| } while (1);
| label_1:
0x0002b5ec add r3, r4, 0x98 | r3 = r4 + 0x98;
0x0002b5f0 mov r0, 0x20 | r0 = 0x20;
0x0002b5f4 str r3, [sp] | *(sp) = r3;
0x0002b5f8 bl 0x1ac38 | r0 = sym ();
0x0002b5fc mov r5, r0 | r5 = r0;
0x0002b600 mov r2, 0x10 | r2 = 0x10;
0x0002b604 mov r1, 0 | r1 = 0;
0x0002b608 add r0, r0, 4 | r0 += 4;
0x0002b60c ldr fp, [r4, 0x8c] | fp = *((r4 + 0x8c));
0x0002b610 bl 0x1b2e0 | memset (r0, r1, r2);
0x0002b614 ldr r3, [pc, 0x138] | r3 = *(0x2b750);
0x0002b618 mov sb, r5 | sb = r5;
0x0002b61c ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x0002b620 cmp fp, 1 |
0x0002b624 mov r6, 0 | r6 = 0;
0x0002b628 add r3, r3, 8 | r3 += 8;
0x0002b62c str r3, [sb], 0x14 | *(sb) = r3;
| sb += 0x14;
0x0002b630 str r6, [r5, 0x14] | *((r5 + 0x14)) = r6;
0x0002b634 str r6, [r5, 0x18] | *((r5 + 0x18)) = r6;
0x0002b638 str r6, [r5, 0x1c] | *((r5 + 0x1c)) = r6;
0x0002b63c ldr r3, [r7, 4] | r3 = *((r7 + 4));
| if (fp <= 1) {
0x0002b640 bhi 0x2b658 |
0x0002b644 add r1, sp, 0x18 | r1 += var_18h;
0x0002b648 str r3, [r1, -0xc]! | *((r1 -= 0xc)) = r3;
0x0002b64c mov r0, sb | r0 = sb;
0x0002b650 bl 0x1b6e8 | fcn_0001b6e8 ();
0x0002b654 b 0x2b68c | goto label_5;
| }
0x0002b658 cmp r3, 0 |
| if (r3 == 0) {
0x0002b65c beq 0x2b68c | goto label_5;
| }
0x0002b660 add r3, sp, 0xc | r3 += var_ch;
0x0002b664 str r3, [sp, 4] | var_4h = r3;
| do {
0x0002b668 ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x0002b66c ldr r1, [sp, 4] | r1 = var_4h;
0x0002b670 ldr r3, [r3, r6, lsl 2] | offset_0 = r6 << 2;
| r3 = *((r3 + offset_0));
0x0002b674 mov r0, sb | r0 = sb;
0x0002b678 str r3, [sp, 0xc] | var_ch = r3;
0x0002b67c bl 0x1b6e8 | fcn_0001b6e8 ();
0x0002b680 add r6, r6, 1 | r6++;
0x0002b684 cmp fp, r6 |
0x0002b688 bne 0x2b668 |
| } while (fp != r6);
| label_5:
0x0002b68c mov r1, r5 | r1 = r5;
0x0002b690 ldr r0, [sp] | r0 = *(sp);
0x0002b694 bl 0x1bb68 | fcn_0001bb68 ();
0x0002b698 b 0x2b550 | goto label_0;
| label_3:
0x0002b6a8 mov r0, 0x20 | r0 = 0x20;
0x0002b6ac add r7, r4, 0x9c | r7 = r4 + 0x9c;
0x0002b6b0 bl 0x1ac38 | r0 = sym ();
0x0002b6b4 mov r5, r0 | r5 = r0;
0x0002b6b8 mov r2, 0x10 | r2 = 0x10;
0x0002b6bc mov r1, 0 | r1 = 0;
0x0002b6c0 add r0, r0, 4 | r0 += 4;
0x0002b6c4 bl 0x1b2e0 | memset (r0, r1, r2);
0x0002b6c8 ldr r3, [pc, 0x88] | r3 = *(0x2b754);
0x0002b6cc mov r1, r5 | r1 = r5;
0x0002b6d0 ldr r3, [r6, r3] | r3 = *((r6 + r3));
0x0002b6d4 mov r0, r7 | r0 = r7;
0x0002b6d8 add r3, r3, 8 | r3 += 8;
0x0002b6dc str r3, [r5] | *(r5) = r3;
0x0002b6e0 mov r3, 0 | r3 = 0;
0x0002b6e4 str r3, [r5, 0x14] | *((r5 + 0x14)) = r3;
0x0002b6e8 str r3, [r5, 0x18] | *((r5 + 0x18)) = r3;
0x0002b6ec str r3, [r5, 0x1c] | *((r5 + 0x1c)) = r3;
0x0002b6f0 bl 0x1ac08 | fcn_0001ac08 ();
0x0002b6f4 b 0x2b550 | goto label_0;
| label_4:
0x0002b6f8 cmp sl, 0 |
0x0002b6fc bne 0x2b720 |
| while (1) {
0x0002b700 add r0, r4, 0x20 | r0 = r4 + 0x20;
0x0002b704 bl 0x1b9c4 | sym ();
0x0002b708 ldr r0, [r4, 0x54] | r0 = *((r4 + 0x54));
0x0002b70c mov r1, r4 | r1 = r4;
0x0002b710 ldr r3, [r0] | r3 = *(r0);
0x0002b714 ldr r3, [r3] | r3 = *(r3);
0x0002b718 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0002b71c b 0x2b738 | goto label_6;
0x0002b720 ldr r3, [sl] | r3 = *(sl);
0x0002b724 mov r1, r4 | r1 = r4;
0x0002b728 ldr r3, [r3, 0xc] | r3 = *((r3 + 0xc));
0x0002b72c mov r0, sl | r0 = sl;
0x0002b730 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
0x0002b734 b 0x2b700 |
| }
| label_6:
0x0002b738 mov r0, r8 | r0 = r8;
0x0002b73c bl 0x1af38 | fcn_0001af38 ();
0x0002b740 add sp, sp, 0x1c |
0x0002b744 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x23958 */
| #include <stdint.h>
|
; (fcn) method.std::_Sp_counted_deleter_mqtt::message__mqtt::client::ptr_mqtt.message__mqtt::message_const_::lambda_mqtt::message_1__std::allocator_void______gnu_cxx::_Lock_policy_1_::_M_get_deleter_std::type_info_const_ () | void method_std::_Sp_counted_deleter_mqtt::message_mqtt::client::ptr_mqtt_message_mqtt::message_const_::lambda_mqtt::message_1_std::allocator_void_gnu_cxx::_Lock_policy_1_::_M_get_deleter_std::type_info_const_ (int32_t arg1, int32_t arg2) {
| int32_t var_4h;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
| /* std::_Sp_counted_deleter<qtt::message*, mqtt::client::ptr<qtt::message>(mqtt::message const&)::{lambda(mqtt::message*)#1}, std::allocator<void>, (__gnu_cxx::_Lock_policy)1>::_M_get_deleter(std::type_info const&) */
0x00023958 ldr r3, [pc, 0x30] |
0x0002395c ldr r2, [pc, 0x30] | r2 = *(0x23990);
0x00023960 add r3, pc, r3 | r3 = pc + r3;
0x00023964 push {r0, r1, r4, lr} |
0x00023968 ldr r3, [r3, r2] | r3 = *(0x2398c);
0x0002396c mov r4, r0 | r4 = r0;
0x00023970 mov r0, r1 | r0 = r1;
0x00023974 mov r1, r3 | r1 = r3;
0x00023978 str r3, [sp, 4] | var_4h = r3;
0x0002397c bl 0x1b424 | r0 = sym ();
0x00023980 cmp r0, 0 |
| if (r0 == 0) {
0x00023984 addne r0, r4, 0x24 | r0 = r4 + 0x24;
| }
0x00023988 add sp, sp, 8 |
0x0002398c pop {r4, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x20610 */
| #include <stdint.h>
|
; (fcn) method.std::_Sp_counted_ptr_inplace_mqtt::delivery_token__std::allocator_mqtt.delivery_token______gnu_cxx::_Lock_policy_1_::_M_get_deleter_std::type_info_const_ () | void method_std::_Sp_counted_ptr_inplace_mqtt::delivery_token_std::allocator_mqtt_delivery_token_gnu_cxx::_Lock_policy_1_::_M_get_deleter_std::type_info_const_ (int32_t arg1, int32_t arg2) {
| int32_t var_4h;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
| /* std::_Sp_counted_ptr_inplace<qtt::delivery_token, std::allocator<qtt::delivery_token>, (__gnu_cxx::_Lock_policy)1>::_M_get_deleter(std::type_info const&) */
0x00020610 ldr r3, [pc, 0x30] |
0x00020614 ldr r2, [pc, 0x30] | r2 = *(0x20648);
0x00020618 add r3, pc, r3 | r3 = pc + r3;
0x0002061c push {r0, r1, r4, lr} |
0x00020620 ldr r3, [r3, r2] | r3 = *(0x20644);
0x00020624 mov r4, r0 | r4 = r0;
0x00020628 mov r0, r1 | r0 = r1;
0x0002062c mov r1, r3 | r1 = r3;
0x00020630 str r3, [sp, 4] | var_4h = r3;
0x00020634 bl 0x1b424 | r0 = sym ();
0x00020638 cmp r0, 0 |
| if (r0 == 0) {
0x0002063c addne r0, r4, 0x28 | r0 = r4 + 0x28;
| }
0x00020640 add sp, sp, 8 |
0x00020644 pop {r4, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x205d0 */
| #include <stdint.h>
|
; (fcn) method.std::_Sp_counted_ptr_inplace_mqtt::message__std::allocator_mqtt.message______gnu_cxx::_Lock_policy_1_::_M_get_deleter_std::type_info_const_ () | void method_std::_Sp_counted_ptr_inplace_mqtt::message_std::allocator_mqtt_message_gnu_cxx::_Lock_policy_1_::_M_get_deleter_std::type_info_const_ (int32_t arg1, int32_t arg2) {
| int32_t var_4h;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
| /* std::_Sp_counted_ptr_inplace<qtt::message, std::allocator<qtt::message>, (__gnu_cxx::_Lock_policy)1>::_M_get_deleter(std::type_info const&) */
0x000205d0 ldr r3, [pc, 0x30] |
0x000205d4 ldr r2, [pc, 0x30] | r2 = *(0x20608);
0x000205d8 add r3, pc, r3 | r3 = pc + r3;
0x000205dc push {r0, r1, r4, lr} |
0x000205e0 ldr r3, [r3, r2] | r3 = *(0x20604);
0x000205e4 mov r4, r0 | r4 = r0;
0x000205e8 mov r0, r1 | r0 = r1;
0x000205ec mov r1, r3 | r1 = r3;
0x000205f0 str r3, [sp, 4] | var_4h = r3;
0x000205f4 bl 0x1b424 | r0 = sym ();
0x000205f8 cmp r0, 0 |
| if (r0 == 0) {
0x000205fc addne r0, r4, 0x24 | r0 = r4 + 0x24;
| }
0x00020600 add sp, sp, 8 |
0x00020604 pop {r4, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x20550 */
| #include <stdint.h>
|
; (fcn) method.std::_Sp_counted_ptr_inplace_mqtt::string_collection__std::allocator_mqtt.string_collection______gnu_cxx::_Lock_policy_1_::_M_get_deleter_std::type_info_const_ () | void method_std::_Sp_counted_ptr_inplace_mqtt::string_collection_std::allocator_mqtt_string_collection_gnu_cxx::_Lock_policy_1_::_M_get_deleter_std::type_info_const_ (int32_t arg1, int32_t arg2) {
| int32_t var_4h;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
| /* std::_Sp_counted_ptr_inplace<qtt::string_collection, std::allocator<qtt::string_collection>, (__gnu_cxx::_Lock_policy)1>::_M_get_deleter(std::type_info const&) */
0x00020550 ldr r3, [pc, 0x30] |
0x00020554 ldr r2, [pc, 0x30] | r2 = *(0x20588);
0x00020558 add r3, pc, r3 | r3 = pc + r3;
0x0002055c push {r0, r1, r4, lr} |
0x00020560 ldr r3, [r3, r2] | r3 = *(0x20584);
0x00020564 mov r4, r0 | r4 = r0;
0x00020568 mov r0, r1 | r0 = r1;
0x0002056c mov r1, r3 | r1 = r3;
0x00020570 str r3, [sp, 4] | var_4h = r3;
0x00020574 bl 0x1b424 | r0 = sym ();
0x00020578 cmp r0, 0 |
| if (r0 == 0) {
0x0002057c addne r0, r4, 0x24 | r0 = r4 + 0x24;
| }
0x00020580 add sp, sp, 8 |
0x00020584 pop {r4, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x20590 */
| #include <stdint.h>
|
; (fcn) method.std::_Sp_counted_ptr_inplace_mqtt::token__std::allocator_mqtt.token______gnu_cxx::_Lock_policy_1_::_M_get_deleter_std::type_info_const_ () | void method_std::_Sp_counted_ptr_inplace_mqtt::token_std::allocator_mqtt_token_gnu_cxx::_Lock_policy_1_::_M_get_deleter_std::type_info_const_ (int32_t arg1, int32_t arg2) {
| int32_t var_4h;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
| /* std::_Sp_counted_ptr_inplace<qtt::token, std::allocator<qtt::token>, (__gnu_cxx::_Lock_policy)1>::_M_get_deleter(std::type_info const&) */
0x00020590 ldr r3, [pc, 0x30] |
0x00020594 ldr r2, [pc, 0x30] | r2 = *(0x205c8);
0x00020598 add r3, pc, r3 | r3 = pc + r3;
0x0002059c push {r0, r1, r4, lr} |
0x000205a0 ldr r3, [r3, r2] | r3 = *(0x205c4);
0x000205a4 mov r4, r0 | r4 = r0;
0x000205a8 mov r0, r1 | r0 = r1;
0x000205ac mov r1, r3 | r1 = r3;
0x000205b0 str r3, [sp, 4] | var_4h = r3;
0x000205b4 bl 0x1b424 | r0 = sym ();
0x000205b8 cmp r0, 0 |
| if (r0 == 0) {
0x000205bc addne r0, r4, 0x28 | r0 = r4 + 0x28;
| }
0x000205c0 add sp, sp, 8 |
0x000205c4 pop {r4, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x20650 */
| #include <stdint.h>
|
; (fcn) method.std::_Sp_counted_ptr_inplace_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__________gnu_cxx::_Lock_policy_1_::_M_get_dele () | void method_std::_Sp_counted_ptr_inplace_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_gnu_cxx::_Lock_policy_1_::_M_get_dele (int32_t arg1, int32_t arg2) {
| int32_t var_4h;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
| /* std::_Sp_counted_ptr_inplace<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> > >, (__gnu_cxx::_Lock_policy)1>::_M_get_deleter(std::type_info const&) */
0x00020650 ldr r3, [pc, 0x30] |
0x00020654 ldr r2, [pc, 0x30] | r2 = *(0x20688);
0x00020658 add r3, pc, r3 | r3 = pc + r3;
0x0002065c push {r0, r1, r4, lr} |
0x00020660 ldr r3, [r3, r2] | r3 = *(0x20684);
0x00020664 mov r4, r0 | r4 = r0;
0x00020668 mov r0, r1 | r0 = r1;
0x0002066c mov r1, r3 | r1 = r3;
0x00020670 str r3, [sp, 4] | var_4h = r3;
0x00020674 bl 0x1b424 | r0 = sym ();
0x00020678 cmp r0, 0 |
| if (r0 == 0) {
0x0002067c addne r0, r4, 0x24 | r0 = r4 + 0x24;
| }
0x00020680 add sp, sp, 8 |
0x00020684 pop {r4, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x2bf30 */
| #include <stdint.h>
|
; (fcn) method.void_std::vector_mqtt::ReasonCode__std::allocator_mqtt::ReasonCode___::_M_realloc_insert_mqtt.ReasonCode____gnu_cxx::__normal_iterator_mqtt::ReasonCode__std::vector_mqtt::ReasonCode__std::allocator_mqtt::ReasonCode_______mqtt::ReasonCode_ () | void method_void_std::vector_mqtt::ReasonCode_std::allocator_mqtt::ReasonCode_::_M_realloc_insert_mqtt_ReasonCode_gnu_cxx::_normal_iterator_mqtt::ReasonCode_std::vector_mqtt::ReasonCode_std::allocator_mqtt::ReasonCode_mqtt::ReasonCode_ (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
| /* void std::vector<qtt::ReasonCode, std::allocator<qtt::ReasonCode> >::_M_realloc_insert<qtt::ReasonCode>(__gnu_cxx::__normal_iterator<qtt::ReasonCode*, std::vector<qtt::ReasonCode, std::allocator<qtt::ReasonCode> > >, mqtt::ReasonCode&&) */
0x0002bf30 push {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0002bf34 ldr r8, [r0] | r8 = *(r0);
0x0002bf38 ldr r4, [r0, 4] | r4 = *((r0 + 4));
0x0002bf3c mov r6, r0 | r6 = r0;
0x0002bf40 sub r4, r4, r8 | r4 -= r8;
0x0002bf44 asrs r4, r4, 2 | r4 >>= 2;
| if (? == ?) {
0x0002bf48 movne r3, r4 | r3 = r4;
| }
| if (? != ?) {
0x0002bf4c moveq r3, 1 | r3 = 1;
| }
0x0002bf50 adds r4, r4, r3 | r4 += r3;
0x0002bf54 mov r7, r1 | r7 = r1;
0x0002bf58 mov sb, r2 | sb = r2;
0x0002bf5c sub r8, r1, r8 | r8 = r1 - r8;
| if (r4 >= r4) {
0x0002bf60 bhs 0x2bfec | goto label_0;
| }
0x0002bf64 cmn r4, 0xc0000001 |
| if (r4 > 0xc0000001) {
0x0002bf68 bhi 0x2bfec | goto label_0;
| }
0x0002bf6c cmp r4, 0 |
| if (r4 != 0) {
0x0002bf70 bne 0x2bff0 | goto label_1;
| }
0x0002bf74 mov r5, r4 | r5 = r4;
| do {
0x0002bf78 cmn r5, r8 |
| if (r5 == r8) {
0x0002bf7c ldrne r3, [sb] | r3 = *(sb);
| }
0x0002bf80 ldr sb, [r6] | sb = *(r6);
| if (r5 == r8) {
0x0002bf84 strne r3, [r5, r8] | *((r5 + r8)) = r3;
| }
0x0002bf88 cmp r7, sb |
0x0002bf8c sub r8, r7, sb | r8 = r7 - sb;
| if (r7 != sb) {
0x0002bf90 beq 0x2bfa4 |
0x0002bf94 mov r2, r8 | r2 = r8;
0x0002bf98 mov r1, sb | r1 = sb;
0x0002bf9c mov r0, r5 | r0 = r5;
0x0002bfa0 bl 0x1ad70 | memmove (r0, r1, r2);
| }
0x0002bfa4 ldr r2, [r6, 4] | r2 = *((r6 + 4));
0x0002bfa8 add r3, r8, 4 | r3 = r8 + 4;
0x0002bfac cmp r7, r2 |
0x0002bfb0 add r3, r5, r3 | r3 = r5 + r3;
0x0002bfb4 sub r8, r2, r7 | r8 = r2 - r7;
| if (r7 != r2) {
0x0002bfb8 beq 0x2bfd0 |
0x0002bfbc mov r0, r3 | r0 = r3;
0x0002bfc0 mov r2, r8 | r2 = r8;
0x0002bfc4 mov r1, r7 | r1 = r7;
0x0002bfc8 bl 0x1b64c | r0 = memcpy (r0, r1, r2);
0x0002bfcc mov r3, r0 | r3 = r0;
| }
0x0002bfd0 add r8, r3, r8 | r8 = r3 + r8;
0x0002bfd4 mov r0, sb | r0 = sb;
0x0002bfd8 add r4, r5, r4, lsl 2 | r4 = r5 + (r4 << 2);
0x0002bfdc bl 0x2aac8 | fcn_0002aac8 (r0);
0x0002bfe0 stm r6, {r5, r8} | *(r6) = r5;
| *((r6 + 4)) = r8;
0x0002bfe4 str r4, [r6, 8] | *((r6 + 8)) = r4;
0x0002bfe8 pop {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_0:
0x0002bfec mvn r4, 0xc0000000 | r4 = ~0xc0000000;
| label_1:
0x0002bff0 lsl r0, r4, 2 | r0 = r4 << 2;
0x0002bff4 bl 0x1ac38 | r0 = sym ();
0x0002bff8 mov r5, r0 | r5 = r0;
0x0002bffc b 0x2bf78 |
| } while (1);
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x27818 */
| #include <stdint.h>
|
; (fcn) method.void_std::vector_mqtt::buffer_view_char___std::allocator_mqtt::buffer_view_char_____::_M_realloc_insert_mqtt.buffer_view_char______gnu_cxx::__normal_iterator_mqtt::buffer_view_char___std::vector_mqtt::buffer_view_char___std::allocator_mqtt::buffe () | void method_void_std::vector_mqtt::buffer_view_char_std::allocator_mqtt::buffer_view_char_::_M_realloc_insert_mqtt_buffer_view_char_gnu_cxx::_normal_iterator_mqtt::buffer_view_char_std::vector_mqtt::buffer_view_char_std::allocator_mqtt::buffe (int32_t arg1, int32_t arg2) {
| r0 = arg1;
| r1 = arg2;
| /* void std::vector<qtt::buffer_view<char>, std::allocator<qtt::buffer_view<char> > >::_M_realloc_insert<qtt::buffer_view<char> >(__gnu_cxx::__normal_iterator<qtt::buffer_view<char>*, std::vector<qtt::buffer_view<char>, std::allocator<qtt::buffer_view<char> > > >, mqtt::buffer_view<char>&&) */
0x00027818 push {r4, r5, r6, r7, r8, sb, sl, lr} |
0x0002781c ldr r6, [r0] | r6 = *(r0);
0x00027820 ldr r4, [r0, 4] | r4 = *((r0 + 4));
0x00027824 mov r7, r0 | r7 = r0;
0x00027828 sub r4, r4, r6 | r4 -= r6;
0x0002782c asrs r4, r4, 3 | r4 >>= 3;
| if (? == ?) {
0x00027830 movne r3, r4 | r3 = r4;
| }
| if (? != ?) {
0x00027834 moveq r3, 1 | r3 = 1;
| }
0x00027838 adds r4, r4, r3 | r4 += r3;
0x0002783c mov r8, r1 | r8 = r1;
0x00027840 mov sb, r2 | sb = r2;
0x00027844 sub r6, r1, r6 | r6 = r1 - r6;
| if (r4 >= r4) {
0x00027848 bhs 0x278f8 | goto label_1;
| }
0x0002784c cmn r4, 0xe0000001 |
| if (r4 > 0xe0000001) {
0x00027850 bhi 0x278f8 | goto label_1;
| }
0x00027854 cmp r4, 0 |
| if (r4 != 0) {
0x00027858 bne 0x278fc | goto label_2;
| }
0x0002785c mov r5, r4 | r5 = r4;
| label_0:
0x00027860 adds r6, r5, r6 | r6 = r5 + r6;
0x00027864 ldr lr, [r7] |
| if (r6 == r5) {
0x00027868 ldmne sb, {r0, r1} | r0 = *(sb);
| r1 = *((sb + 4));
| }
0x0002786c mov r3, lr | r3 = lr;
0x00027870 mov r2, r5 | r2 = r5;
0x00027874 stmne r6, {r0, r1} | *(r6) = r0;
| *((r6 + 4)) = r1;
| while (1) {
0x00027878 cmp r8, r3 |
| if (r8 == r3) {
0x0002787c beq 0x27898 | goto label_3;
| }
0x00027880 cmp r2, 0 |
| if (r2 == 0) {
0x00027884 ldmne r3, {r0, r1} | r0 = *(r3);
| r1 = *((r3 + 4));
| }
0x00027888 add r3, r3, 8 | r3 += 8;
| if (r2 == 0) {
0x0002788c stmne r2, {r0, r1} | *(r2) = r0;
| *((r2 + 4)) = r1;
| }
0x00027890 add r2, r2, 8 | r2 += 8;
0x00027894 b 0x27878 |
| }
| label_3:
0x00027898 sub r3, r8, lr | r3 = r8 - lr;
0x0002789c add r3, r3, 8 | r3 += 8;
0x000278a0 ldr r6, [r7, 4] | r6 = *((r7 + 4));
0x000278a4 add r3, r5, r3 | r3 = r5 + r3;
0x000278a8 mov r2, r8 | r2 = r8;
0x000278ac mov ip, r3 |
| do {
0x000278b0 cmp r6, r2 |
| if (r6 == r2) {
0x000278b4 beq 0x278d0 | goto label_4;
| }
0x000278b8 cmp ip, 0 |
| if (ip == 0) {
0x000278bc ldmne r2, {r0, r1} | r0 = *(r2);
| r1 = *((r2 + 4));
| }
0x000278c0 add r2, r2, 8 | r2 += 8;
| if (ip == 0) {
0x000278c4 stmne ip, {r0, r1} | *(ip) = r0;
| *((ip + 4)) = r1;
| }
0x000278c8 add ip, ip, 8 |
0x000278cc b 0x278b0 |
| } while (1);
| label_4:
0x000278d0 sub r8, r6, r8 | r8 = r6 - r8;
0x000278d4 cmp lr, 0 |
0x000278d8 add r8, r3, r8 | r8 = r3 + r8;
| if (lr != 0) {
0x000278dc beq 0x278e8 |
0x000278e0 mov r0, lr | r0 = lr;
0x000278e4 bl 0x1b37c | sym ();
| }
0x000278e8 add r4, r5, r4, lsl 3 | r4 = r5 + (r4 << 3);
0x000278ec stm r7, {r5, r8} | *(r7) = r5;
| *((r7 + 4)) = r8;
0x000278f0 str r4, [r7, 8] | *((r7 + 8)) = r4;
0x000278f4 pop {r4, r5, r6, r7, r8, sb, sl, pc} |
| label_1:
0x000278f8 mvn r4, 0xe0000000 | r4 = ~0xe0000000;
| label_2:
0x000278fc lsl r0, r4, 3 | r0 = r4 << 3;
0x00027900 bl 0x1ac38 | r0 = sym ();
0x00027904 mov r5, r0 | r5 = r0;
0x00027908 b 0x27860 | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x29b34 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) method.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 () | void method_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 (int32_t arg1, int32_t arg2) {
| int32_t var_0h;
| int32_t var_4h;
| int32_t var_ch;
| r0 = arg1;
| r1 = arg2;
| /* 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> > >(__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> >&&) */
0x00029b34 push {r0, r1, r2, r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00029b38 ldr r7, [r0] | r7 = *(r0);
0x00029b3c ldr r4, [r0, 4] | r4 = *((r0 + 4));
0x00029b40 ldr r3, [pc, 0x170] | r3 = *(0x29cb4);
0x00029b44 sub r4, r4, r7 | r4 -= r7;
0x00029b48 asr r4, r4, 3 | r4 >>= 3;
0x00029b4c mov sb, r2 | sb = r2;
0x00029b50 muls r2, r3, r4 | r2 = r3 * r4;
0x00029b54 mov r6, r0 | r6 = r0;
| if (r2 == r3) {
0x00029b58 movne r3, r2 | r3 = r2;
| }
| if (r2 != r3) {
0x00029b5c moveq r3, 1 | r3 = 1;
| }
0x00029b60 adds r4, r2, r3 | r4 = r2 + r3;
0x00029b64 mov r5, r1 | r5 = r1;
0x00029b68 str r4, [sp] | *(sp) = r4;
0x00029b6c sub r7, r1, r7 | r7 = r1 - r7;
0x00029b70 ldr r3, [pc, 0x144] | r3 = *(0x29cb8);
| if (r4 >= r2) {
0x00029b74 bhs 0x29c9c | goto label_1;
| }
0x00029b78 cmp r4, r3 |
| if (r4 > r3) {
0x00029b7c bhi 0x29c9c | goto label_1;
| }
0x00029b80 cmp r4, 0 |
| if (r4 != 0) {
0x00029b84 bne 0x29ca0 | goto label_2;
| }
0x00029b88 mov r8, r4 | r8 = r4;
| label_0:
0x00029b8c adds r0, r8, r7 | r0 = r8 + r7;
| if (r0 != r8) {
0x00029b90 beq 0x29b9c |
0x00029b94 mov r1, sb | r1 = sb;
0x00029b98 bl 0x1b0ac | sym ();
| }
0x00029b9c ldr sb, [r6] | sb = *(r6);
0x00029ba0 mov r7, r8 | r7 = r8;
0x00029ba4 mov sl, sb | sl = sb;
| do {
0x00029ba8 cmp r5, sl |
| if (r5 == sl) {
0x00029bac beq 0x29bd0 | goto label_3;
| }
0x00029bb0 cmp r7, 0 |
| if (r7 != 0) {
0x00029bb4 beq 0x29bc4 |
0x00029bb8 mov r1, sl | r1 = sl;
0x00029bbc mov r0, r7 | r0 = r7;
0x00029bc0 bl 0x1b0ac | sym ();
| }
0x00029bc4 add sl, sl, 0x18 | sl += 0x18;
0x00029bc8 add r7, r7, 0x18 | r7 += 0x18;
0x00029bcc b 0x29ba8 |
| } while (1);
| label_3:
0x00029bd0 ldr r2, [pc, 0xe8] | r2 = *(0x29cbc);
0x00029bd4 sub r3, r5, sb | r3 = r5 - sb;
0x00029bd8 lsr r1, r3, 3 | r1 = r3 >> 3;
0x00029bdc mul r3, r2, r1 | r3 = r2 * r1;
0x00029be0 mov r5, 0x18 | r5 = 0x18;
0x00029be4 bic r3, r3, 0xe0000000 | r3 = BIT_MASK (r3, 0xe0000000);
0x00029be8 mul r1, r5, r3 | r1 = r5 * r3;
0x00029bec ldr r7, [r6, 4] | r7 = *((r6 + 4));
0x00029bf0 add r3, r1, r5 | r3 = r1 + r5;
0x00029bf4 add r4, r8, r3 | r4 = r8 + r3;
0x00029bf8 add sb, sb, r1 | sb += r1;
0x00029bfc mov r3, sb | r3 = sb;
0x00029c00 mov sl, r4 | sl = r4;
0x00029c04 mov fp, r2 |
| do {
0x00029c08 cmp r7, r3 |
| if (r7 == r3) {
0x00029c0c beq 0x29c38 | goto label_4;
| }
0x00029c10 cmp sl, 0 |
| if (sl != 0) {
0x00029c14 beq 0x29c2c |
0x00029c18 mov r1, r3 | r1 = r3;
0x00029c1c mov r0, sl | r0 = sl;
0x00029c20 str r3, [sp, 4] | var_4h = r3;
0x00029c24 bl 0x1b0ac | sym ();
0x00029c28 ldr r3, [sp, 4] | r3 = var_4h;
| }
0x00029c2c add r3, r3, 0x18 | r3 += 0x18;
0x00029c30 add sl, sl, 0x18 | sl += 0x18;
0x00029c34 b 0x29c08 |
| } while (1);
| label_4:
0x00029c38 sub r7, r7, sb | r7 -= sb;
0x00029c3c lsr r3, r7, 3 | r3 = r7 >> 3;
0x00029c40 mul r7, fp, r3 | r7 = fp * r3;
0x00029c44 mov r3, 0x18 | r3 = 0x18;
0x00029c48 bic r7, r7, 0xe0000000 | r7 = BIT_MASK (r7, 0xe0000000);
0x00029c4c mla r5, r3, r7, r4 | __asm ("mla r5, r3, r7, r4");
0x00029c50 ldm r6, {r7, sb} | r7 = *(r6);
| sb = *((r6 + 4));
| do {
0x00029c54 cmp sb, r7 |
| if (sb == r7) {
0x00029c58 beq 0x29c6c | goto label_5;
| }
0x00029c5c mov r0, r7 | r0 = r7;
0x00029c60 bl 0x1b610 | sym ();
0x00029c64 add r7, r7, 0x18 | r7 += 0x18;
0x00029c68 b 0x29c54 |
| } while (1);
| label_5:
0x00029c6c ldr r0, [r6] | r0 = *(r6);
0x00029c70 cmp r0, 0 |
| if (r0 != 0) {
0x00029c74 beq 0x29c7c |
0x00029c78 bl 0x1b37c | sym ();
| }
0x00029c7c ldr r4, [sp] | r4 = *(sp);
0x00029c80 mov r3, 0x18 | r3 = 0x18;
0x00029c84 mla r4, r3, r4, r8 | __asm ("mla r4, r3, r4, r8");
0x00029c88 str r8, [r6] | *(r6) = r8;
0x00029c8c str r5, [r6, 4] | *((r6 + 4)) = r5;
0x00029c90 str r4, [r6, 8] | *((r6 + 8)) = r4;
0x00029c94 add sp, sp, 0xc |
0x00029c98 pop {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_1:
0x00029c9c str r3, [sp] | *(sp) = r3;
| label_2:
0x00029ca0 ldr r0, [sp] | r0 = *(sp);
0x00029ca4 mov r3, 0x18 | r3 = 0x18;
0x00029ca8 mul r0, r3, r0 | r0 = r3 * r0;
0x00029cac bl 0x1ac38 | r0 = sym ();
0x00029cb0 mov r8, r0 | r8 = r0;
0x00029cb4 b 0x29b8c | goto label_0;
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x23818 */
| #include <stdint.h>
|
; (fcn) sym._ZNSt23_Sp_counted_ptr_inplaceINSt13__future_base17_Async_state_implINSt6thread8_InvokerISt5tupleIJMN4mqtt8callbackEFvRKNSt7__ () | void ZNSt23_Sp_counted_ptr_inplaceINSt13_future_base17_Async_state_implINSt6thread8_InvokerISt5tupleIJMN4mqtt8callbackEFvRKNSt7_ (int32_t arg1, int32_t arg2) {
| int32_t var_4h;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
0x00023818 ldr r3, [pc, 0x30] |
0x0002381c ldr r2, [pc, 0x30] | r2 = *(0x23850);
0x00023820 add r3, pc, r3 | r3 = pc + r3;
0x00023824 push {r0, r1, r4, lr} |
0x00023828 ldr r3, [r3, r2] | r3 = *(0x2384c);
0x0002382c mov r4, r0 | r4 = r0;
0x00023830 mov r0, r1 | r0 = r1;
0x00023834 mov r1, r3 | r1 = r3;
0x00023838 str r3, [sp, 4] | var_4h = r3;
0x0002383c bl 0x1b424 | r0 = sym ();
0x00023840 cmp r0, 0 |
| if (r0 == 0) {
0x00023844 addne r0, r4, 0x28 | r0 = r4 + 0x28;
| }
0x00023848 add sp, sp, 8 |
0x0002384c pop {r4, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x23898 */
| #include <stdint.h>
|
; (fcn) sym.std::_Sp_counted_ptr_inplace_std::__future_base::_Async_state_impl_std::thread::_Invoker_std::tuple_void__mqtt::callback::__std::shared_ptr_mqtt::delivery_token____mqtt::callback__std::shared_ptr_mqtt::delivery_token_______void___std::allocator_std::__future_base::_Async_state_impl_std::thread::_Invoker_std::tuple_void__mqtt::callback::__std::shared_ptr_mqtt::delivery_token____mqtt::callback__std::shared_ptr_mqtt::delivery_token_______void________gnu_cxx::_Lock_policy_1_::_M_get_deleter_std::type_info_const_ () | void std::_Sp_counted_ptr_inplace_std::_future_base::_Async_state_impl_std::thread::_Invoker_std::tuple_void_mqtt::callback::_std::shared_ptr_mqtt::delivery_token_mqtt::callback_std::shared_ptr_mqtt::delivery_token_void_std::allocator_std::_future_base::_Async_state_impl_std::thread::_Invoker_std::tuple_void_mqtt::callback::_std::shared_ptr_mqtt::delivery_token_mqtt::callback_std::shared_ptr_mqtt::delivery_token_void_gnu_cxx::_Lock_policy_1_::_M_get_deleter_std::type_info_const_ (int32_t arg1, int32_t arg2) {
| int32_t var_4h;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
| /* std::_Sp_counted_ptr_inplace<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (mqtt::callback::*)(std::shared_ptr<qtt::delivery_token>), mqtt::callback*, std::shared_ptr<qtt::delivery_token> > >, void>, std::allocator<std::__future_base::_Async_state_impl<std::thread::_Invoker<std::tuple<void (mqtt::callback::*)(std::shared_ptr<qtt::delivery_token>), mqtt::callback*, std::shared_ptr<qtt::delivery_token> > >, void> >, (__gnu_cxx::_Lock_policy)1>::_M_get_deleter(std::type_info const&) */
0x00023898 ldr r3, [pc, 0x30] |
0x0002389c ldr r2, [pc, 0x30] | r2 = *(0x238d0);
0x000238a0 add r3, pc, r3 | r3 = pc + r3;
0x000238a4 push {r0, r1, r4, lr} |
0x000238a8 ldr r3, [r3, r2] | r3 = *(0x238cc);
0x000238ac mov r4, r0 | r4 = r0;
0x000238b0 mov r0, r1 | r0 = r1;
0x000238b4 mov r1, r3 | r1 = r3;
0x000238b8 str r3, [sp, 4] | var_4h = r3;
0x000238bc bl 0x1b424 | r0 = sym ();
0x000238c0 cmp r0, 0 |
| if (r0 == 0) {
0x000238c4 addne r0, r4, 0x28 | r0 = r4 + 0x28;
| }
0x000238c8 add sp, sp, 8 |
0x000238cc pop {r4, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x23858 */
| #include <stdint.h>
|
; (fcn) sym.std::_Sp_counted_ptr_inplace_std::__future_base::_Deferred_state_std::thread::_Invoker_std::tuple_void__mqtt::callback::__std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char____const___mqtt::callback__std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char_________void___std::allocator_std::__future_base::_Deferred_state_std::thread::_Invoker_std::tuple_void__mqtt::callback::__std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char____const___mqtt::callback__std::__cxx11::basic_string_char__std::char_traits_char___std::allocator_char_________void________gnu_cxx::_Lock_policy_1_::_M_get_deleter_std::type_info_const_ () | void std::_Sp_counted_ptr_inplace_std::_future_base::_Deferred_state_std::thread::_Invoker_std::tuple_void_mqtt::callback::_std::_cxx11::basic_string_char_std::char_traits_char_std::allocator_char_const_mqtt::callback_std::_cxx11::basic_string_char_std::char_traits_char_std::allocator_char_void_std::allocator_std::_future_base::_Deferred_state_std::thread::_Invoker_std::tuple_void_mqtt::callback::_std::_cxx11::basic_string_char_std::char_traits_char_std::allocator_char_const_mqtt::callback_std::_cxx11::basic_string_char_std::char_traits_char_std::allocator_char_void_gnu_cxx::_Lock_policy_1_::_M_get_deleter_std::type_info_const_ (int32_t arg1, int32_t arg2) {
| int32_t var_4h;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
| /* std::_Sp_counted_ptr_inplace<std::__future_base::_Deferred_state<std::thread::_Invoker<std::tuple<void (mqtt::callback::*)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&), mqtt::callback*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, void>, std::allocator<std::__future_base::_Deferred_state<std::thread::_Invoker<std::tuple<void (mqtt::callback::*)(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&), mqtt::callback*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, void> >, (__gnu_cxx::_Lock_policy)1>::_M_get_deleter(std::type_info const&) */
0x00023858 ldr r3, [pc, 0x30] |
0x0002385c ldr r2, [pc, 0x30] | r2 = *(0x23890);
0x00023860 add r3, pc, r3 | r3 = pc + r3;
0x00023864 push {r0, r1, r4, lr} |
0x00023868 ldr r3, [r3, r2] | r3 = *(0x2388c);
0x0002386c mov r4, r0 | r4 = r0;
0x00023870 mov r0, r1 | r0 = r1;
0x00023874 mov r1, r3 | r1 = r3;
0x00023878 str r3, [sp, 4] | var_4h = r3;
0x0002387c bl 0x1b424 | r0 = sym ();
0x00023880 cmp r0, 0 |
| if (r0 == 0) {
0x00023884 addne r0, r4, 0x28 | r0 = r4 + 0x28;
| }
0x00023888 add sp, sp, 8 |
0x0002388c pop {r4, pc} |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/unblob_extracted/firmware_extract/56048-12514271.gzip_extract/gzip.uncompressed_extract/5243916-15068666.gzip_extract/gzip.uncompressed_extract/usr/lib/libpaho-mqttpp3.so.1.2.0 @ 0x238d8 */
| #include <stdint.h>
|
; (fcn) sym.std::_Sp_counted_ptr_inplace_std::__future_base::_Deferred_state_std::thread::_Invoker_std::tuple_void__mqtt::callback::__std::shared_ptr_mqtt::delivery_token____mqtt::callback__std::shared_ptr_mqtt::delivery_token_______void___std::allocator_std::__future_base::_Deferred_state_std::thread::_Invoker_std::tuple_void__mqtt::callback::__std::shared_ptr_mqtt::delivery_token____mqtt::callback__std::shared_ptr_mqtt::delivery_token_______void________gnu_cxx::_Lock_policy_1_::_M_get_deleter_std::type_info_const_ () | void std::_Sp_counted_ptr_inplace_std::_future_base::_Deferred_state_std::thread::_Invoker_std::tuple_void_mqtt::callback::_std::shared_ptr_mqtt::delivery_token_mqtt::callback_std::shared_ptr_mqtt::delivery_token_void_std::allocator_std::_future_base::_Deferred_state_std::thread::_Invoker_std::tuple_void_mqtt::callback::_std::shared_ptr_mqtt::delivery_token_mqtt::callback_std::shared_ptr_mqtt::delivery_token_void_gnu_cxx::_Lock_policy_1_::_M_get_deleter_std::type_info_const_ (int32_t arg1, int32_t arg2) {
| int32_t var_4h;
| int32_t var_8h;
| r0 = arg1;
| r1 = arg2;
| /* std::_Sp_counted_ptr_inplace<std::__future_base::_Deferred_state<std::thread::_Invoker<std::tuple<void (mqtt::callback::*)(std::shared_ptr<qtt::delivery_token>), mqtt::callback*, std::shared_ptr<qtt::delivery_token> > >, void>, std::allocator<std::__future_base::_Deferred_state<std::thread::_Invoker<std::tuple<void (mqtt::callback::*)(std::shared_ptr<qtt::delivery_token>), mqtt::callback*, std::shared_ptr<qtt::delivery_token> > >, void> >, (__gnu_cxx::_Lock_policy)1>::_M_get_deleter(std::type_info const&) */
0x000238d8 ldr r3, [pc, 0x30] |
0x000238dc ldr r2, [pc, 0x30] | r2 = *(0x23910);
0x000238e0 add r3, pc, r3 | r3 = pc + r3;
0x000238e4 push {r0, r1, r4, lr} |
0x000238e8 ldr r3, [r3, r2] | r3 = *(0x2390c);
0x000238ec mov r4, r0 | r4 = r0;
0x000238f0 mov r0, r1 | r0 = r1;
0x000238f4 mov r1, r3 | r1 = r3;
0x000238f8 str r3, [sp, 4] | var_4h = r3;
0x000238fc bl 0x1b424 | r0 = sym ();
0x00023900 cmp r0, 0 |
| if (r0 == 0) {
0x00023904 addne r0, r4, 0x28 | r0 = r4 + 0x28;
| }
0x00023908 add sp, sp, 8 |
0x0002390c pop {r4, pc} |
| }
[*] Function printf used 1 times libpaho-mqttpp3.so.1.2.0