Προς το περιεχόμενο

Ν00boαπορίες...


desolatorXT

Προτεινόμενες αναρτήσεις

Δημοσ.

Λοιπόν έχω τις εξής απορίες...

 

1)Έχω ένα pc χωρίς λειτουργικό σύστημα περασμένο μέσα του. Θέλω λοιπόν εγώ να χρησιμοποιήσω αυτό το pc. Πως θα δώσω σε αυτό εντολές?

 

Αυτό που ενοοώ δλδ είναι, έστω ότι εγώ έχω την δυνατότητα με κάποιον τρόπο να περάσω ένα πρόγραμμα σε μια δισκέτα. Σε ποια γλώσσα θα πρέπει να είναι γραμμένο το πρόγραμμα για να το καταλάβει ο υπολογιστής? σε γλώσσα μηχανής? Εκτός αυτού όμως, πως εγώ θα "πώ" στον υπολογιστή να διαβάσει τα περιεχόμενα της δισκέτας και να τρέξει το αρχείο τάδε?

 

Επιπλέον, έστω ότι γράφω ένα πρόγραμμα σε γλώσσα μηχανής... Πώς θα το κάνω αυτό? θα ανοίξω ένα έγγραφο κειμένου και θα αρχίσω να περνάω 0 και 1? Και άντε και με κάποιον τρόπο τα γράφω, πως θα πώ στον υπολογιστή ότι αυτή η σειρά 0 και 1 είναι εντολή, ενώ η απο δίπλα σειρά είναι ένας αριθμός? Με λίγα πώς ακριβώς γράφτηκαν οι πρώτες γλώσσες προγραμματισμού?

 

2)Γνωρίζω ότι τα λειτουργικά συστήματα Windowς είναι γραμμένα σε C++ (εκτός αν κάνω λάθος), γνωρίζω όμως επίσης ότι για να μπορέσει να καταλάβει το Pc μια γλώσσα προγραμματισμένου χρειάζετε και έναν αντίστοιχο μεταγλωτιστή που μεταφράζει το πρόγραμμα σε γλώσσα μηχανής... Πώς λοιπόν όταν ο υπολογιστής ξεκινάει αναγνωρίζει τα windows, και τα τρέχει? έχουν τα pc ενσωματωμένο μετταγλωτιστή για C++? έχουν κάποιες αρχικές οδηγίες στην ROM για να αναζητήσουν κάποιο συγκεκριμένο αρχείο λειτουργικού συστήματος? Αν ισχύει το δεύτερο, αυτό συνεπάγετε ότι όλα τα λειτουργικά συστήματα πρέπει να εμπεριέχουν αυτο το αρχείο?

 

ίσως να είναι οι πιο ηλίθιες απορίες που έχετε ακούσει, αλλα anyway :mrgreen:

 

Αφήνω το τόπικ ανοιχτό για απαντήσεις, αλλα και για όποιον άλλον θέλει να κάνει παρόμοιες απορίες... :)

Δημοσ.

Πρέπει να υπάρχει λειτουργικό σύστημα για να μπορείς να "μιλάς" στο pc. Αν θες να υλοποιήσεις τόσο χαμηλού επιπέδου λειτουργίες δεν χρειάζεται να γράψεις σε 0 και 1, αρκεί να γράψεις ένα κομμάτι του κώδικα σε assembly. Οι εντολές έχουν συγκεκριμένη σύνταξη όπως σε όλες τις γλώσσες προφανώς. Μπορεις να γράψεις και σε notepad και όπου θες, όπως σε κάθε γλωσσα.

 

Έχεις μπερδέψει το εξής. Φτιάχνεις ένα πρόγραμμα σε κάποια γλώσσα. Το παιρνάς από κάποιον compiler και παίρνεις το πρόγραμμα σε γλώσσα μηχανής. Τώρα πια δεν χρειάζεται να το ξαναπεράσεις από compiler για να τρέξει, το εκτελέσιμο το αναγνωρίζει ο υπολογιστής όπως είναι.

Δημοσ.
Πρέπει να υπάρχει λειτουργικό σύστημα για να μπορείς να "μιλάς" στο pc. Αν θες να υλοποιήσεις τόσο χαμηλού επιπέδου λειτουργίες δεν χρειάζεται να γράψεις σε 0 και 1, αρκεί να γράψεις ένα κομμάτι του κώδικα σε assembly. Οι εντολές έχουν συγκεκριμένη σύνταξη όπως σε όλες τις γλώσσες προφανώς. Μπορεις να γράψεις και σε notepad και όπου θες, όπως σε κάθε γλωσσα.

 

