[*] Binary protection state of busctl
Full RELRO Canary found NX enabled PIE enabled RPATH No RUNPATH No Symbols
[*] Function strcpy tear down of busctl
; assembly | /* r2dec pseudo code output */
| /* /logs/firmware/patool_extraction/rootfs.img_unblob_extracted/rootfs.img_extract/0-80367616.squashfs_v4_le_extract/usr/bin/busctl @ 0x6624 */
| #include <stdint.h>
|
| #define BIT_MASK(t,v) ((t)(-((v)!= 0)))&(((t)-1)>>((sizeof(t)*CHAR_BIT)-(v)))
|
; (fcn) fcn.00006624 () | void fcn_00006624 (int16_t arg_140h, int16_t arg_258h, int16_t arg1, int16_t arg2, int16_t arg3) {
| int16_t var_0h;
| char * dest;
| int16_t var_18h;
| r0 = arg1;
| r1 = arg2;
| r2 = arg3;
| label_6:
0x00002ec8 bx pc | return void (*pc)() ();
0x00006624 push.w {r4, r5, r6, r7, r8, sb, sl, fp, lr} |
0x00006628 mov sb, r0 | sb = r0;
0x0000662a sub sp, 0x24 |
0x0000662c mov r5, r2 | r5 = r2;
0x0000662e add r7, sp, 8 | r7 += dest;
0x00006630 ldr r0, [r2] | r0 = *(r2);
0x00006632 ldr r2, [pc, 0x214] |
0x00006634 ldr r3, [pc, 0x214] | r3 = *(0x684c);
0x00006636 add r2, pc | r2 = 0xce84;
0x00006638 ldr r3, [r2, r3] |
0x0000663a ldr r3, [r3] | r3 = imp.string_hash_ops;
0x0000663c str r3, [r7, 0x14] | *((r7 + 0x14)) = r3;
0x0000663e mov.w r3, 0 | r3 = 0;
0x00006642 cmp r0, 0 |
| if (r0 == 0) {
0x00006644 beq.w 0x6778 | goto label_7;
| }
0x00006648 mov r6, r1 | r6 = r1;
0x0000664a b 0x6656 |
| while (r0 == 0) {
0x0000664c ldr r0, [r5, 4]! | r0 = *((r5 += 4));
0x00006650 cmp r0, 0 |
| if (r0 == 0) {
0x00006652 beq.w 0x6778 | goto label_7;
| }
0x00006656 mov r1, r6 | r1 = r6;
0x00006658 blx 0x2ea4 | r0 = fcn_00002ea4 ();
0x0000665c cmp r0, 0 |
0x0000665e beq 0x664c |
| }
0x00006660 movs r0, 0 | r0 = 0;
0x00006662 blx 0x2c54 | r0 = special_glyph ();
0x00006666 mov r4, r0 | r4 = r0;
0x00006668 mov r0, sb | r0 = sb;
0x0000666a blx 0x2e04 | r0 = strlen (r0);
0x0000666e add.w r8, r0, 1 | r8 = r0 + 1;
0x00006672 cmp r4, 0 |
| if (r4 == 0) {
0x00006674 beq.w 0x6814 | goto label_8;
| }
0x00006678 mov r0, r4 | r0 = r4;
0x0000667a blx 0x2e04 | r0 = strlen (r0);
0x0000667e add.w r3, r8, r0 | r3 = r8 + r0;
0x00006680 lsls r0, r0, 0xc | r0 <<= 0xc;
0x00006682 cmp.w r3, 0x400000 |
| if (r3 > 0x400000) {
0x00006686 bhi.w 0x67c8 | goto label_3;
| }
0x0000668a adds r3, 7 | r3 += 7;
0x0000668c mov r1, sb | r1 = sb;
0x0000668e bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x00006692 sub.w sp, sp, r3 |
0x00006696 add r3, sp, 8 | r3 += dest;
0x00006698 mov r0, r3 | r0 = r3;
0x0000669a str r3, [r7, 8] | *((r7 + 8)) = r3;
0x0000669c blx 0x2948 | stpcpy ();
0x0000669e ldrd r4, r6, [r4, -0x84] | __asm ("ldrd r4, r6, [r4, -0x84]");
0x000066a2 blx 0x2aec | strcpy (r0, r1)
0x000066a6 movs r0, 3 | r0 = 3;
0x000066a8 blx 0x2c54 | r0 = special_glyph ();
0x000066ac mov r4, r0 | r4 = r0;
0x000066ae cmp r0, 0 |
| if (r0 == 0) {
0x000066b0 beq.w 0x67f4 | goto label_9;
| }
| label_4:
0x000066b4 mov r0, r4 | r0 = r4;
0x000066b6 blx 0x2e04 | strlen (r0);
0x000066ba add r0, r8 | r0 += r8;
0x000066bc cmp.w r0, 0x400000 |
| if (r0 > 0x400000) {
0x000066c0 bhi.w 0x67de | goto label_10;
| }
0x000066c4 adds r0, 7 | r0 += 7;
0x000066c6 mov r1, sb | r1 = sb;
0x000066c8 bic r0, r0, 7 | r0 = BIT_MASK (r0, 7);
0x000066cc sub.w sp, sp, r0 |
0x000066d0 add.w sl, sp, 8 | sl += dest;
0x000066d4 mov r0, sl | r0 = sl;
0x000066d6 blx 0x2948 | r0 = stpcpy ();
0x000066d8 ldmdb r8!, {r0, r5, sb, sl, lr} | __asm ("ldmdb r8!, {r0, r5, sb, sl, lr}");
0x000066dc blx 0x2948 | stpcpy ();
| label_2:
0x000066e0 ldr.w r8, [r5] | r8 = *(r5);
0x000066e4 movs r3, 0 | r3 = 0;
0x000066e6 strb r3, [r0] | *(r0) = r3;
0x000066e8 cmp.w r8, 0 |
| if (r8 == 0) {
0x000066ec beq 0x6778 | goto label_7;
| }
0x000066ee ldr r3, [pc, 0x160] |
0x000066f0 movs r2, 1 | r2 = 1;
0x000066f2 mov r1, r6 | r1 = r6;
0x000066f4 add r3, pc | r3 = 0xcf4a;
0x000066f6 str r3, [r7, 0xc] | *((r7 + 0xc)) = r3;
0x000066f8 ldr r3, [pc, 0x158] |
0x000066fa add r3, pc | r3 = 0xcf52;
0x000066fc str r3, [r7, 4] | *((r7 + 4)) = r3;
0x000066fe mov r3, r5 | r3 = r5;
0x00006700 mov r5, r8 | r5 = r8;
0x00006702 mov r8, r3 | r8 = r3;
0x00006704 mov r0, r5 | r0 = r5;
0x00006706 blx 0x2c3c | r0 = path_startswith_full ();
| if (r0 == 0) {
0x0000670a cbz r0, 0x6778 | goto label_7;
| }
| label_0:
0x0000670c ldr.w fp, [r8, 4] | fp = *((r8 + 4));
0x00006710 add.w r4, r8, 4 | r4 = r8 + 4;
0x00006714 cmp.w fp, 0 |
0x00006716 lsrs r0, r0, 0x1c | r0 >>= 0x1c;
| if (r0 == r0) {
0x00006718 beq 0x67ae | goto label_11;
| }
0x0000671a mov r3, fp | r3 = fp;
0x0000671c mov fp, r4 |
0x0000671e mov r4, r3 | r4 = r3;
0x00006720 b 0x6734 |
| while (r0 != 0) {
0x00006722 movs r2, 1 | r2 = 1;
0x00006724 mov r1, r5 | r1 = r5;
0x00006726 mov r0, r4 | r0 = r4;
0x00006728 blx 0x2c3c | r0 = path_startswith_full ();
0x0000672a eor.w r3, r8, r0, lsr 14 | r3 = r8 ^ (r0 >> 14);
0x0000672e ldr r4, [fp, 4]! | r4 = var_18h;
| if (r4 == 0) {
0x00006732 cbz r4, 0x6742 | goto label_12;
| }
0x00006734 movs r2, 1 | r2 = 1;
0x00006736 mov r1, r6 | r1 = r6;
0x00006738 mov r0, r4 | r0 = r4;
0x0000673a blx 0x2c3c | r0 = path_startswith_full ();
0x0000673e cmp r0, 0 |
0x00006740 bne 0x6722 |
| }
| label_12:
0x00006742 movs r0, 2 | r0 = 2;
0x00006744 mov r4, fp | r4 = fp;
0x00006746 blx 0x2c54 | special_glyph ();
0x0000674a str r5, [sp] | *(sp) = r5;
0x0000674c mov r3, r0 | r3 = r0;
0x0000674e ldr r1, [r7, 0xc] | r1 = *((r7 + 0xc));
0x00006750 mov r2, sb | r2 = sb;
0x00006752 movs r0, 1 | r0 = 1;
0x00006754 blx 0x2ffc | hashmap_put ();
0x00006758 mov r0, sl | r0 = sl;
| label_1:
0x0000675a ldr.w r1, [r8] | r1 = *(r8);
0x0000675e mov r2, r8 | r2 = r8;
0x00006760 bl 0x6624 | fcn_00006624 (r0, r1, r2, r3, r4);
0x00006764 ldr r5, [r4] | r5 = *(r4);
| if (r5 == 0) {
0x00006766 cbz r5, 0x6778 | goto label_7;
| }
0x00006768 movs r2, 1 | r2 = 1;
0x0000676a mov r1, r6 | r1 = r6;
0x0000676c mov r0, r5 | r0 = r5;
0x0000676e mov r8, r4 | r8 = r4;
0x00006770 blx 0x2c3c | r0 = path_startswith_full ();
0x00006774 cmp r0, 0 |
| if (r0 != 0) {
0x00006776 bne 0x670c | goto label_0;
| }
| label_7:
0x00006778 ldr r2, [pc, 0xdc] |
0x0000677a ldr r3, [pc, 0xd0] | r3 = *(0x684e);
0x0000677c add r2, pc | r2 = 0xcfd8;
0x0000677e ldr r3, [r2, r3] | r3 = *(0xcfd8);
0x00006780 ldr r2, [r3] | r2 = *(0xcfd8);
0x00006782 ldr r3, [r7, 0x14] | r3 = *((r7 + 0x14));
0x00006784 eors r2, r3 | r2 ^= r3;
0x00006786 mov.w r3, 0 | r3 = 0;
| if (r2 != r3) {
0x0000678a bne 0x6842 | goto label_13;
| }
0x0000678c adds r7, 0x1c | r7 += 0x1c;
0x0000678e mov sp, r7 |
0x00006790 pop.w {r4, r5, r6, r7, r8, sb, sl, fp, pc} |
0x00006794 movs r0, 1 | r0 = 1;
0x00006796 mov r4, fp | r4 = fp;
0x00006798 blx 0x2c54 | special_glyph ();
0x0000679c str r5, [sp] | *(sp) = r5;
0x0000679e mov r3, r0 | r3 = r0;
0x000067a0 ldr r1, [r7, 4] | r1 = *((r7 + 4));
0x000067a2 mov r2, sb | r2 = sb;
0x000067a4 movs r0, 1 | r0 = 1;
0x000067a6 blx 0x2ffc | hashmap_put ();
0x000067aa ldr r0, [r7, 8] | r0 = *((r7 + 8));
0x000067ac b 0x675a | goto label_1;
| label_11:
0x000067ae movs r0, 2 | r0 = 2;
0x000067b0 blx 0x2c54 | special_glyph ();
0x000067b4 ldr r1, [pc, 0xa4] |
0x000067b6 mov r3, r0 | r3 = r0;
0x000067b8 mov r2, sb | r2 = sb;
0x000067ba movs r0, 1 | r0 = 1;
0x000067bc str r5, [sp] | *(sp) = r5;
0x000067be add r1, pc | r1 = 0xd01e;
0x000067c0 blx 0x2ffc | hashmap_put ();
0x000067c4 mov r0, sl | r0 = sl;
0x000067c6 b 0x675a | goto label_1;
| label_3:
0x000067c8 ldr r1, [pc, 0x94] |
0x000067ca mov.w r2, 0x178 | r2 = 0x178;
0x000067ce ldr r3, [pc, 0x94] |
0x000067d0 ldr r0, [pc, 0x94] |
0x000067d2 add r1, pc | r1 = 0xd036;
0x000067d4 add r3, pc | r3 = 0xd03e;
0x000067d6 adds r1, 7 | r1 += 7;
0x000067d8 add r0, pc | r0 = 0xd044;
0x000067da blx 0x2804 | log_assert_failed ();
| do {
| label_10:
0x000067de ldr r1, [pc, 0x8c] |
0x000067e0 movw r2, 0x179 | r2 = 0x179;
0x000067e4 ldr r3, [pc, 0x88] |
0x000067e6 ldr r0, [pc, 0x8c] |
0x000067e8 add r1, pc | r1 = 0xd05a;
0x000067ea add r3, pc | r3 = 0xd05e;
0x000067ec adds r1, 7 | r1 += 7;
0x000067ee add r0, pc | r0 = "er";
0x000067f0 blx 0x2804 | log_assert_failed ();
| label_9:
0x000067f4 cmp.w r8, 0x400000 |
0x000067f8 bhi 0x67de |
| } while (r8 > 0x400000);
| label_5:
0x000067fa add.w r3, r8, 7 | r3 = r8 + 7;
0x000067fe mov r1, sb | r1 = sb;
0x00006800 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x00006804 sub.w sp, sp, r3 |
0x00006808 add.w sl, sp, 8 | sl += dest;
0x0000680c mov r0, sl | r0 = sl;
0x0000680e blx 0x2948 | stpcpy ();
0x00006812 b 0x66e0 | goto label_2;
| label_8:
0x00006814 cmp.w r8, 0x400000 |
| if (r8 > 0x400000) {
0x00006818 bhi 0x67c8 | goto label_3;
| }
0x0000681a add.w r3, r0, 8 | r3 = r0 + 8;
0x0000681e mov r1, sb | r1 = sb;
0x00006820 bic r3, r3, 7 | r3 = BIT_MASK (r3, 7);
0x00006824 sub.w sp, sp, r3 |
0x00006828 add r3, sp, 8 | r3 += dest;
0x0000682a mov r0, r3 | r0 = r3;
0x0000682c str r3, [r7, 8] | *((r7 + 8)) = r3;
0x0000682e blx 0x2aec | strcpy (r0, r1)
0x00006832 movs r0, 3 | r0 = 3;
0x00006834 blx 0x2c54 | r0 = special_glyph ();
0x00006838 mov r4, r0 | r4 = r0;
0x0000683a cmp r0, 0 |
| if (r0 != 0) {
0x0000683c bne.w 0x66b4 | goto label_4;
| }
0x00006840 b 0x67fa | goto label_5;
| label_13:
0x00006842 blx 0x2be8 | stack_chk_fail ();
0x00006846 nop |
0x00006848 str r6, [sp, 0x258] | *(arg_258h) = r6;
0x0000684a movs r0, r0 |
0x0000684c lsls r0, r7, 0xb | r0 = r7 << 0xb;
0x0000684e movs r0, r0 |
0x00006850 str r4, [r5, 0x78] | *((r5 + 0x78)) = r4;
0x00006852 movs r0, r0 |
0x00006854 str r6, [r4, 0x78] | *((r4 + 0x78)) = r6;
0x00006856 movs r0, r0 |
0x00006858 str r5, [sp, 0x140] | *(arg_140h) = r5;
0x0000685a movs r0, r0 |
0x0000685c str r2, [r4, 0x6c] | *((r4 + 0x6c)) = r2;
0x0000685e movs r0, r0 |
0x00006860 ldr r2, [r7, r4] | r2 = *((r7 + r4));
0x00006862 movs r0, r0 |
0x00006864 strb r4, [r1, 0x14] | *((r1 + 0x14)) = r4;
0x00006866 movs r0, r0 |
0x00006868 str r4, [r6, 0x68] | *((r6 + 0x68)) = r4;
0x0000686a movs r0, r0 |
0x0000686c ldr r4, [r4, r4] | r4 = *((r4 + r4));
0x0000686e movs r0, r0 |
0x00006870 strb r6, [r6, 0x13] | *((r6 + 0x13)) = r6;
0x00006872 movs r0, r0 |
0x00006874 str r6, [r3, 0x68] | *((r3 + 0x68)) = r6;
0x00006876 movs r0, r0 |
0x00006878 ldr r3, [pc, 8] |
0x0000687a mov r2, r1 | r2 = r1;
0x0000687c add r3, pc | r3 = "Failed to process bus: %m";
0x0000687e ldr r1, [r3] | r1 = "Failed to process bus: %m";
0x00006880 b.w 0x2ec8 | goto label_6;
| }
[*] Function strcpy used 3 times busctl