VPN termux about China.net

Saturday 31 August 2024

Asembly turial

 #include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define MAX_LINE_LENGTH 256

#define MAX_LINES 1000

/*95% pierwszego etapu  */


#define MAX_FILE_SIZE 1024 

char *run(char*cmd) {

char *echo;

    FILE *fp = popen(cmd, "r");

    if (fp == NULL) {

        perror("popen");

        return NULL;

    }

 size_t len = fread(echo, 1, MAX_FILE_SIZE, fp);  

 

      echo[len] = '\0';

   printf("%s",echo);

      pclose(fp);

      return echo;

}


char* name(char *old_name, const char *new_extension) {

    char *dot = strrchr(old_name, '.');

    if (dot != NULL) {

        strcpy(dot, new_extension);

    } else {

        strcat(old_name, new_extension);

    }

    return old_name;

}


void process_asm_file(const char *input_file, const char *output_file) {

    FILE *in_file = fopen(input_file, "r");

    FILE *out_file = fopen(output_file, "w");


    if (in_file == NULL || out_file == NULL) {

        printf("Nie można otworzyć pliku.\n");

        return;

    }


    char lines[MAX_LINES][MAX_LINE_LENGTH];

    int line_count = 0;


    // Wczytanie wszystkich linii do tablicy

    while (fgets(lines[line_count], MAX_LINE_LENGTH, in_file)) {

        // Sprawdzenie długości linii

        size_t len = strlen(lines[line_count]);


        // Usuwanie nowej linii na końcu, jeśli istnieje

        if (len > 0 && lines[line_count][len - 1] == '\n') {

            lines[line_count][len - 1] = '\0';

        }


        // Dodanie tabulatora przed .string, jeśli nie ma

        /*dodaje tab na poczatek lini a powinno po .string przed \" 

        cos innego puts?*/

        if (strstr(lines[line_count], ".string")) {

            char temp[MAX_LINE_LENGTH];

            snprintf(temp, MAX_LINE_LENGTH, "\t%s", lines[line_count]);

            strcpy(lines[line_count], temp);

        }


        line_count++;

    }

        if (line_count > 1) {

        strcpy(lines[1], "// Usunięto oryginalną linię");

    }

    // Pomiń zapisanie ostatnich dwóch linii

    if (line_count > 2) {

        line_count -= 2;

    }

    // Zapisanie zmodyfikowanych linii do nowego pliku

    for (int i = 0; i < line_count; i++) {

        fprintf(out_file, "%s\n", lines[i]);

    }


    fclose(in_file);

    fclose(out_file);

}


void zamien_znaki_w_miejscu(const char *plik) {

    FILE *fp = fopen(plik, "r+");

    if (!fp) {

        perror("Błąd przy otwieraniu pliku");

        return;

    }


    int c;

    while ((c = fgetc(fp)) != EOF) {

        if (c == '"') {

        //dwa znaki dodajemy ucina text 

            fseek(fp, -2, SEEK_CUR); // Cofnij wskaźnik o 1 bajt

            fputc('\\', fp); // Zastąp " na \"

            fputc('"', fp);

        }

    }


    fclose(fp);

}


int main(int argc, char *argv[]) {


    char viki[2024];

    char black[829];

    char cleo[2024];

    char youc[30];

char end[8]="\n\");";

    if (argc < 2) {

        printf("Podaj nazwę .c pliku?\n");

        printf("You.C\n");

        fgets(youc, sizeof(youc), stdin); // Use fgets for safer input handling

    } else {

        strcpy(youc, argv[1]); // Use the command-line argument if provided

    }

char len[40];

char*help;

sprintf(len,"/data/user/0/com.n0n3m4.droidc/files/gcc/bin/aarch64-linux-android-gcc -S %s\n",argv[1]);

run(len);

help=name(argv[1],".s");


strcpy(viki, help);


    // Remove trailing newline from filename

    

    viki[strcspn(viki, "\n")] = '\0'; 

    // Correctly remove newline

    

zamien_znaki_w_miejscu(viki); 

    FILE *infile = fopen(viki, "r");

    if (!infile) {

        fprintf(stderr, "Error: Could not open file: %s\n", viki);

        return 1;

    }


    FILE *outfile = fopen("returnn.c", "w");

    if (!outfile) {

        fprintf(stderr, "Error: Could not create output file.\n");

        fclose(infile);

        return 1;

    }


    while (fgets(black, sizeof(black), infile) != NULL) {

        black[strcspn(black, "\n")] = '\0'; // 

  sprintf(cleo,"asm(\"%s\\n\");\n", black);

        printf("%s", cleo);

       fputs(cleo, outfile);

    }


    fclose(infile);

    fclose(outfile);

    process_asm_file("returnn.c", "returnn.cc");

    // Wywołaj funkcję do zamiany znaków

printf("*******************");

    printf("RETURN.CC");

    printf("*******************");

    return 0;

}

/*

asm(" .arch armv8-a\n");

// Usunięto oryginalną linię

asm(" .text\n");

asm(" .section .rodata\n");

asm(" .align 3\n");

asm(".LC0:\n");

///====THIS=====

asm(" .string \"hell\"\n"); //space add

asm(" .text\n");

asm(" .align 2\n");

asm(" .global main\n");

asm(" .type main, %function\n");

asm("main:\n");

asm(".LFB0:\n");

asm(" .cfi_startproc\n");

asm(" stp x29, x30, [sp, -16]!\n");

asm(" .cfi_def_cfa_offset 16\n");

asm(" .cfi_offset 29, -16\n");

asm(" .cfi_offset 30, -8\n");

asm(" mov x29, sp\n");

asm(" adrp x0, .LC0\n");

asm(" add x0, x0, :lo12:.LC0\n");

asm(" bl printf\n");

asm(" mov w0, 0\n");

asm(" ldp x29, x30, [sp], 16\n");

asm(" .cfi_restore 30\n");

asm(" .cfi_restore 29\n");

asm(" .cfi_def_cfa_offset 0\n");

asm(" ret\n");

asm(" .cfi_endproc\n");

asm(".LFE0:\n");

asm(" .size main, .-main\n");


 /*


gcc -c -fPIE nmap.c -o nmap.o


gcc -c -fPIE nmap.c -o nmap.o


gcc nmap.o -o nmap -pie


chmod +x nmap


./nmap


*/


No comments:

Post a Comment