Έχεις μπερδέψει το εξής. Φτιάχνεις ένα πρόγραμμα σε κάποια γλώσσα. Το παιρνάς από κάποιον compiler και παίρνεις το πρόγραμμα σε γλώσσα μηχανής. Τώρα πια δεν χρειάζεται να το ξαναπεράσεις από compiler για να τρέξει, το εκτελέσιμο το αναγνωρίζει ο υπολογιστής όπως είναι.

 

δλδ, άλλη ερώτηση ( :mrgreen: ) εάν εγώ πάρω ένα αρχείο .txt και γράψω μέσα ένα πρόγραμμα σε 0 και 1, και αποθηκεύσω το αρχείο ώς .exe ο υπολογιστής θα το εκτελέσει?

Δημοσ.

Οχι βεβαια. Οταν εσυ γράφεις "0" ή "1" στη πραγματικότητα γράφεις τον ASCSI χαρακτήρα 48 ή 49 (HEX 30 ή 31) δηλαδή τα bit 00110000 ή 00110001.

Δημοσ.

Για τη δευτερη ερωτηση, δες αυτα

http://www.pcguide.com/ref/hdd/file/struct_Boot.htm

http://www.compphix.com/xpbootprocess.html

 

Αν και αυτο που ρωτησες για το 0 και 1 σου απαντησαν οτι δεν γίνεται, μπορεις να το πλησιασεις καπως γραφοντας σε εναν hex editor. Γραφεις χαρακτηρες σε δεκαεξαδικο, που η αντιστοιχιση τους με το δυαδικο ειναι πολυ βολικη. Πχ, το 7 ειναι το 0111, το 8 το 1000, το Α το 1010, το F το 1111 κλπ.

Δημοσ.

> δλδ, άλλη ερώτηση ( :mrgreen: ) εάν εγώ πάρω ένα αρχείο .txt και γράψω μέσα ένα πρόγραμμα σε 0 και 1, και αποθηκεύσω το αρχείο ώς .exe ο υπολογιστής θα το εκτελέσει?

 

Να μερικές εντολές assembly:

>
1440:0100 B424          MOV     AH,24
1440:0102 D0EC          SHR     AH,1
1440:0104 89C2          MOV     DX,AX
1440:0106 86F2          XCHG    DH,DL
1440:0108 D0EC          SHR     AH,1
1440:010A 30F6          XOR     DH,DH
1440:010C FEC6          INC     DH
1440:010E CD21          INT     21
1440:0110 C3            RET
1440:0111 2E            DB      '.'
1440:0112 48            DB      'H'
1440:0113 65            DB      'e'
1440:0114 6C            DB      'l'
1440:0115 6C            DB      'l'
1440:0116 6F            DB      'o'
1440:0117 21            DB      '!'
1440:0117 24            DB      '$'

Αυτές οι εντολές γράφουν το μήνυμα 'Hello!'.

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

 

Όμως κάθε byte εκτός από δυαδικό νούμερο μπορεί να είναι και χαρακτήρας. Αν πας έναρξη » εκτέλεση » charmap, βλέπεις τους κωδικούς (ASCII ή Unicode) των χαρακτήρων. Π.χ. το γράμμα που αντιστοιχεί στον δεκαεξαδικό κωδικό 30 είναι ... το «0».

 

Έτσι τα αντίστοιχα γράμματα για το παραπάνω πρόγραμμα assembly είναι τα εξής:

 

>
΄$Πμ‰Β†ςΠμ0φώΖΝ!Γ.Hello!$

Το συμπέρασμα είναι ότι ΜΠΟΡΕΙΣ να γράψεις ένα πρόγραμμα από το σημειωματάριο, π.χ.:

1) αν πας στο notepad,

2) και επικολλήσεις το παραπάνω κείμενο,

3) και το αποθηκεύσεις ως test.com (όχι .txt)

4) και εκτελέσεις το test.com,

5) θα σου εμφανίσει Hello!

 

Φυσικά διαβάζοντας τις εντολές του προγράμματος είτε σαν χαρακτήρες, είτε σε δεκαεξαδικό είτε σε δυαδικό σύστημα είναι αδύνατον να τις καταλάβεις. Χρειάζεσαι έναν disassembler για να σου δείξει το πρόγραμμα με την αρχική του μορφή, όπως φαίνεται παραπάνω.

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...