gon1332 Δημοσ. 10 Μαΐου 2014 Δημοσ. 10 Μαΐου 2014 Se K&R δεν ήταν κάπως έτσι; r(s)char *s{int m, ...}
H_ANARXIA_EINAI_PSEMA Δημοσ. 10 Μαΐου 2014 Μέλος Δημοσ. 10 Μαΐου 2014 Τι έγινε ρε μάγκες; Κωλόσατε παρασκευοσαββατοκυριακάτικα; Πάρτε και το reverse.c! #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <sys/mman.h> #include <fcntl.h> int main(int argc, char **argv) { int fd; struct stat s; char *p, *pp, *file; size_t i, nblock, padding, blocks; if(argc < 2) return 0; else if(argc == 2) nblock = 1, file = argv[1]; else nblock = atoi(argv[1]), file = argv[2]; if((fd = open(file, O_RDWR)) == -1) return 0; if(fstat(fd, &s) == -1) return 0; padding = (nblock - s.st_size % nblock) % nblock; blocks = s.st_size / nblock + !!padding; lseek(fd, 0, SEEK_END); for(i = 0; i < padding; i++) write(fd, "A", 1); fsync(fd); if((p = mmap(NULL, s.st_size + padding, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0)) == NULL) return 0; if((pp = malloc(nblock)) == NULL) { munmap(p, s.st_size + padding); return 0; } srand(time(NULL)); for(i = 0; i < nblock - padding; i++) pp[nblock - i - 1] = rand(); for(i = 0; i < blocks / 2; i++) { memcpy(pp, p + (blocks - i - 1) * nblock, (padding && !i) ? padding : nblock); memcpy(p + (blocks - i - 1) * nblock, p + i * nblock, nblock); memcpy(p + i * nblock, pp, nblock); } munmap(p, s.st_size + padding); free(pp); printf("%zu\n", padding); return 0; }
migf1 Δημοσ. 10 Μαΐου 2014 Δημοσ. 10 Μαΐου 2014 Se K&R δεν ήταν κάπως έτσι; r(s)char *s{int m, ...} Ναι! Αν το θυμάμαι σωστά όμως, πριν στανταριστεί η πρώτη ANSI τα δέχονταν και μέσα στην παρένθεση τα ορίσματα (ή μήπως η ANSI δεχόταν και το ένα και το άλλο στην αρχή, δεν το θυμάμαι ακριβώς). @H_ANARXIA_EINAI_PSEMA: Υπάρχει κάποιο συγκεκριμένο νόημα στο νήμα που έχεις ανοίξει (ή να αρχίσουμε όλοι να αραδιάζουμε κώδικες);
gon1332 Δημοσ. 10 Μαΐου 2014 Δημοσ. 10 Μαΐου 2014 Ναι! Αν το θυμάμαι σωστά όμως, πριν στανταριστεί η πρώτη ANSI τα δέχονταν και μέσα στην παρένθεση τα ορίσματα (ή μήπως η ANSI δεχόταν και το ένα και το άλλο στην αρχή, δεν το θυμάμαι ακριβώς). Όπως τα είπες. Βρήκα ότι αυτό που έγραψα ήταν πριν γίνει ISO. 1
imitheos Δημοσ. 10 Μαΐου 2014 Δημοσ. 10 Μαΐου 2014 "Μόνο σε linux" (Για την ακρίβεια μόνο σε UTF-8 locales) % cat > ton_peksame_kai_shmera.c << EEE #include <stdio.h> #include <stdlib.h> #include <string.h> char msg[] = { 0x46, 0x00, 0x47, 0x0f, 0x46, 0x3d, 0x46, 0x31, 0xa8, 0x46, 0x32, 0x46, 0x24, 0x47, 0x08, 0x46, 0x37, 0x46, 0x31, 0x46, 0x37, 0xa8, 0x46, 0x35, 0x47, 0x04, 0x46, 0x3f, 0x46, 0x34, 0x46, 0x39, 0xa8, 0x47, 0x0c, 0x46, 0x37, 0xa8, 0x47, 0x08, 0x46, 0x39, 0x47, 0x09, 0x47, 0x04, 0x46, 0x35, 0xa8, 0x46, 0x35, 0x46, 0x26, 0x46, 0x34, 0x46, 0x39, 0xa8, 0xb7, 0x82, 0xc4, 0xb8, 0xc6, 0xcf, 0xa8, 0xc4, 0xb9, 0xde, 0xbb, 0xa8, 0xc4, 0xbb, 0xbb, 0xdc, 0xa8, 0xcb, 0xb8, 0xcc, 0xbc, 0xc0, 0xa8, 0xcf, 0xa6, 0xcc, 0x82 }; int poulakia(int posa) { int x; for (x = 0; x < 10; x++) { posa += x*x + 2*x + 1; } return posa; } int main(void) { int i, tria; tria = poulakia(7); for (i = 0; i < sizeof(msg); i++) { msg[i] = msg[i] ^ tria; } printf("%s\n", msg); return 0; } EEE % cc -O3 ton_peksame_kai_shmera.c % ./a.out Έχει κάποιο νόημα το παρόν νήμα ? L0NG L1V3 L33T C0D4H G.D 7
H_ANARXIA_EINAI_PSEMA Δημοσ. 10 Μαΐου 2014 Μέλος Δημοσ. 10 Μαΐου 2014 Δηλαδή poulakia(x) = x + 1/6 10*11*21 + 2*1/2*10*11 + 11. Είμαι καλύτερος και από το gcc -O3!!! Τα locales μου είναι άγνωστα οπότε δεν καταλαβαίνω τι κάνει ο κωδικας σου (έτσι και αλλιώς, μία είναι η γλώσσα στους computers: English!) Το νόημα του thread είναι να διαβάσετε τον κώδικα μου και να μου πείτε την γνώμη σας!
defacer Δημοσ. 10 Μαΐου 2014 Δημοσ. 10 Μαΐου 2014 Λάθος στα είπαν. Το νόημα του thread είναι να δούμε μέχρι πού θα φτάσεις εσύ προσωπικά αλλά και το ίδιο το thread πριν κλειδωθεί. Για γνώμη επί του κώδικα, να μη λέμε κάθε φορά τα ίδια πράγματα. 1
H_ANARXIA_EINAI_PSEMA Δημοσ. 10 Μαΐου 2014 Μέλος Δημοσ. 10 Μαΐου 2014 Λοιπόν θα γράψω τα docs για να μην νομίζετε ότι το thread δεν έχει νόημα... Το πρόγραμμα λέγεται fmask και κάνει το εξής, $ cat example-file ABCDEFGHIJKLMNOPQRSTUVWXYZ $ ./fmask reverse:3 reverse:5 swap:7 reverse:11 swap reverse example-file reverse rswap reverse:11 resize:42 rswap:7 resize:30 reverse:5 resize:27 reverse:3 example-file $ hd -C example-file | uniq 00000000 d3 4c e4 4b 41 4a 43 41 42 46 4d 45 52 50 51 55 |.L.KAJCABFMERPQU| 00000010 48 54 44 53 49 47 57 21 56 cf 58 7e 4f 0a 4e 5a |HTDSIGW!V.X~O.NZ| 00000020 d3 59 5a e4 71 4f cf 7e f4 21 d3 f4 |.YZ.qO.~.!..| 0000002c Δηλαδή εδώ έχουμε ένα αρχείο στο οποίο θέλουμε να περάσουμε μερικά <<φίλτρα>>. Τα φίλτρα είναι αυτά reverse:3 reverse:5 swap:7 reverse:11 swap reverse Αφού τρέξουμε το fmask πέρνουμε ως output από το πρόγραμμα τα φίλτρα με τα οποία μπορούμε να αποδικωποιήσουμε το αρχείο, δηλαδή τα ζεύγη που δρουν ως <<αντι-φίλτρα>>. reverse rswap reverse:11 resize:42 rswap:7 resize:30 reverse:5 resize:27 reverse:3 example-file Μπορείτε να προσθέσετε τα δικά σας φίλτρα στο πρόγραμμα. Τα φίλτρα είναι όλα στο φάκελο bin/. Υπακούν στους εξής κανόνες: 1) Αν είναι ταυτόχρονα φίλτρο και αντι-φίλτρο του εαυτού του, δεν χρειάζεται να το προσθέσετε στο struct, ειδάλλως θα πρέπει να κάνετε την κατάλληλη τροποποίηση του fmask.c και να ξανακάνετε compile. 2) Αν προσθέτουν padding bytes, αυτά πρέπει να γραφούν στο stdout, ώστε το fmask να κάνει το κατάλληλο truncate κατά την φάση της αποδικωποίησης. 3) Το τελευταίο argument είναι το όνομα του αρχείου Για παράδειγμα, θα προσθέσω ένα φίλτρο το οποίο θα κάνει κωδικοποιηση rc4, με την βοήθεια του openssl utilities. Το πρώτο είναι το rc4.sh #!/bin/sh if [ $# -eq 2 ]; then openssl rc4 -in $2 -out "$2.temp" -k $1 mv "$2.temp" $2 echo 0 fi Τώρα το rc4_dec.sh, #!/bin/sh if [ $# -eq 2 ]; then openssl rc4 -d -in $2 -out "$2.temp" -k $1 mv "$2.temp" $2 echo 0 fi Γράφω τον αριθμό 0 στο stdout γιατί δεν υπάρχουν padding bytes. Αν θέλετε μπορείτε να γράψετε και ln -s rc4.sh rc4 ln -s rc4_dec.sh rc4_dec ωστε να μην γράφετε το .sh συνέχεια καθώς εκτελείτε το fmask. Δηλαδή τα φίλτρα δεν είναι απαρέτητα binary αρχεία (ELF). Αυτό χάρης την μαγεία που προσφέρει το popen. Anyway, αυτή είναι η ιδέα του κώδικα... Όλο το project είναι επισυναπτόμενο. fmask-1.1.zip
H_ANARXIA_EINAI_PSEMA Δημοσ. 10 Μαΐου 2014 Μέλος Δημοσ. 10 Μαΐου 2014 Ξεχασες τα docs. Τα έβαλα παραπάνω, υπήρχε ένα πρόβλημα με το ποστ... Έγραφα και τα έκοβε στην μέση.
H_ANARXIA_EINAI_PSEMA Δημοσ. 10 Μαΐου 2014 Μέλος Δημοσ. 10 Μαΐου 2014 Τίποτα το σπουδαίο δεν κάνει. Απλά βάζεις φίλτρα και αντι-φίλτρα και έχει ενα μικρό ψευτό-προτόκολο που θα ακολουθούν τα φίλτρα. Είναι σαν το gmask. http://homepage3.nifty.com/furumizo/gmaskd_e.htm Τι παραπάνω θες να πω;
παπι Δημοσ. 10 Μαΐου 2014 Δημοσ. 10 Μαΐου 2014 Εφοσον δεν κανει τιποτα το σπουδεο, γιατι μας βαζεις στο λουκι να βρουμε τι κανει;
H_ANARXIA_EINAI_PSEMA Δημοσ. 10 Μαΐου 2014 Μέλος Δημοσ. 10 Μαΐου 2014 Εμένα παντως μ'άρεσε. Απλά έγραψα κώδικα και τον έβαλα εδώ. Δεν το έκανα για να σας βάλω σε λούκι, να το συζητήσουμε θέλω. Τώρα αν είσαι υπεράνω, ε τι να πω... Ούτε το παπι δεν με παίζει.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα