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