Υπάρχει οποιαδήποτε ελπίδα ενός decompiler που θα μετατρέπουν σε ένα εκτελέσιμο πρόγραμμα σε C / C + + κώδικα;

Αυτό FAQ απάντηση είναι ένα απόσπασμα από αποσπάσματα του Bob σωματώδης.

Μην κρατάτε την αναπνοή σας. Σκέψου το ... Για ένα decompiler για να λειτουργήσει σωστά, είτε 1) κάθε συλλέκτης θα πρέπει να δημιουργήσει ουσιαστικά ταυτόσημο κώδικα, ακόμη και με πλήρη βελτιστοποίηση ενεργοποιημένος, ή 2) θα πρέπει να αναγνωρίσουν την ατομική απόδοση του κάθε μεταγλωττιστή της γεννήτριας κώδικα.

Αν η πρώτη περίπτωση που θα ήταν σωστό, δεν θα υπήρχε ανάγκη για πιο μεταγλωττιστή σημεία αναφοράς, αφού κάθε μία θα λειτουργήσει το ίδιο. Για τη δεύτερη περίπτωση να είναι αλήθεια θα απαιτούσε εξαιρετικά σύνθετο πρόγραμμα που έπρεπε να αλλάξει με κάθε νέο release μεταγλώττισης.

Έτσι, τι γίνεται με ειδικές decompilers για συγκεκριμένες μεταγλωττιστές - πω decompiler στόχο να λειτουργήσει μόνο για κώδικα που δημιουργείται από την, ας πούμε, BC + + 4.5; Αυτό μας παίρνει πίσω στη βελτιστοποίηση θέμα. Κώδικα γραμμένο για σαφήνεια και κατανοησιμότητας είναι συχνά αναποτελεσματική. Κώδικα γραμμένο για μέγιστη απόδοση (ταχύτητα ή το μέγεθος) είναι συχνά κρυπτικές (στην καλύτερη περίπτωση!) Προσθέστε σε αυτό το γεγονός ότι όλες οι σύγχρονες μεταγλωττιστές έχουν μια πληθώρα βελτιστοποίησης διακόπτες για τον έλεγχο που τεχνικές βελτιστοποίησης και η οποία να επιτρέπει να αποφεύγονται. Η ουσία είναι ότι, για μια αρκετά μεγάλη, περίπλοκη πηγή ενότητας, μπορείτε να πάρετε το μεταγλωττιστή να παράγει διάφορες ενότητες αντικείμενο απλά αλλάζοντας σας βελτιστοποίησης διακόπτες, οπότε σας decompiler θα πρέπει επίσης να είναι μια deoptimizer οποίο μπορεί να αναγνωρίζει αυτόματα τις οποίες βελτιστοποίηση στρατηγικών είχαν ενεργοποιηθεί κατά τη μεταγλώττιση.

Ας περαιτέρω απλοποίηση και διευκρίνιση ότι το μόνο που θέλουμε να υποστηρίξουμε ένα συγκεκριμένο compiler και θέλετε να απομεταγλώττιση στην πιο λογική πηγαίο κώδικα χωρίς να προσπαθεί να ερμηνεύσει τη βελτιστοποίηση. Τι λοιπόν; Ένα καλό Optimizer μπορεί και ουσιαστικά θα ξαναγράψουμε την Εσωτερικά του κωδικού σας, ναι, τι έχετε από σας decompiler θα είναι, μόνο που δεν κρυπτικές, αλλά σε πολλές περιπτώσεις, γεμάτη goto καταστάσεων και άλλες μη-δεν της κωδικοποίησης των καλών πρακτικών. Σε αυτό το σημείο, έχετε decompiled πηγή, αλλά αυτό είναι καλό αυτό;

