Brainfuck — Αναλυτικός οδηγός εξάσκησης — DedSec Project
Brainfuck — παρακολούθησε δύο κελιά μνήμης Εξήγησε κάθε μετακίνηση του δείκτη Με μηδενικά αρχικά κελιά, το πρώτο γίνεται 8. Κάθε μία από τις οκτώ επαναλήψεις προσθέτει 8 στο δεύτερο κελί…
Brainfuck — παρακολούθησε δύο κελιά μνήμης
Εξήγησε κάθε μετακίνηση του δείκτη
++++++++[>++++++++<-]>+.
Με μηδενικά αρχικά κελιά, το πρώτο γίνεται 8. Κάθε μία από τις οκτώ επαναλήψεις προσθέτει 8 στο δεύτερο κελί και αφαιρεί 1 από το πρώτο. Στο τέλος του βρόχου μένουν 0 και 64. Οι >+. αυξάνουν το δεύτερο κελί σε 65 και το εμφανίζουν ως ASCII A υπό την κατάλληλη πολιτική bytes. Η ] ελέγχει το ενεργό κελί: γι' αυτό είναι απαραίτητο το <.
Σκόπιμη αστοχία
Αφαίρεσε το < από τον βρόχο. Πλέον ο έλεγχος τερματισμού γίνεται σε άλλο κελί. Αποκατάστησε τον κώδικα και άλλαξε το τελευταίο + σε -, προβλέποντας byte 63 και χαρακτήρα ?. Κατάγραψε κελί και θέση δείκτη στις επαναλήψεις 0, 1, 4 και 8.
Επαλήθευση στον interpreter
Δοκίμασε overflow 8-bit, όρια ταινίας και κωδικοποίηση εξόδου στο πραγματικό περιβάλλον. Διαχώρισε προβλεπόμενες από παρατηρημένες εξόδους· δεν δηλώνεται εκτέλεση της Brainfuck σε αυτή την επιθεώρηση.
Απέδειξε τον τερματισμό με αμετάβλητη ιδιότητα
Στην αρχή της επανάληψης k (με αρχική τιμή k=0) το πρώτο κελί ισούται με 8-k και το δεύτερο με 8k. Κάθε επανάληψη μετατρέπει μία μονάδα του πρώτου κελιού σε οκτώ μονάδες του δεύτερου. Στο k=8 το κελί ελέγχου είναι μηδέν και ο βρόχος τελειώνει. Με πολιτική wrapping bytes, αν μειώσεις κατά λάθος ήδη μηδενικό κελί, μπορεί να γίνει 255 και να προκαλέσει πολλές απρόβλεπτες επαναλήψεις. Δοκίμασε διαφορετική αρχική κατάσταση μνήμης σε ανεξάρτητο περιβάλλον. Έλεγξε ξεχωριστά την τελική θέση του δείκτη: σωστό byte εξόδου δεν αποδεικνύει ότι ο δείκτης βρίσκεται πάλι στην αρχή.