Η μορφή Windows Portable Executable έχει τις δικές της μικρές αποχρώσεις, οπότε ακολουθεί ένας γρήγορος οδηγός για το πώς λειτουργούν.
Ένα Windows Portable Executable (PE) είναι η εγγενής μορφή αρχείου των Windows για εκτελέσιμα και άλλους τύπους δυαδικών αρχείων. Η μορφή αρχείου PE έχει σχεδιαστεί για να είναι ανεξάρτητη από την πλατφόρμα, ώστε να μπορεί να χρησιμοποιηθεί σε οποιοδήποτε μηχάνημα Windows τρέχει την ίδια έκδοση του λειτουργικού συστήματος και την ίδια αρχιτεκτονική επεξεργαστή για την οποία ήταν το αρχείο συντάχθηκε.
Λοιπόν, ας αναλύσουμε τη μορφή αρχείου Windows PE και ας μάθουμε για τη δομή και τα συστατικά στοιχεία της.
Τι είναι ένα φορητό εκτελέσιμο αρχείο των Windows;
Πριν εξερευνήσετε τη μορφή Windows Portable Executable, είναι σημαντικό να ξεκαθαρίσετε τα βασικά. Ας κάνουμε ένα βήμα πίσω και ας μάθουμε για την υποκείμενη έννοια του Windows PE—COFF.
Όταν μεταγλωττίζετε τον πηγαίο κώδικα σε ένα πρόγραμμα, ο μεταγλωττιστής δημιουργεί ένα αρχείο αντικειμένου (.obj). Αυτό το αρχείο αντικειμένου περιέχει οδηγίες για τον υπολογιστή σε δυαδική μορφή.
Το COFF ή το Common Object File Format είναι ένα τυποποιημένο σύνολο συμβάσεων για την αναπαράσταση δυαδικών εντολών. Το COFF βοηθά στη διατήρηση της συμβατότητας μεταξύ πλατφορμών, καθώς όλες οι μορφές αρχείων COFF ακολουθούν το ίδιο σύνολο κανόνων και συμβάσεων για την οργάνωση κώδικα και δεδομένων. Αν και το COFF αναπτύχθηκε αρχικά για χρήση σε συστήματα *NIX, τώρα είναι πανταχού παρόν σε όλες τις πλατφόρμες.
Η μορφή αρχείου Windows Portable Executable (PE) είναι μια τροποποίηση του COFF και έχει αναπτυχθεί για να χρησιμοποιείται αποκλειστικά σε Συστήματα Windows 32-bit και 64-bit. Σε αντίθεση με το COFF, το οποίο παρέχει μια τυποποιημένη μορφή για αρχεία αντικειμένων, το Windows PE παρέχει μια τυποποιημένη μορφή για εκτελέσιμα αρχεία και αρχεία βιβλιοθήκης.
Περιέχει ενότητες και κεφαλίδες που παρέχουν πληροφορίες σχετικά με το εν λόγω εκτελέσιμο και βοηθά τον φορτωτή συστήματος να διαχειρίζεται δεδομένα που σχετίζονται με το εκτελέσιμο αρχείο. Οι κεφαλίδες σε ένα αρχείο PE βοηθούν τον φορτωτή του συστήματος να αντιστοιχίσει το αρχείο στη μνήμη, να επιλύσει εξαρτήσεις όπως εξαγωγές/εισαγωγές API, να διαχειριστεί τους πόρους και να προετοιμάσει το αρχείο για εκτέλεση.
Το Linux έχει επίσης τη δική του επανάληψη του COFF. ονομάζεται Εκτελέσιμο αρχείο σύνδεσης ή εν συντομία δυαδικό ELF. Μπορείτε να ελέγξετε εάν ένα αρχείο είναι ELF ή όχι εκτελώντας το εντολή αρχείου σε Linux με πρώτο όρισμα το όνομα αρχείου.
Η δομή ενός Windows Portable Executable
Η μορφή αρχείου Portable Executable αποτελείται από πολλά στοιχεία, το καθένα με συγκεκριμένο σκοπό. Αυτά τα συστατικά περιλαμβάνουν:
- Επικεφαλίδες ενοτήτων, οι οποίες περιγράφουν τη διάταξη και τα χαρακτηριστικά κάθε ενότητας του αρχείου Οι ίδιες οι ενότητες, που περιέχουν εκτελέσιμο κώδικα, δεδομένα και πόρους.
- Η κεφαλίδα PE, η οποία παρέχει πληροφορίες σχετικά με τη συνολική δομή και τις απαιτήσεις του αρχείου.
- Η κεφαλίδα DOS, η οποία περιλαμβάνει ένα μικρό πρόγραμμα που εκτελείται όταν το αρχείο εκτελείται σε ένα σύστημα DOS.
- Και τέλος, οι κεφαλίδες ενότητας PE, οι οποίες περιγράφουν τη θέση και τα χαρακτηριστικά κάθε ενότητας μέσα στο αρχείο.
Συνολικά, αυτά τα στοιχεία συνεργάζονται για να δημιουργήσουν μια δομημένη μορφή που επιτρέπει στο λειτουργικό σύστημα να φορτώνει, να εκτελεί και να διαχειρίζεται σωστά τον εκτελέσιμο κώδικα που περιέχεται στο αρχείο. Ας μάθουμε ακριβώς τι κάνει κάθε εξάρτημα.
Κεφαλίδα DOS
Το πρώτο μέρος ενός αρχείου PE ονομάζεται Κεφαλίδα DOS. Μια μικρή ποσότητα εκτελέσιμου κώδικα αποθηκεύεται στην κεφαλίδα DOS, η οποία μπορεί επίσης να εκτελεστεί σε μια μηχανή DOS.
Αυτός ο κωδικός ονομάζεται επίσης στέλεχος MS-DOS και χρησιμοποιείται για την αποστολή μηνύματος σφάλματος σε συστήματα που δεν υποστηρίζουν το αρχείο PE.
Κεφαλίδα PE
Η κεφαλίδα Portable Executable δίνει πληροφορίες σχετικά με το εκτελέσιμο αρχείο, όπως πόσο μεγάλο είναι το αρχείο, πού βρίσκονται τα διάφορα μέρη και ποιους πόρους χρειάζεται το εκτελέσιμο αρχείο. Η κεφαλίδα PE έχει επίσης πληροφορίες σχετικά με τον τύπο του εκτελέσιμου αρχείου, είτε πρόκειται για α Αρχείο Windows .DLL ή ένα .EXE.
Κεφαλίδες Ενοτήτων
Οι ενότητες υλοποιούνται για να οργανώσουν τα πολλά στοιχεία ενός εκτελέσιμου αρχείου, όπως κώδικα, δεδομένα και πόρους όπως συμβολοσειρές κειμένου, εικόνες κ.λπ. Οι κεφαλίδες ενότητας περιλαμβάνουν πληροφορίες σχετικά με το μέγεθος και τη θέση κάθε ενότητας, καθώς και τυχόν σχετικές σημαίες.
Οι σημαίες που σχετίζονται με κάθε κεφαλίδα ενότητας μπορούν να υποδεικνύουν διάφορα χαρακτηριστικά της ενότητας, όπως το εάν είναι εκτελέσιμο, εγγράψιμο ή αναγνώσιμο. Αυτές οι σημαίες βοηθούν το λειτουργικό σύστημα να φορτώσει και να διαχειριστεί σωστά τα περιεχόμενα κάθε ενότητας κατά την εκτέλεση του προγράμματος.
Ενότητες
Οι ίδιες οι ενότητες περιλαμβάνουν τον πραγματικό κώδικα, τα δεδομένα και τους πόρους του εκτελέσιμου αρχείου. Κάθε τμήμα είναι ευθυγραμμισμένο σε ένα συγκεκριμένο όριο μνήμης και έχει το δικό του σύνολο χαρακτηριστικών που επηρεάζουν τον τρόπο με τον οποίο το χειρίζεται το λειτουργικό σύστημα.
Τώρα ξέρετε τα πάντα για τη φορητή μορφή εκτελέσιμου αρχείου των Windows
Το Windows Portable Executable είναι μια ισχυρή και ευέλικτη μορφή αρχείου που χρησιμοποιείται για την παραγωγή μιας μεγάλης ποικιλίας εφαρμογών των Windows και στοιχείων συστήματος. Κατανοώντας τη δομή της μορφής αρχείου PE, οι προγραμματιστές μπορούν να κατασκευάσουν αποτελεσματικές εφαρμογές που εκμεταλλεύονται τα ιδιαίτερα χαρακτηριστικά των Windows.
Εκτός από την απόκτηση εις βάθος κατανόησης της πλατφόρμας στην οποία θα εκτελείται η εφαρμογή σας, ακολουθώντας μερικά τυπικά καλά πρακτικές κωδικοποίησης, θα μπορείτε να μεγιστοποιήσετε την ποιότητα της εφαρμογής ανεξάρτητα από την πλατφόρμα που εκτελείται επί.