Επίσης, σημειώστε προσεκτικά μου αναφορά στην πηγή ενότητες. Ένα χαρακτηριστικό της C είναι ότι γίνεται σε μεγάλο βαθμό δυσανάγνωστο Αν δεν κατανέμονται σε εύκολα να διατηρηθεί πηγή ενότητες (. C) των φακέλων. Πώς θα το decompiler ασχοληθεί με αυτό; Θα μπορούσε είτε να προσπαθήσει να απομεταγλώττιση το σύνολο του προγράμματος σε ορισμένα κύρια μαμούθ () λειτουργία, χάνει κάθε δομοστοιχειωτός, ή θα μπορούσε να προσπαθήσει να θέσει σε λειτουργία κάθε ζήτησε τη δική του αρχείου. Ο πρώτος τρόπος θα ήταν άχρηστα δημιουργήσει χάος και η δεύτερη θα αντιμετώπιζε προβλήματα, όπου η αρχική πηγή hade αρχεία με πολλαπλές λειτουργίες που χρησιμοποιούν στατικά δεδομένα ή / και μία ή περισσότερες λειτουργίες ζητώντας μία ή περισσότερες στατικές λειτουργίες. Μια decompiler θα μπορούσε να κάνει στατικά δεδομένα ή / και λειτουργίες παγκόσμια αλλά μόνο σε βάρος ή αναγνωσιμότητα (η οποία θα είχε ήδη απαράδεκτο).

Τέλος, να θυμάστε ότι οι εμπορικές εφαρμογές συχνά κωδικός τις πιο δύσκολες ή χρονικά κρίσιμες λειτουργίες συναρμολόγησης στην οποία θα μπορούσε να αποδειχθεί σχεδόν αδύνατον να απομεταγλώττιση C σε ένα ισοδύναμο.

Όπως είπα, μην κρατάτε την αναπνοή σας. Καθώς η τεχνολογία βελτιώνεται με decompilers όπου μπορεί να γίνει πιο εφικτή, optimizers και γλώσσες (C + +, για παράδειγμα, θα ήταν μια πολύ σκληρότερη γλώσσα για να απομεταγλώττιση από C), επίσης συνωμοτώ να τους λιγότερο πιθανό.

Για χρόνια Unix εφαρμογές έχουν διανεμηθεί σε μορφή shrouded πηγή (μηχανή, αλλά δεν τα ανθρώπινα αναγνώσιμη - όλες τις παρατηρήσεις και τις whitespace απομακρύνονται, όλα τα ονόματα μεταβλητών με τη μορφή OOIIOIOI, κ.λπ.), η οποία έχει ένα αρκετά επαρκές μέσο για την προστασία των δικαιωμάτων του συγγραφέα. Είναι πολύ πιθανό ότι η παραγωγή θα decompiler ακόμη να αναγνώσιμη ως shrouded ως πηγή.

Ενημέρωση: Decompiler τεχνολογία εξακολουθεί να είναι πολύ δύσκολο, αλλά έχουν γίνει σημαντικές πρόοδοι, δεδομένου ότι αυτό έχει γραφτεί.

Διαβάστε Τι είναι ένα decompiler; ενημέρωσης των πληροφοριών σχετικά με decompiler έργα.



Top 5 Free δικτύωση Εργαλεία

Bookmark Υπάρχει ελπίδα ενός decompiler που θα μετατρέπουν σε ένα εκτελέσιμο πρόγραμμα σε C / C + + κώδικα;

Τελευταίες θέσεις Blog


Αγγλικά Αγγλικά Γερμανικά Γερμανικά Ισπανικά Ισπανικά Γαλλικά Γαλλικά Ιταλικά Ιταλικά Πορτογαλικά Πορτογαλικά Ρωσικά Ρωσικά Ολλανδικά Ολλανδικά
Ελληνικά Ελληνικά Χίντι Χίντι Ιαπωνικά Ιαπωνικά Κορεατικά Κορεατικά Κινεζικά Κινεζικά Κινέζικα (απλοποιημένα) Κινέζικα (απλοποιημένα) Αραβικά Αραβικά

Copyright 2009-Tech FAQ. Με επιφύλαξη κάθε νόμιμου δικαιώματος. Πολιτική Προστασίας Προσωπικών Δεδομένων.