[*] Binary protection state of getfacl
Full RELRO Canary found NX enabled PIE enabled No RPATH No RUNPATH No Symbols
[*] Function strcpy tear down of getfacl
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/getfacl @ 0x25f8 */
| #include <stdint.h>
|
; (fcn) fcn.000025f8 () | void fcn_000025f8 (int16_t arg1) {
| int16_t var_0h;
| int16_t var_4h;
| int16_t var_8h;
| int16_t var_ch;
| int16_t var_10h;
| int32_t var_10h_2;
| int16_t var_18h;
| int32_t var_18h_2;
| int16_t var_20h;
| int16_t var_24h;
| int16_t var_2ch;
| r0 = arg1;
0x000025f8 ldr r2, [pc, 0x3fc] |
0x000025fa push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000025fe add.w r6, r0, 0x1000 | r6 = r0 + 0x1000;
0x00002602 ldr r3, [pc, 0x3f8] | r3 = *(0x29fe);
0x00002604 sub sp, 0x34 |
0x00002606 add r2, pc | r2 = 0x5002;
0x00002608 mov r4, r0 | r4 = r0;
0x0000260a ldr r5, [r6] | r5 = *(r6);
0x0000260c ldr r3, [r2, r3] |
0x0000260e ands sb, r5, 4 | sb = r5 & 4;
0x00002612 ldr r3, [r3] | r3 = *(0x5002);
0x00002614 str r3, [sp, 0x2c] | var_2ch = r3;
0x00002616 mov.w r3, 0 | r3 = 0;
0x0000261a it ne |
| if (sb == r5) {
0x0000261c movne sb, 1 | sb = 1;
| }
0x00002620 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
| if (sb == r5) {
0x00002622 bne 0x2634 |
0x00002624 and r2, r5, 0xa | r2 = r5 & 0xa;
0x00002628 cmp r2, 8 |
0x0000262a itt eq |
| if (r2 == 8) {
0x0000262c clzeq sb, r3 | __asm ("clzeq sb, r3");
| }
| if (r2 != 8) {
0x00002630 lsr.w sb, sb, 5 | sb >>= 5;
| goto label_13;
| }
| }
| if (r3 == 0) {
| label_13:
0x00002634 cbnz r3, 0x263a |
0x00002636 orr r5, r5, 0x100 | r5 |= 0x100;
| }
0x0000263a add.w r8, r4, 0x1020 | r8 = r4 + 0x1020;
0x0000263e mov r0, r4 | r0 = r4;
0x00002640 add.w r8, r8, 0x18 | r8 += 0x18;
0x00002644 mov r1, r8 | r1 = r8;
0x00002646 blx 0xcf8 | lstat64 ();
0x0000264a str r0, [sp] | *(sp) = r0;
0x0000264c cmp r0, 0 |
| if (r0 != 0) {
0x0000264e bne 0x26c0 | goto label_14;
| }
0x00002650 lsls r1, r5, 0x1a | r1 = r5 << 0x1a;
| if (r1 >= r5) {
0x00002652 bpl 0x2696 | goto label_15;
| }
0x00002654 add.w r2, r4, 0x10a0 | r2 = r4 + 0x10a0;
0x00002658 add.w r3, r4, 0x1040 | r3 = r4 + 0x1040;
0x0000265c ldrd r0, r1, [r2] | __asm ("ldrd r0, r1, [r2]");
0x00002660 ldrd ip, r3, [r3, -0x8] | __asm ("ldrd ip, r3, [r3, -0x8]");
0x00002664 orrs.w lr, r0, r1 | lr = r0 | r1;
0x00002668 it eq |
| if (lr == r0) {
0x0000266a strdeq ip, r3, [r2] | __asm ("strdeq ip, r3, [r2]");
| }
| if (lr == r0) {
0x0000266e beq 0x2696 | goto label_15;
| }
0x00002670 cmp r1, r3 |
0x00002672 it eq |
| if (r1 == r3) {
0x00002674 cmpeq r0, ip | __asm ("cmpeq r0, ip");
| }
0x00002676 beq 0x2696 |
| while (1) {
| label_4:
0x00002678 ldr r2, [pc, 0x384] |
0x0000267a ldr r3, [pc, 0x380] | r3 = *(0x29fe);
0x0000267c add r2, pc | r2 = 0x5080;
0x0000267e ldr r3, [r2, r3] | r3 = imp.__aeabi_unwind_cpp_pr0;
0x00002680 ldr r2, [r3] | r2 = imp.__aeabi_unwind_cpp_pr0;
0x00002682 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00002684 eors r2, r3 | r2 ^= r3;
0x00002686 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000268a bne.w 0x2928 | goto label_16;
| }
0x0000268e ldr r0, [sp] | r0 = *(sp);
0x00002690 add sp, 0x34 |
0x00002692 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
| label_15:
0x00002696 ldr r3, [r6, 0x48] | r3 = *((r6 + 0x48));
0x00002698 and r3, r3, 0xf000 | r3 &= 0xf000;
0x0000269c cmp.w r3, 0xa000 |
| if (r3 == 0xa000) {
0x000026a0 beq 0x2738 | goto label_17;
| }
0x000026a2 cmp.w r3, 0x4000 |
| if (r3 == 0x4000) {
0x000026a6 beq 0x2762 | goto label_18;
| }
| label_2:
0x000026a8 mov r2, r5 | r2 = r5;
0x000026aa ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x000026ac ldr r7, [r6, 4] | r7 = *((r6 + 4));
0x000026ae mov r1, r8 | r1 = r8;
0x000026b0 mov r0, r4 | r0 = r4;
0x000026b2 blx r7 | uint32_t (*r7)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x000026b4 lsls r2, r5, 0x1f | r2 = r5 << 0x1f;
0x000026b6 mov fp, r0 |
| if (r2 < r5) {
0x000026b8 bmi 0x26ee | goto label_19;
| }
| label_0:
0x000026ba str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x000026be b 0x2678 |
| }
| label_14:
0x000026c0 ldr r2, [pc, 0x340] |
0x000026c2 ldr r3, [pc, 0x338] | r3 = *(0x29fe);
0x000026c4 add r2, pc | r2 = 0x50cc;
0x000026c6 ldr r3, [r2, r3] | r3 = imp.__aeabi_unwind_cpp_pr0;
0x000026c8 ldr r2, [r3] | r2 = imp.__aeabi_unwind_cpp_pr0;
0x000026ca ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x000026cc eors r2, r3 | r2 ^= r3;
0x000026ce mov.w r3, 0 | r3 = 0;
0x000026d2 itt eq |
| if (r2 == r3) {
0x000026d4 ldrdeq r7, r3, [r6, 4] | __asm ("ldrdeq r7, r3, [r6, 4]");
| }
| if (r2 == r3) {
0x000026d8 orr r2, r5, 0x400 | r2 = r5 | 0x400;
| }
| if (r2 != r3) {
0x000026dc bne.w 0x2928 | goto label_16;
| }
| label_8:
0x000026e0 mov r0, r4 | r0 = r4;
0x000026e2 movs r1, 0 | r1 = 0;
0x000026e4 mov ip, r7 |
0x000026e6 add sp, 0x34 |
0x000026e8 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x000026ec bx ip | return void (*ip)() ();
| label_19:
0x000026ee lsls r3, r5, 0x16 | r3 = r5 << 0x16;
| if (r3 >= r5) {
0x000026f0 bpl 0x2780 | goto label_20;
| }
0x000026f2 cmp.w sb, 0 |
| if (sb == 0) {
0x000026f6 beq 0x26ba | goto label_0;
| }
| label_3:
0x000026f8 ldr r7, [sp] | r7 = *(sp);
0x000026fa cmp r7, 0 |
| if (r7 == 0) {
0x000026fc beq 0x2794 | goto label_21;
| }
0x000026fe ldr r3, [r6, 0x14] | r3 = *((r6 + 0x14));
0x00002700 add.w r0, r4, 0x1000 | r0 = r4 + 0x1000;
0x00002704 adds r0, 0x10 | r0 += 0x10;
0x00002706 ldrd lr, ip, [sp, 0x10] | __asm ("ldrd lr, ip, [var_10h]");
0x0000270a ldrd r1, r2, [sp, 0x18] | __asm ("ldrd r1, r2, [var_18h]");
0x0000270e cmp r0, r3 |
| if (r0 == r3) {
0x00002710 beq 0x2794 | goto label_21;
| }
0x00002712 mov sb, r5 | sb = r5;
0x00002714 mov sl, r4 | sl = r4;
0x00002716 b 0x271e |
| while (ip != r5) {
| label_1:
0x00002718 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x0000271a cmp r0, r3 |
| if (r0 == r3) {
0x0000271c beq 0x278e | goto label_22;
| }
0x0000271e ldrd r4, r5, [r3, 8] | __asm ("ldrd r4, r5, [r3, 8]");
0x00002722 cmp ip, r5 |
0x00002724 it eq |
| if (ip == r5) {
0x00002726 cmpeq lr, r4 | __asm ("cmpeq lr, r4");
| }
0x00002728 bne 0x2718 |
| }
0x0000272a ldrd r4, r5, [r3, 0x10] | __asm ("ldrd r4, r5, [r3, 0x10]");
0x0000272e cmp r2, r5 |
0x00002730 it eq |
| if (r2 != r5) {
0x00002732 cmpeq r1, r4 | __asm ("cmpeq r1, r4");
| goto label_23;
| }
| if (r2 != r5) {
| label_23:
0x00002734 bne 0x2718 | goto label_1;
| }
0x00002736 b 0x26ba | goto label_0;
| label_17:
0x00002738 ands r3, r5, 8 | r3 = r5 & 8;
0x0000273c orr sl, r5, 0x200 | sl = r5 | 0x200;
0x00002740 str r3, [sp] | *(sp) = r3;
| if (r3 != r5) {
0x00002742 bne 0x2752 | goto label_24;
| }
0x00002744 and r3, r5, 0x110 | r3 = r5 & 0x110;
0x00002748 cmp.w r3, 0x110 |
0x0000274c it ne |
| if (r3 != 0x110) {
0x0000274e movne r5, sl | r5 = sl;
| goto label_25;
| }
| if (r3 != 0x110) {
| label_25:
0x00002750 bne 0x26a8 | goto label_2;
| }
| label_24:
0x00002752 mov r1, r8 | r1 = r8;
0x00002754 mov r0, r4 | r0 = r4;
0x00002756 blx 0xd10 | r0 = stat64 ();
0x0000275a cmp r0, 0 |
| if (r0 != 0) {
0x0000275c bne.w 0x2908 | goto label_26;
| }
0x00002760 mov r5, sl | r5 = sl;
| label_18:
0x00002762 add.w r2, r4, 0x10a0 | r2 = r4 + 0x10a0;
0x00002766 add.w r3, r4, 0x1040 | r3 = r4 + 0x1040;
0x0000276a ldrd r0, r1, [r2, -0x8] | __asm ("ldrd r0, r1, [r2, -0x8]");
0x0000276e ldrd r2, r3, [r3, -0x8] | __asm ("ldrd r2, r3, [r3, -0x8]");
0x00002772 strd r0, r1, [sp, 0x18] | __asm ("strd r0, r1, [var_18h]");
0x00002776 strd r2, r3, [sp, 0x10] | __asm ("strd r2, r3, [var_10h]");
0x0000277a movs r3, 1 | r3 = 1;
0x0000277c str r3, [sp] | *(sp) = r3;
0x0000277e b 0x26a8 | goto label_2;
| label_20:
0x00002780 ldr r3, [r6, 0x48] | r3 = *((r6 + 0x48));
0x00002782 and r3, r3, 0xf000 | r3 &= 0xf000;
0x00002786 cmp.w r3, 0x4000 |
| if (r3 != 0x4000) {
0x0000278a bne 0x26ba | goto label_0;
| }
0x0000278c b 0x26f8 | goto label_3;
| label_22:
0x0000278e mov r5, sb | r5 = sb;
0x00002790 mov r4, sl | r4 = sl;
0x00002792 str r7, [sp] | *(sp) = r7;
| label_21:
0x00002794 ldr r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x00002796 cmp r3, 0 |
| if (r3 == 0) {
0x00002798 beq.w 0x28d0 | goto label_27;
| }
| label_7:
0x0000279c mov r0, r4 | r0 = r4;
0x0000279e blx 0xd58 | r0 = opendir ();
0x000027a2 mov r3, r0 | r3 = r0;
0x000027a4 str r0, [sp, 0x20] | var_20h = r0;
0x000027a6 cmp r0, 0 |
| if (r0 == 0) {
0x000027a8 beq.w 0x29b4 | goto label_28;
| }
0x000027ac ldr r2, [sp] | r2 = *(sp);
0x000027ae cmp r2, 0 |
| if (r2 == 0) {
0x000027b0 beq.w 0x292c | goto label_29;
| }
0x000027b4 ldr r0, [r6, 0x14] | r0 = *((r6 + 0x14));
0x000027b6 add.w r7, r4, 0x1000 | r7 = r4 + 0x1000;
0x000027ba adds r7, 0x10 | r7 += 0x10;
| label_9:
0x000027bc ldr r2, [r6, 0x34] | r2 = *((r6 + 0x34));
0x000027be add r1, sp, 8 | r1 += var_8h;
0x000027c0 strd r7, r0, [sp, 8] | __asm ("strd r7, r0, [var_8h]");
0x000027c4 mov.w sl, 0x2f | sl = 0x2f;
0x000027c8 str r1, [r6, 0x14] | *((r6 + 0x14)) = r1;
0x000027ca mov r7, fp | r7 = fp;
0x000027cc str r1, [r0] | *(r0) = r1;
0x000027ce mov.w sb, 0 | sb = 0;
0x000027d2 mov r0, r3 | r0 = r3;
0x000027d4 subs r2, 1 | r2--;
0x000027d6 str r2, [r6, 0x34] | *((r6 + 0x34)) = r2;
0x000027d8 str r5, [sp] | *(sp) = r5;
| label_6:
0x000027da blx 0xe94 | r0 = fcn_00000e94 ();
| if (r0 == 0) {
0x000027de cbz r0, 0x27fa | goto label_30;
| }
| do {
0x000027e0 ldrb r3, [r0, 0x13] | r3 = *((r0 + 0x13));
0x000027e2 add.w r8, r0, 0x13 | r8 = r0 + 0x13;
0x000027e6 cmp r3, 0x2e |
| if (r3 != 0x2e) {
0x000027e8 bne 0x2832 | goto label_31;
| }
0x000027ea ldrb.w r3, [r8, 1] | r3 = *((r8 + 1));
| if (r3 != 0) {
0x000027ee cbnz r3, 0x2832 | goto label_31;
| }
| label_5:
0x000027f0 ldr r0, [sp, 0x20] | r0 = var_20h;
0x000027f2 blx 0xe94 | r0 = fcn_00000e94 ();
0x000027f6 cmp r0, 0 |
0x000027f8 bne 0x27e0 |
| } while (r0 != 0);
| label_30:
0x000027fa ldr r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x000027fc ldr r1, [sp, 8] | r1 = var_8h;
0x000027fe ldr r2, [sp, 0xc] | r2 = var_ch;
0x00002800 adds r3, 1 | r3++;
0x00002802 ldr.w r8, [sp, 0x20] | r8 = var_20h;
0x00002806 ldr r5, [sp] | r5 = *(sp);
0x00002808 str r2, [r1, 4] | *((r1 + 4)) = r2;
0x0000280a str r7, [sp] | *(sp) = r7;
0x0000280c str r1, [r2] | *(r2) = r1;
0x0000280e str r3, [r6, 0x34] | *((r6 + 0x34)) = r3;
| label_11:
0x00002810 mov r0, r8 | r0 = r8;
0x00002812 blx 0xeb8 | r0 = fcn_00000eb8 ();
0x00002816 cmp r0, 0 |
| if (r0 == 0) {
0x00002818 beq.w 0x2678 | goto label_4;
| }
0x0000281c ldrd r8, r3, [r6, 4] | __asm ("ldrd r8, r3, [r6, 4]");
0x00002820 orr r2, r5, 0x400 | r2 = r5 | 0x400;
0x00002824 mov r0, r4 | r0 = r4;
0x00002826 movs r1, 0 | r1 = 0;
0x00002828 blx r8 | uint32_t (*r8)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x0000282a ldr r3, [sp] | r3 = *(sp);
0x0000282c add r3, r0 | r3 += r0;
0x0000282e str r3, [sp] | *(sp) = r3;
0x00002830 b 0x2678 | goto label_4;
| label_31:
0x00002832 ldrb r3, [r0, 0x13] | r3 = *((r0 + 0x13));
0x00002834 cmp r3, 0x2e |
| if (r3 != 0x2e) {
0x00002836 bne 0x2848 | goto label_32;
| }
0x00002838 ldrb.w r3, [r8, 1] | r3 = *((r8 + 1));
0x0000283c cmp r3, 0x2e |
| if (r3 != 0x2e) {
0x0000283e bne 0x2848 | goto label_32;
| }
0x00002840 ldrb.w r3, [r8, 2] | r3 = *((r8 + 2));
0x00002844 cmp r3, 0 |
| if (r3 == 0) {
0x00002846 beq 0x27f0 | goto label_5;
| }
| label_32:
0x00002848 mov r0, r4 | r0 = r4;
0x0000284a blx 0xdec | r0 = fcn_00000dec ();
0x0000284e mov fp, r0 |
0x00002850 mov r0, r8 | r0 = r8;
0x00002852 blx 0xdec | r0 = fcn_00000dec ();
0x00002856 add.w r3, r0, fp | r3 = r0 + fp;
0x0000285a adds r3, 1 | r3++;
0x0000285c cmp.w r3, 0x1000 |
| if (r3 > 0x1000) {
0x00002860 blo 0x2880 |
0x00002862 blx 0xe1c | fcn_00000e1c ();
0x00002866 ldr r2, [sp] | r2 = *(sp);
0x00002868 movs r3, 0x24 | r3 = 0x24;
0x0000286a str r3, [r0] | *(r0) = r3;
0x0000286c movs r1, 0 | r1 = 0;
0x0000286e ldr r3, [r6, 8] | r3 = *((r6 + 8));
0x00002870 mov r0, r4 | r0 = r4;
0x00002872 ldr r5, [r6, 4] | r5 = *((r6 + 4));
0x00002874 orr r2, r2, 0x400 | r2 |= 0x400;
0x00002878 blx r5 | r0 = uint32_t (*r5)(uint32_t, uint32_t, uint32_t, uint32_t) (r0, r1, r2, r3);
0x0000287a add r7, r0 | r7 += r0;
0x0000287c ldr r0, [sp, 0x20] | r0 = var_20h;
0x0000287e b 0x27da | goto label_6;
| }
0x00002880 add.w r0, r4, fp | r0 = r4 + fp;
0x00002884 mov r1, r8 | r1 = r8;
0x00002886 adds r0, 1 | r0++;
0x00002888 strb.w sl, [r4, fp] | *((r4 + fp)) = sl;
0x0000288c blx 0xd4c | strcpy (r0, r1)
0x00002890 ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x00002892 mov r0, r4 | r0 = r4;
0x00002894 adds r3, 1 | r3++;
0x00002896 str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x00002898 bl 0x25f8 | fcn_000025f8 (r0);
0x0000289c ldr r3, [r6, 0xc] | r3 = *((r6 + 0xc));
0x0000289e add r7, r0 | r7 += r0;
0x000028a0 ldr r0, [sp, 0x20] | r0 = var_20h;
0x000028a2 subs r3, 1 | r3--;
0x000028a4 str r3, [r6, 0xc] | *((r6 + 0xc)) = r3;
0x000028a6 strb.w sb, [r4, fp] | *((r4 + fp)) = sb;
0x000028aa cmp r0, 0 |
| if (r0 != 0) {
0x000028ac bne 0x27da | goto label_6;
| }
0x000028ae mov r0, r4 | r0 = r4;
0x000028b0 blx 0xd58 | r0 = opendir ();
0x000028b4 mov r1, r0 | r1 = r0;
0x000028b6 str r0, [sp, 0x20] | var_20h = r0;
0x000028b8 cmp r0, 0 |
| if (r0 == 0) {
0x000028ba beq 0x299e | goto label_33;
| }
0x000028bc ldr r1, [sp, 0x24] | r1 = var_24h;
0x000028be blx 0xda4 | fcn_00000da4 ();
0x000028c2 ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x000028c4 ldr r3, [r3, 4] | r3 = *((r3 + 4));
0x000028c6 str r3, [r6, 0x30] | *((r6 + 0x30)) = r3;
0x000028c8 ldr r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x000028ca subs r3, 1 | r3--;
0x000028cc str r3, [r6, 0x34] | *((r6 + 0x34)) = r3;
0x000028ce b 0x27f0 | goto label_5;
| label_27:
0x000028d0 ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x000028d2 ldr.w sb, [r3] | sb = *(r3);
0x000028d6 add.w r3, r4, 0x1000 | r3 = r4 + 0x1000;
0x000028da adds r3, 0x10 | r3 += 0x10;
0x000028dc cmp sb, r3 |
| if (sb == r3) {
0x000028de beq.w 0x279c | goto label_7;
| }
| label_12:
0x000028e2 ldr.w r0, [sb, 0x18] | r0 = *((sb + 0x18));
0x000028e6 str.w sb, [r6, 0x30] | __asm ("str.w sb, [r6, 0x30]");
0x000028ea blx 0xcc8 | telldir ();
0x000028ee ldr r3, [r6, 0x30] | r3 = *((r6 + 0x30));
0x000028f0 str.w r0, [sb, 0x1c] | __asm ("str.w r0, [sb, 0x1c]");
0x000028f4 ldr r0, [r3, 0x18] | r0 = *((r3 + 0x18));
0x000028f6 blx 0xeb8 | fcn_00000eb8 ();
0x000028fa ldr r3, [r6, 0x34] | r3 = *((r6 + 0x34));
0x000028fc movs r1, 0 | r1 = 0;
0x000028fe ldr r2, [r6, 0x30] | r2 = *((r6 + 0x30));
0x00002900 adds r3, 1 | r3++;
0x00002902 str r1, [r2, 0x18] | *((r2 + 0x18)) = r1;
0x00002904 str r3, [r6, 0x34] | *((r6 + 0x34)) = r3;
0x00002906 b 0x279c | goto label_7;
| label_26:
0x00002908 ldr r2, [pc, 0xfc] |
0x0000290a ldr r3, [pc, 0xf0] | r3 = *(0x29fe);
0x0000290c add r2, pc | r2 = 0x5318;
0x0000290e ldr r3, [r2, r3] | r3 = *(0x5318);
0x00002910 ldr r2, [r3] | r2 = *(0x5318);
0x00002912 ldr r3, [sp, 0x2c] | r3 = var_2ch;
0x00002914 eors r2, r3 | r2 ^= r3;
0x00002916 mov.w r3, 0 | r3 = 0;
0x0000291a itt eq |
| if (r2 == r3) {
0x0000291c ldrdeq r7, r3, [r6, 4] | __asm ("ldrdeq r7, r3, [r6, 4]");
| }
| if (r2 != r3) {
0x00002920 orr r2, r5, 0x600 | r2 = r5 | 0x600;
| goto label_34;
| }
| if (r2 == r3) {
| label_34:
0x00002924 beq.w 0x26e0 | goto label_8;
| }
| label_16:
0x00002928 blx 0xd04 | stack_chk_fail ();
| label_29:
0x0000292c mov r1, r8 | r1 = r8;
0x0000292e mov r0, r4 | r0 = r4;
0x00002930 blx 0xd10 | stat64 ();
0x00002934 ldr.w r8, [sp, 0x20] | r8 = var_20h;
| if (r0 != 0) {
0x00002938 cbnz r0, 0x2992 | goto label_35;
| }
0x0000293a ldr r0, [r6, 0x14] | r0 = *((r6 + 0x14));
0x0000293c add.w r3, r4, 0x10a0 | r3 = r4 + 0x10a0;
0x00002940 add.w r2, r4, 0x1040 | r2 = r4 + 0x1040;
0x00002944 add.w r7, r4, 0x1000 | r7 = r4 + 0x1000;
0x00002948 ldrd sl, sb, [r3, -0x8] | __asm ("ldrd sl, sb, [r3, -0x8]");
0x0000294c adds r7, 0x10 | r7 += 0x10;
0x0000294e ldrd r1, lr, [r2, -0x8] | __asm ("ldrd r1, lr, [r2, -0x8]");
0x00002952 cmp r7, r0 |
0x00002954 ldr.w r8, [sp, 0x20] | r8 = var_20h;
0x00002958 strd sl, sb, [sp, 0x18] | __asm ("strd sl, sb, [var_18h]");
0x0000295c strd r1, lr, [sp, 0x10] | __asm ("strd r1, lr, [var_10h]");
0x00002960 mov r3, r8 | r3 = r8;
| if (r7 == r0) {
0x00002962 beq.w 0x27bc | goto label_9;
| }
0x00002966 mov r2, r0 | r2 = r0;
0x00002968 mov ip, r0 |
0x0000296a str.w r8, [sp] | __asm ("str.w r8, [sp]");
0x0000296e b 0x2976 |
| while (lr != r3) {
| label_10:
0x00002970 ldr r2, [r2, 4] | r2 = *((r2 + 4));
0x00002972 cmp r7, r2 |
| if (r7 == r2) {
0x00002974 beq 0x2998 | goto label_36;
| }
0x00002976 ldrd r0, r3, [r2, 8] | __asm ("ldrd r0, r3, [r2, 8]");
0x0000297a cmp lr, r3 |
0x0000297c it eq |
| if (lr == r3) {
0x0000297e cmpeq r1, r0 | __asm ("cmpeq r1, r0");
| }
0x00002980 bne 0x2970 |
| }
0x00002982 ldrd r0, r3, [r2, 0x10] | __asm ("ldrd r0, r3, [r2, 0x10]");
0x00002986 cmp sb, r3 |
0x00002988 it eq |
| if (sb != r3) {
0x0000298a cmpeq sl, r0 | __asm ("cmpeq sl, r0");
| goto label_37;
| }
| if (sb != r3) {
| label_37:
0x0000298c bne 0x2970 | goto label_10;
| }
0x0000298e ldr.w r8, [sp] | r8 = *(sp);
| label_35:
0x00002992 str.w fp, [sp] | __asm ("str.w fp, [sp]");
0x00002996 b 0x2810 | goto label_11;
| label_36:
0x00002998 mov r3, r8 | r3 = r8;
0x0000299a mov r0, ip | r0 = ip;
0x0000299c b 0x27bc | goto label_9;
| label_33:
0x0000299e ldr r5, [sp] | r5 = *(sp);
0x000029a0 mov r0, r4 | r0 = r4;
0x000029a2 ldrd r4, r3, [r6, 4] | __asm ("ldrd r4, r3, [r6, 4]");
0x000029a6 orr r2, r5, 0x400 | r2 = r5 | 0x400;
0x000029aa blx r4 | uint32_t (*r4)(uint32_t, uint32_t) (r0, r2);
0x000029ac mov r3, r7 | r3 = r7;
0x000029ae add r3, r0 | r3 += r0;
0x000029b0 str r3, [sp] | *(sp) = r3;
0x000029b2 b 0x2678 | goto label_4;
| label_28:
0x000029b4 str r0, [sp, 4] | var_4h = r0;
0x000029b6 blx 0xe1c | r0 = fcn_00000e1c ();
0x000029ba ldr r2, [r0] | r2 = *(r0);
0x000029bc cmp r2, 0x17 |
| if (r2 == 0x17) {
0x000029be bne 0x29d6 |
0x000029c0 ldr r2, [r6, 0x30] | r2 = *((r6 + 0x30));
0x000029c2 ldr.w sb, [r2] | sb = *(r2);
0x000029c6 add.w r2, r4, 0x1000 | r2 = r4 + 0x1000;
0x000029ca adds r2, 0x10 | r2 += 0x10;
0x000029cc cmp sb, r2 |
| if (sb == r2) {
0x000029ce beq 0x29e2 | goto label_38;
| }
0x000029d0 ldr r3, [sp, 4] | r3 = var_4h;
0x000029d2 str r3, [r6, 0x34] | *((r6 + 0x34)) = r3;
0x000029d4 b 0x28e2 | goto label_12;
| }
0x000029d6 cmp r2, 0x14 |
| if (r2 == 0x14) {
0x000029d8 beq.w 0x26ba | goto label_0;
| }
0x000029dc cmp r2, 2 |
| if (r2 == 2) {
0x000029de beq.w 0x26ba | goto label_0;
| }
| label_38:
0x000029e2 ldrd r7, r3, [r6, 4] | __asm ("ldrd r7, r3, [r6, 4]");
0x000029e6 orr r2, r5, 0x400 | r2 = r5 | 0x400;
0x000029ea mov r0, r4 | r0 = r4;
0x000029ec movs r1, 0 | r1 = 0;
0x000029ee blx r7 | r0 = uint32_t (*r7)(uint32_t, uint32_t, uint32_t) (r0, r1, r2);
0x000029f0 add.w r3, fp, r0 | r3 = fp + r0;
0x000029f4 str r3, [sp] | *(sp) = r3;
0x000029f6 b 0x2678 | goto label_4;
| }
[*] Function strcpy used 2 times getfacl