#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
*/
VPN termux about China.net
Saturday, 31 August 2024
Asembly turial
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment