[*] Binary protection state of liblldpctl.so.4.9.1
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function fprintf tear down of liblldpctl.so.4.9.1
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/liblldpctl.so.4.9.1 @ 0x6d78 */
| #include <stdint.h>
|
; (fcn) fcn.00006d78 () | void fcn_00006d78 (int16_t arg1) {
| int16_t var_0h_7;
| int16_t var_8h;
| r0 = arg1;
0x00006d78 stcpl p4, c15, [r0], {0x4f} | __asm ("stcpl p4, c15, [r0], {0x4f}");
0x00006d7c push {r1, r2, r3} |
0x00006d7e push {r4, r5, r6, r7, lr} |
0x00006d80 sub.w ip, sp, ip |
0x00006d84 str.w r0, [ip, 0xfd4] | __asm ("str.w r0, [ip, 0xfd4]");
0x00006d88 ldr r2, [pc, 0xac] |
0x00006d8a sub sp, 0x18 |
0x00006d8c ldr r3, [pc, 0xac] | r3 = *(0x6e3c);
0x00006d8e add r7, sp, 8 | r7 += var_8h;
0x00006d90 add r2, pc | r2 = 0xdbcc;
0x00006d92 ldr r6, [r7, 0x24] | r6 = *((r7 + 0x24));
0x00006d94 ldr r3, [r2, r3] |
0x00006d96 ldr r3, [r3] | r3 = *(0xdbcc);
0x00006d98 str r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
0x00006d9a mov.w r3, 0 | r3 = 0;
0x00006d9e cmp r6, 0 |
| if (r6 == 0) {
0x00006da0 beq 0x6e1c | goto label_1;
| }
0x00006da2 add.w r3, r7, 0x28 | r3 = r7 + 0x28;
0x00006da6 mov r5, r0 | r5 = r0;
0x00006da8 str r3, [r7, 8] | *((r7 + 8)) = r3;
0x00006daa blx 0x24fc | r0 = fcn_000024fc ();
0x00006dae mov r4, r0 | r4 = r0;
0x00006db0 ldr r0, [r0] | r0 = *(r0);
0x00006db2 blx 0x248c | vfprintf_chk ()
0x00006db6 ldr r2, [pc, 0x88] |
0x00006db8 mov r3, r6 | r3 = r6;
0x00006dba str r0, [sp] | *(sp) = r0;
0x00006dbc movs r1, 1 | r1 = 1;
0x00006dbe adds r0, r7, 4 | r0 = r7 + 4;
0x00006dc0 add r2, pc | r2 = 0xdc06;
0x00006dc2 blx 0x2474 | strerror (r0);
0x00006dc6 adds r0, 1 | r0++;
| if (r0 == 1) {
0x00006dc8 beq 0x6dfc | goto label_2;
| }
0x00006dca movs r0, 4 | r0 = 4;
0x00006dcc ldrd r2, r3, [r7, 4] | __asm ("ldrd r2, r3, [r7, 4]");
0x00006dd0 mov r1, r5 | r1 = r5;
0x00006dd2 bl 0x6a4c | fcn_00006a4c (r0, r1, r2, r3);
0x00006dd6 ldr r0, [r7, 4] | r0 = *((r7 + 4));
0x00006dd8 blx 0x23b0 | fcn_000023b0 ();
| do {
| label_0:
0x00006ddc ldr r2, [pc, 0x64] |
0x00006dde ldr r3, [pc, 0x5c] | r3 = *(0x6e3e);
0x00006de0 add r2, pc | r2 = 0xdc28;
0x00006de2 ldr r3, [r2, r3] | r3 = *(0xdc28);
0x00006de4 ldr r2, [r3] | r2 = *(0xdc28);
0x00006de6 ldr r3, [r7, 0xc] | r3 = *((r7 + 0xc));
0x00006de8 eors r2, r3 | r2 ^= r3;
0x00006dea mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x00006dee bne 0x6e34 | goto label_3;
| }
0x00006df0 adds r7, 0x10 | r7 += 0x10;
0x00006df2 mov sp, r7 |
0x00006df4 pop.w {r4, r5, r6, r7, lr} |
0x00006df8 add sp, 0xc |
0x00006dfa bx lr | return;
| label_2:
0x00006dfc mov r1, r5 | r1 = r5;
0x00006dfe mov r2, r6 | r2 = r6;
0x00006e00 ldr r3, [r7, 8] | r3 = *((r7 + 8));
0x00006e02 movs r0, 4 | r0 = 4;
0x00006e04 bl 0x6a4c | fcn_00006a4c (r0, r1, r2, r3);
0x00006e08 ldr r0, [r4] | r0 = *(r4);
0x00006e0a blx 0x248c | vfprintf_chk ()
0x00006e0e ldr r1, [pc, 0x38] |
0x00006e10 mov r2, r0 | r2 = r0;
0x00006e12 movs r0, 4 | r0 = 4;
0x00006e14 add r1, pc | r1 = 0xdc62;
0x00006e16 bl 0x6c64 | fcn_00006c64 (r0, r1);
0x00006e1a b 0x6ddc |
| } while (1);
| label_1:
0x00006e1c blx 0x24fc | r0 = fcn_000024fc ();
0x00006e20 ldr r0, [r0] | r0 = *(r0);
0x00006e22 blx 0x248c | vfprintf_chk ()
0x00006e26 ldr r1, [pc, 0x24] |
0x00006e28 mov r2, r0 | r2 = r0;
0x00006e2a movs r0, 4 | r0 = 4;
0x00006e2c add r1, pc | r1 = 0xdc7e;
0x00006e2e bl 0x6c64 | fcn_00006c64 (r0, r1);
0x00006e32 b 0x6ddc | goto label_0;
| label_3:
0x00006e34 blx 0x23f0 | unlink (r0);
0x00006e38 strh r4, [r4, 8] | *((r4 + 8)) = r4;
0x00006e3a movs r0, r0 |
0x00006e3c lsls r4, r0, 4 | r4 = r0 << 4;
0x00006e3e movs r0, r0 |
0x00006e40 ldrh r4, [r6, r3] | r4 = *((r6 + r3));
0x00006e42 movs r0, r0 |
0x00006e44 strh r4, [r2, 6] | *((r2 + 6)) = r4;
0x00006e46 movs r0, r0 |
0x00006e48 ldrh r4, [r4, r2] | r4 = *((r4 + r2));
0x00006e4a movs r0, r0 |
0x00006e4c ldrh r4, [r1, r2] | r4 = *((r1 + r2));
0x00006e4e movs r0, r0 |
| }
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/liblldpctl.so.4.9.1 @ 0x6f44 */
| #include <stdint.h>
|
; (fcn) fcn.00006f44 () | void fcn_00006f44 (int16_t arg_3e0h, int16_t arg1) {
| int16_t var_0h_5;
| int16_t var_0h;
| int16_t var_0h_6;
| int16_t var_8h_2;
| r0 = arg1;
0x00006f44 stcpl p4, c15, [r0], {0x4f} | __asm ("stcpl p4, c15, [r0], {0x4f}");
0x00006f48 push {r1, r2, r3} |
0x00006f4a push.w {r4, r5, r6, r7, r8, lr} |
0x00006f4e sub.w ip, sp, ip |
0x00006f52 str.w r0, [ip, 0xfdc] | __asm ("str.w r0, [ip, 0xfdc]");
0x00006f56 ldr r2, [pc, 0x80] |
0x00006f58 sub sp, 0xc |
0x00006f5a ldr r3, [pc, 0x80] | r3 = *(0x6fde);
0x00006f5c ldr r5, [pc, 0x80] |
0x00006f5e add r7, sp, 0 | r7 += var_0h_5;
0x00006f60 add r2, pc | r2 = 0xdf3e;
0x00006f62 ldr.w r8, [r7, 0x24] | r8 = *((r7 + 0x24));
0x00006f64 strh r4, [r4] | *(r4) = r4;
0x00006f66 ldr r3, [r2, r3] |
0x00006f68 mov r6, r0 | r6 = r0;
0x00006f6a add r5, pc | r5 = 0xdf4e;
0x00006f6c ldr r3, [r3] | r3 = *(0xdf3e);
0x00006f6e str r3, [r7, 4] | *((r7 + 4)) = r3;
0x00006f70 mov.w r3, 0 | r3 = 0;
0x00006f72 lsls r0, r0, 0xc | r0 <<= 0xc;
0x00006f74 ldr r3, [r5, 8] | r3 = *(0xdf56);
0x00006f76 cmp r3, 1 |
| if (r3 <= 1) {
0x00006f78 ble 0x6f9a | goto label_3;
| }
0x00006f7a ldr r3, [r5, 0x10] | r3 = *((r5 + 0x10));
| if (r3 == 0) {
0x00006f7c cbz r3, 0x6fa2 | goto label_4;
| }
0x00006f7e add.w r4, r5, 0x10 | r4 = r5 + 0x10;
0x00006f82 adds r5, 0xb0 | r5 += 0xb0;
0x00006f84 b 0x6f92 |
| while (r0 != 0) {
0x00006f86 mov r1, r6 | r1 = r6;
0x00006f88 blx 0x2358 | r0 = fcn_00002358 ();
| if (r0 == 0) {
0x00006f8c cbz r0, 0x6fa2 | goto label_4;
| }
0x00006f8e cmp r4, r5 |
| if (r4 == r5) {
0x00006f90 beq 0x6f9a | goto label_3;
| }
0x00006f92 ldr r0, [r4], 4 | r0 = *(r4);
| r4 += 4;
0x00006f96 cmp r0, 0 |
0x00006f98 bne 0x6f86 |
| }
| label_3:
0x00006f9a ldr r3, [pc, 0x48] |
0x00006f9c add r3, pc |
0x00006f9e ldr r3, [r3] | r3 = *(0xdf86);
| if (r3 != 0) {
0x00006fa0 cbz r3, 0x6fb2 |
| label_4:
0x00006fa2 add.w r3, r7, 0x28 | r3 = r7 + 0x28;
0x00006fa6 mov r2, r8 | r2 = r8;
0x00006fa8 mov r1, r6 | r1 = r6;
0x00006faa movs r0, 7 | r0 = 7;
0x00006fac str r3, [r7] | *(r7) = r3;
0x00006fae bl 0x6a4c | fcn_00006a4c (r0, r1, r2, r3);
| }
0x00006fb2 ldr r2, [pc, 0x34] |
0x00006fb4 ldr r3, [pc, 0x24] | r3 = *(0x6fdc);
0x00006fb6 add r2, pc | r2 = 0xdfa4;
0x00006fb8 ldr r3, [r2, r3] | r3 = *(0xdfa4);
0x00006fba ldr r2, [r3] | r2 = *(0xdfa4);
0x00006fbc ldr r3, [r7, 4] | r3 = *((r7 + 4));
0x00006fbe eors r2, r3 | r2 ^= r3;
0x00006fc0 mov.w r3, 0 | r3 = 0;
| if (r2 == r3) {
0x00006fc4 bne 0x6fd2 |
0x00006fc6 adds r7, 0xc | r7 += 0xc;
0x00006fc8 mov sp, r7 |
0x00006fca pop.w {r4, r5, r6, r7, r8, lr} |
0x00006fce add sp, 0xc |
0x00006fd0 bx lr | return;
| }
0x00006fd2 blx 0x23f0 | unlink (r0);
0x00006fd6 nop |
0x00006fd8 ldrb r4, [r2, 0x1d] | r4 = *((r2 + 0x1d));
0x00006fda movs r0, r0 |
0x00006fdc lsls r4, r0, 4 | r4 = r0 << 4;
0x00006fde movs r0, r0 |
0x00006fe0 str r1, [sp, 0xa8] | var_0h = r1;
0x00006fe2 movs r0, r0 |
0x00006fe4 str r0, [sp, 0x3e0] | *(arg_3e0h) = r0;
0x00006fe6 movs r0, r0 |
0x00006fe8 ldrb r6, [r7, 0x1b] | r6 = *((r7 + 0x1b));
0x00006fea movs r0, r0 |
0x00006fec mov.w ip, 0x1000 |
0x00006ff0 push {r4, r5, r6, r7, lr} |
0x00006ff2 sub.w ip, sp, ip |
0x00006ff6 str.w r0, [ip, 0xfe0] | __asm ("str.w r0, [ip, 0xfe0]");
0x00006ffa sub sp, 0xc |
0x00006ffc mov r5, r1 | r5 = r1;
0x00006ffe add r7, sp, 8 | r7 += var_8h_2;
0x00007000 mov r4, r0 | r4 = r0;
0x00007002 blx 0x24fc | r0 = fcn_000024fc ();
0x00007006 ldr r0, [r0] | r0 = *(r0);
| if (r5 == 0) {
0x00007008 cbz r5, 0x703c | goto label_5;
| }
| if (r0 != 0) {
0x0000700a cbnz r0, 0x7022 | goto label_6;
| }
| if (r4 == 0) {
0x0000700c cbz r4, 0x7052 | goto label_7;
| }
| label_1:
0x0000700e ldr r2, [pc, 0x54] |
0x00007010 mov r3, r5 | r3 = r5;
0x00007012 mov r1, r4 | r1 = r4;
0x00007014 movs r0, 2 | r0 = 2;
0x00007016 add r2, pc | r2 = 0xe080;
0x00007018 bl 0x6c64 | fcn_00006c64 (r0, r1);
| do {
| label_0:
0x0000701c movs r0, 1 | r0 = 1;
0x0000701e blx 0x24d8 | fcn_000024d8 ();
| if (r4 == 0) {
| label_6:
0x00007022 cbz r4, 0x7058 | goto label_8;
| }
| label_2:
0x00007024 blx 0x248c | vfprintf_chk ()
0x00007028 ldr r2, [pc, 0x3c] |
0x0000702a mov r6, r0 | r6 = r0;
0x0000702c mov r3, r5 | r3 = r5;
0x0000702e mov r1, r4 | r1 = r4;
0x00007030 movs r0, 2 | r0 = 2;
0x00007032 str r6, [sp] | *(sp) = r6;
0x00007034 add r2, pc | r2 = 0xe0a0;
0x00007036 bl 0x6c64 | fcn_00006c64 (r0, r1);
0x0000703a b 0x701c |
| } while (1);
| label_5:
0x0000703c cbz r4, 0x705e |
| while (1) {
0x0000703e blx 0x248c | vfprintf_chk ()
0x00007042 ldr r2, [pc, 0x28] |
0x00007044 mov r3, r0 | r3 = r0;
0x00007046 mov r1, r4 | r1 = r4;
0x00007048 movs r0, 2 | r0 = 2;
0x0000704a add r2, pc | r2 = 0xe0bc;
0x0000704c bl 0x6c64 | fcn_00006c64 (r0, r1);
0x00007050 b 0x701c | goto label_0;
| label_7:
0x00007052 ldr r4, [pc, 0x1c] |
0x00007054 add r4, pc | r4 = 0xe0ca;
0x00007056 b 0x700e | goto label_1;
| label_8:
0x00007058 ldr r4, [pc, 0x18] |
0x0000705a add r4, pc | r4 = 0xe0d2;
0x0000705c b 0x7024 | goto label_2;
0x0000705e ldr r4, [pc, 0x18] |
0x00007060 add r4, pc | r4 = 0xe0de;
0x00007062 b 0x703e |
| }
| }
[*] Function fprintf used 6 times liblldpctl.so.4.9.1