[*] Binary protection state of libnxp_iot_agent_common.so
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function printf tear down of libnxp_iot_agent_common.so
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libnxp_iot_agent_common.so @ 0x45a0 */
| #include <stdint.h>
|
; (fcn) sym.pb_encode_delimited () | void pb_encode_delimited () {
0x000045a0 stcllt p7, c15, [r6], -0x3f4 | return __asm ("stcllt p7, c15, [r6], -0x3f4");
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libnxp_iot_agent_common.so @ 0x44a8 */
| #include <stdint.h>
|
; (fcn) sym.pb_encode_submessage () | void pb_encode_submessage (int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| int16_t var_4h;
| int32_t var_4h_2;
| int16_t var_ch;
| int16_t var_10h;
| int16_t var_14h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
0x000044a8 push.w {r4, r5, r6, r7, r8, sb, lr} |
0x000044ac mov r6, r0 | r6 = r0;
0x000044ae ldr r0, [pc, 0xbc] |
0x000044b0 sub sp, 0x1c |
0x000044b2 mov r5, sp | r5 = sp;
0x000044b4 movs r4, 0 | r4 = 0;
0x000044b6 ldr r3, [pc, 0xb8] | r3 = *(0x4572);
0x000044b8 mov r8, r1 | r8 = r1;
0x000044ba add r0, pc | r0 = 0x8a2c;
0x000044bc mov r7, r2 | r7 = r2;
0x000044be ldr r3, [r0, r3] |
0x000044c0 mov r0, r5 | r0 = r5;
0x000044c2 ldr r3, [r3] | r3 = *(0x8a2c);
0x000044c4 str r3, [sp, 0x14] | var_14h = r3;
0x000044c6 mov.w r3, 0 | r3 = 0;
0x000044ca str r4, [sp] | *(sp) = r4;
0x000044cc strd r4, r4, [r5, 4] | __asm ("strd r4, r4, [var_4h]");
0x000044d0 strd r4, r4, [r5, 0xc] | __asm ("strd r4, r4, [var_ch]");
0x000044d4 blx 0x1f84 | r0 = fcn_00001f84 ();
| if (r0 != 0) {
0x000044d8 cbnz r0, 0x44fa | goto label_3;
| }
0x000044da ldr r3, [sp, 0x10] | r3 = var_10h;
0x000044dc str r3, [r6, 0x10] | *((r6 + 0x10)) = r3;
| do {
| label_0:
0x000044de movs r0, 0 | r0 = 0;
| label_1:
0x000044e0 ldr r2, [pc, 0x90] |
0x000044e2 ldr r3, [pc, 0x8c] | r3 = *(0x4572);
0x000044e4 add r2, pc | r2 = 0x8a5c;
0x000044e6 ldr r3, [r2, r3] | r3 = *(0x8a5c);
0x000044e8 ldr r2, [r3] | r2 = *(0x8a5c);
0x000044ea ldr r3, [sp, 0x14] | r3 = var_14h;
0x000044ec eors r2, r3 | r2 ^= r3;
0x000044ee mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x000044f2 bne 0x4568 | goto label_4;
| }
0x000044f4 add sp, 0x1c |
0x000044f6 pop.w {r4, r5, r6, r7, r8, sb, pc} |
0x000044f8 strh r0, [r6, 0x1e] | *((r6 + 0x1e)) = r0;
| label_3:
0x000044fa ldr.w sb, [sp, 0xc] | sb = var_ch;
0x000044fe mov r3, r4 | r3 = r4;
0x00004500 mov r0, r6 | r0 = r6;
0x00004502 mov r2, sb | r2 = sb;
0x00004504 blx 0x1e1c | r0 = fcn_00001e1c ();
0x00004508 cmp r0, 0 |
0x0000450a beq 0x44de |
| } while (r0 == 0);
0x0000450c ldr r1, [r6] | r1 = *(r6);
| if (r1 == 0) {
0x0000450e cbz r1, 0x455e | goto label_5;
| }
0x00004510 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00004512 ldr r2, [r6, 8] | r2 = *((r6 + 8));
0x00004514 add r3, sb | r3 += sb;
0x00004516 cmp r3, r2 |
| if (r3 >= r2) {
0x00004518 bls 0x4522 |
0x0000451a ldr r3, [r6, 0x10] | r3 = *((r6 + 0x10));
| if (r3 == 0) {
0x0000451c cbz r3, 0x4558 | goto label_6;
| }
| label_2:
0x0000451e str r3, [r6, 0x10] | *((r6 + 0x10)) = r3;
0x00004520 b 0x44de | goto label_0;
| }
0x00004522 ldr r3, [r6, 4] | r3 = *((r6 + 4));
0x00004524 mov r2, r7 | r2 = r7;
0x00004526 str r1, [sp] | *(sp) = r1;
0x00004528 mov r0, r5 | r0 = r5;
0x0000452a mov r1, r8 | r1 = r8;
0x0000452c strd sb, r4, [sp, 8] | __asm ("strd sb, r4, [var_ch]");
0x00004530 str r3, [sp, 4] | var_4h = r3;
0x00004532 str r4, [sp, 0x10] | var_10h = r4;
0x00004534 blx 0x1f84 | fcn_00001f84 ();
0x00004538 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0000453a ldr r2, [sp, 0xc] | r2 = var_ch;
0x0000453c add r3, r2 | r3 += r2;
0x0000453e cmp r2, sb |
0x00004540 str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x00004542 ldr r3, [sp, 4] | r3 = var_4h;
0x00004544 str r3, [r6, 4] | *((r6 + 4)) = r3;
0x00004546 ldr r3, [sp, 0x10] | r3 = var_10h;
0x00004548 it eq |
| if (r2 == sb) {
0x0000454a streq r3, [r6, 0x10] | *((r6 + 0x10)) = r3;
| goto label_7;
| }
| if (r2 == sb) {
| label_7:
0x0000454c beq 0x44e0 | goto label_1;
| }
0x0000454e cmp r3, 0 |
| if (r3 != 0) {
0x00004550 bne 0x451e | goto label_2;
| }
0x00004552 ldr r3, [pc, 0x24] |
0x00004554 add r3, pc | r3 = 0x8ad2;
0x00004556 b 0x451e | goto label_2;
| label_6:
0x00004558 ldr r3, [pc, 0x20] |
0x0000455a add r3, pc | r3 = 0x8ada;
0x0000455c b 0x451e | goto label_2;
| label_5:
0x0000455e mov r2, sb | r2 = sb;
0x00004560 mov r0, r6 | r0 = r6;
0x00004562 blx 0x1e0c | fcn_00001e0c ();
0x00004566 b 0x44e0 | goto label_1;
| label_4:
0x00004568 blx 0x1df0 | fcn_00001df0 ();
0x0000456c subs r2, 0x2a | r2 -= 0x2a;
0x0000456e movs r0, r0 |
0x00004570 lsls r0, r3, 3 | r0 = r3 << 3;
0x00004572 movs r0, r0 |
0x00004574 subs r2, 0 |
0x00004576 movs r0, r0 |
0x00004578 asrs r4, r7, 0x1a | r4 = r7 >> 0x1a;
0x0000457a movs r0, r0 |
0x0000457c asrs r6, r5, 0x19 | r6 = r5 >> 0x19;
0x0000457e movs r0, r0 |
0x00004580 ldr.w r1, [r1, 0x15] | r1 = *((r1 + 0x15));
0x00004584 mov r3, r0 | r3 = r0;
| if (r1 != 0) {
0x00004586 cbz r1, 0x458c |
0x00004588 b.w 0x1e70 | void (*0x1e70)() ();
| }
0x0000458c ldr r2, [r0, 0x10] | r2 = *((r0 + 0x10));
0x0000458e cbz r2, 0x4596 |
| while (1) {
0x00004590 movs r0, 0 | r0 = 0;
0x00004592 str r2, [r3, 0x10] | *((r3 + 0x10)) = r2;
0x00004594 bx lr | return;
0x00004596 ldr r2, [pc, 4] |
0x00004598 add r2, pc | r2 = 0x8b3a;
0x0000459a b 0x4590 |
| }
| }
[*] Function printf used 1 times libnxp_iot_agent_common.so