[*] Binary protection state of libnl-3.so.200.26.0
Full RELRO Canary found NX enabled DSO No RPATH No RUNPATH No Symbols
[*] Function sprintf tear down of libnl-3.so.200.26.0
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/lib/libnl-3.so.200.26.0 @ 0x8b88 */
| #include <stdint.h>
|
; (fcn) fcn.00008b88 () | void fcn_00008b88 (int16_t arg_38h, int16_t arg_3ch, int16_t arg1, int16_t arg2, int16_t arg3, int16_t arg4) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| r3 = arg4;
0x00008b88 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00008b8c mov r4, r2 | r4 = r2;
0x00008b8e ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00008b90 sub sp, 0x14 |
0x00008b92 mov r6, r1 | r6 = r1;
0x00008b94 ldr r5, [pc, 0x204] |
0x00008b96 subs r2, 1 | r2--;
0x00008b98 cmp r2, 1 |
0x00008b9a add r5, pc | r5 = 0x1193a;
| if (r2 < 1) {
0x00008b9c bls 0x8be8 | goto label_5;
| }
0x00008b9e ldr r3, [pc, 0x200] |
0x00008ba0 ldr r3, [r5, r3] | r3 = *((r5 + r3));
0x00008ba2 ldr r3, [r3] | r3 = *(0x8da2);
0x00008ba4 cmp r3, 1 |
0x00008ba6 bgt 0x8bb0 |
| while (r4 != 1) {
| label_0:
0x00008ba8 movs r0, 0 | r0 = 0;
0x00008baa add sp, 0x14 |
0x00008bac pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00008bb0 blx 0x5f10 | fcn_00005f10 ();
0x00008bb4 ldr r2, [pc, 0x1ec] | r2 = *(0x8da4);
0x00008bb6 mov r4, r0 | r4 = r0;
0x00008bb8 ldr r3, [pc, 0x1ec] |
0x00008bba movw r1, 0x351 | r1 = 0x351;
0x00008bbe ldr r7, [r0] | r7 = *(r0);
0x00008bc0 ldr r2, [r5, r2] | r2 = *((r5 + r2));
0x00008bc2 add r3, pc |
0x00008bc4 add.w r3, r3, 0x128 | r3 = 0x11a96;
0x00008bc8 strd r3, r6, [sp, 4] | __asm ("strd r3, r6, [var_4h]");
0x00008bcc ldr r3, [pc, 0x1dc] |
0x00008bce ldr r0, [r2] | r0 = *(0x8da4);
0x00008bd0 ldr r2, [pc, 0x1dc] |
0x00008bd2 str r1, [sp] | *(sp) = r1;
0x00008bd4 add r3, pc | r3 = 0x11984;
0x00008bd6 movs r1, 1 | r1 = 1;
0x00008bd8 add r2, pc | r2 = 0x1198c;
0x00008bda blx 0x5ff4 | fcn_00005ff4 ();
0x00008bde movs r0, 0 | r0 = 0;
0x00008be0 str r7, [r4] | *(r4) = r7;
0x00008be2 add sp, 0x14 |
0x00008be4 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_5:
0x00008be8 mov r7, r0 | r7 = r0;
0x00008bea mov r8, r3 | r8 = r3;
0x00008bec blx 0x6388 | r0 = fcn_00006388 ();
0x00008bf0 mov r5, r0 | r5 = r0;
| if (r0 != 0) {
0x00008bf2 cbz r0, 0x8c4c |
0x00008bf4 ldr r3, [sp, 0x38] | r3 = *(arg_38h);
0x00008bf6 cmp r3, 0 |
| if (r3 == 0) {
0x00008bf8 beq 0x8cae | goto label_6;
| }
0x00008bfa ldr r3, [r0, 4] | r3 = *((r0 + 4));
0x00008bfc ldr r3, [r3, 0x28] | r3 = *((r3 + 0x28));
0x00008bfe cmp r3, 0 |
| if (r3 == 0) {
0x00008c00 beq 0x8ca4 | goto label_7;
| }
0x00008c02 blx 0x5f98 | fcn_00005f98 ();
0x00008c06 mov r1, r6 | r1 = r6;
0x00008c08 mov sb, r0 | sb = r0;
0x00008c0a mov r0, r5 | r0 = r5;
0x00008c0c blx 0x5f8c | r0 = fcn_00005f8c ();
0x00008c10 mov sl, r0 | sl = r0;
0x00008c12 mov fp, r1 |
| label_2:
0x00008c14 mov r1, r6 | r1 = r6;
0x00008c16 mov r0, r5 | r0 = r5;
0x00008c18 blx 0x5e4c | r0 = fcn_00005e4c ();
| if (r0 != 0) {
0x00008c1c cbnz r0, 0x8c7c | goto label_8;
| }
0x00008c1e ldr r3, [sp, 0x3c] | r3 = *(arg_3ch);
0x00008c20 mov r0, r7 | r0 = r7;
0x00008c22 mov r2, r6 | r2 = r6;
0x00008c24 mov r1, sb | r1 = sb;
0x00008c26 str.w sl, [sp] | __asm ("str.w sl, [sp]");
0x00008c2a str r3, [sp, 0xc] | var_ch = r3;
0x00008c2c movs r3, 5 | r3 = 5;
0x00008c2e str r3, [sp, 8] | var_8h = r3;
0x00008c30 str.w fp, [sp, 4] | __asm ("str.w fp, [var_4h]");
0x00008c34 ldr r3, [sp, 0x38] | r3 = *(arg_38h);
0x00008c36 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00008c38 mov r0, sb | r0 = sb;
0x00008c3a blx 0x5fa4 | fcn_00005fa4 ();
| label_1:
0x00008c3e mov r0, r5 | r0 = r5;
0x00008c40 blx 0x5fa4 | fcn_00005fa4 ();
0x00008c44 movs r0, 0 | r0 = 0;
0x00008c46 add sp, 0x14 |
0x00008c48 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| }
0x00008c4c ldr r4, [r4, 4] | r4 = *((r4 + 4));
0x00008c4e cmp r4, 1 |
0x00008c50 bne 0x8ba8 |
| }
0x00008c52 mov r1, r6 | r1 = r6;
0x00008c54 mov r0, r7 | r0 = r7;
0x00008c56 blx 0x5ee8 | vasprintf_chk ()
0x00008c5a ldr r3, [sp, 0x38] | r3 = *(arg_38h);
0x00008c5c cmp r3, 0 |
| if (r3 == 0) {
0x00008c5e beq.w 0x8d6e | goto label_9;
| }
0x00008c62 ldr r3, [sp, 0x3c] | r3 = *(arg_3ch);
0x00008c64 mov r2, r6 | r2 = r6;
0x00008c66 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00008c6a mov r1, r5 | r1 = r5;
0x00008c6c mov r0, r7 | r0 = r7;
0x00008c6e strd r4, r3, [sp, 8] | __asm ("strd r4, r3, [var_8h]");
0x00008c72 vstr d16, [sp] | __asm ("vstr d16, [sp]");
0x00008c76 ldr r3, [sp, 0x38] | r3 = *(arg_38h);
0x00008c78 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00008c7a b 0x8ba8 | goto label_0;
| label_8:
0x00008c7c mov r0, sb | r0 = sb;
0x00008c7e blx 0x5fa4 | fcn_00005fa4 ();
0x00008c82 mov r0, r5 | r0 = r5;
0x00008c84 blx 0x6000 | fcn_00006000 ();
0x00008c88 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00008c8a cmp r2, 2 |
| if (r2 == 2) {
0x00008c8c beq 0x8d3c | goto label_10;
| }
| label_3:
0x00008c8e cmp r2, 1 |
| if (r2 != 1) {
0x00008c90 bne 0x8ba8 | goto label_0;
| }
0x00008c92 mov r1, r6 | r1 = r6;
0x00008c94 mov r0, r7 | r0 = r7;
0x00008c96 blx 0x5ee8 | vasprintf_chk ()
0x00008c9a ldr r3, [sp, 0x38] | r3 = *(arg_38h);
0x00008c9c orrs.w r3, r3, r8 | r3 |= r8;
| if (r3 == r3) {
0x00008ca0 beq 0x8c3e | goto label_1;
| }
0x00008ca2 b 0x8cfe | goto label_11;
| label_7:
0x00008ca4 mov.w sl, 0 | sl = 0;
0x00008ca8 mov sb, r3 | sb = r3;
0x00008caa mov fp, sl |
0x00008cac b 0x8c14 | goto label_2;
| label_6:
0x00008cae mov r1, r6 | r1 = r6;
0x00008cb0 blx 0x5e4c | r0 = fcn_00005e4c ();
| if (r0 != 0) {
0x00008cb4 cbnz r0, 0x8cc8 | goto label_12;
| }
0x00008cb6 cmp.w r8, 0 |
| if (r8 == 0) {
0x00008cba beq 0x8c3e | goto label_1;
| }
0x00008cbc ldr r3, [sp, 0x3c] | r3 = *(arg_3ch);
0x00008cbe movs r2, 5 | r2 = 5;
0x00008cc0 mov r0, r7 | r0 = r7;
0x00008cc2 mov r1, r5 | r1 = r5;
0x00008cc4 blx r8 | uint32_t (*r8)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00008cc6 b 0x8c3e | goto label_1;
| label_12:
0x00008cc8 ldr r0, [sp, 0x38] | r0 = *(arg_38h);
0x00008cca blx 0x5fa4 | fcn_00005fa4 ();
0x00008cce mov r0, r5 | r0 = r5;
0x00008cd0 blx 0x6000 | fcn_00006000 ();
0x00008cd4 ldr r2, [r4, 4] | r2 = *((r4 + 4));
0x00008cd6 cmp r2, 2 |
| if (r2 != 2) {
0x00008cd8 bne 0x8c8e | goto label_3;
| }
0x00008cda cmp.w r8, 0 |
| if (r8 == 0) {
0x00008cde beq 0x8d82 | goto label_13;
| }
0x00008ce0 ldr r3, [sp, 0x3c] | r3 = *(arg_3ch);
0x00008ce2 mov r1, r5 | r1 = r5;
0x00008ce4 mov r0, r7 | r0 = r7;
0x00008ce6 blx r8 | uint32_t (*r8)(uint32_t, uint32_t, uint32_t) (r0, r1, r3);
| label_4:
0x00008ce8 mov r0, r5 | r0 = r5;
0x00008cea blx 0x5fa4 | fcn_00005fa4 ();
0x00008cee ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00008cf0 cmp r3, 1 |
| if (r3 != 1) {
0x00008cf2 bne.w 0x8ba8 | goto label_0;
| }
0x00008cf6 mov r1, r6 | r1 = r6;
0x00008cf8 mov r0, r7 | r0 = r7;
0x00008cfa blx 0x5ee8 | vasprintf_chk ()
| label_11:
0x00008cfe mov r1, r6 | r1 = r6;
0x00008d00 mov r0, r5 | r0 = r5;
0x00008d02 blx 0x5f8c | r0 = fcn_00005f8c ();
0x00008d06 orrs.w r2, r0, r1 | r2 = r0 | r1;
0x00008d0a mov r3, r1 | r3 = r1;
0x00008d0c ldr r1, [sp, 0x38] | r1 = *(arg_38h);
0x00008d0e ite ne |
| if (r2 == r0) {
0x00008d10 movne r2, 1 | r2 = 1;
| }
| if (r2 != r0) {
0x00008d12 moveq r2, 0 | r2 = 0;
| }
0x00008d14 cmp r1, 0 |
0x00008d16 ite eq |
| if (r1 != 0) {
0x00008d18 moveq r1, 0 | r1 = 0;
| }
| if (r1 == 0) {
0x00008d1a andne r1, r2, 1 | r1 = r2 & 1;
| }
| if (r1 != 0) {
0x00008d1e cbnz r1, 0x8d56 | goto label_14;
| }
0x00008d20 cmp.w r8, 0 |
0x00008d24 ite eq |
| if (r8 != 0) {
0x00008d26 moveq r2, 0 | r2 = 0;
| }
| if (r8 == 0) {
0x00008d28 andne r2, r2, 1 | r2 &= 1;
| }
0x00008d2c cmp r2, 0 |
| if (r2 == 0) {
0x00008d2e beq 0x8c3e | goto label_1;
| }
0x00008d30 ldr r3, [sp, 0x3c] | r3 = *(arg_3ch);
0x00008d32 mov r1, r6 | r1 = r6;
0x00008d34 mov r0, r7 | r0 = r7;
0x00008d36 movs r2, 5 | r2 = 5;
0x00008d38 blx r8 | uint32_t (*r8)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00008d3a b 0x8c3e | goto label_1;
| label_10:
0x00008d3c ldr r3, [sp, 0x3c] | r3 = *(arg_3ch);
0x00008d3e mov r1, r5 | r1 = r5;
0x00008d40 vmov.i32 d16, 0 | __asm ("vmov.i32 d16, 0");
0x00008d44 mov r0, r7 | r0 = r7;
0x00008d46 str r2, [sp, 8] | var_8h = r2;
0x00008d48 movs r2, 0 | r2 = 0;
0x00008d4a str r3, [sp, 0xc] | var_ch = r3;
0x00008d4c vstr d16, [sp] | __asm ("vstr d16, [sp]");
0x00008d50 ldr r3, [sp, 0x38] | r3 = *(arg_38h);
0x00008d52 blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00008d54 b 0x8ce8 | goto label_4;
| label_14:
0x00008d56 ldr r4, [sp, 0x3c] | r4 = *(arg_3ch);
0x00008d58 mov r2, r6 | r2 = r6;
0x00008d5a str r3, [sp, 4] | var_4h = r3;
0x00008d5c movs r3, 5 | r3 = 5;
0x00008d5e str r0, [sp] | *(sp) = r0;
0x00008d60 mov r1, r5 | r1 = r5;
0x00008d62 str r3, [sp, 8] | var_8h = r3;
0x00008d64 mov r0, r7 | r0 = r7;
0x00008d66 ldr r3, [sp, 0x38] | r3 = *(arg_38h);
0x00008d68 str r4, [sp, 0xc] | var_ch = r4;
0x00008d6a blx r3 | uint32_t (*r3)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00008d6c b 0x8c3e | goto label_1;
| label_9:
0x00008d6e cmp.w r8, 0 |
| if (r8 == 0) {
0x00008d72 beq.w 0x8ba8 | goto label_0;
| }
0x00008d76 ldr r3, [sp, 0x3c] | r3 = *(arg_3ch);
0x00008d78 mov r2, r4 | r2 = r4;
0x00008d7a mov r1, r6 | r1 = r6;
0x00008d7c mov r0, r7 | r0 = r7;
0x00008d7e blx r8 | uint32_t (*r8)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x00008d80 b 0x8ba8 | goto label_0;
| label_13:
0x00008d82 mov r0, r5 | r0 = r5;
0x00008d84 blx 0x5fa4 | fcn_00005fa4 ();
0x00008d88 ldr r3, [r4, 4] | r3 = *((r4 + 4));
0x00008d8a cmp r3, 1 |
| if (r3 != 1) {
0x00008d8c bne.w 0x8ba8 | goto label_0;
| }
0x00008d90 mov r1, r6 | r1 = r6;
0x00008d92 mov r0, r7 | r0 = r7;
0x00008d94 blx 0x5ee8 | vasprintf_chk ()
0x00008d98 b 0x8c3e | goto label_1;
| }
[*] Function sprintf used 5 times libnl-3.so.200.26.0