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

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

Δημοσ.

Γεια σας ! Ψαχνω καποιον να μου κανει μαθηματα πανω στην assembly language απο αποσταση, μεσω skype η/και team viwer. Δυστηχως λογο ολιγον τι χαλια οικονομικης καταστασης, τα λεφτα μου μπορω να δωσω ειναι γυρω στα 30-40 ευρω (το πολυ) συνολικα για ολα τα μαθηματα. Ειναι οσα καταφερα να βαλω στην ακρη. Αν καποιος θελει να κανει μαθηματα σε εναν νεο που θελει να μαθει assembly με αυτα τα λιγα λεφτα, ας μου πει :(

 

Διαβαστε το spoiler πριν απαντησετε απο κατω:

 

Μην μου πειτε να δω tutorials σε youtube και διαφορα βιβλια προγραμματισμου. Απλα δεν καταλαβαινω τιποτα οτι και να κανω.

 

Δημοσ.

Φιλε μου ολη η ουσία ειναι το spoiler, δυστυχώς αν δεν κάτσεις να διαβάσεις και να ασχοληθείς με τα 40 ευρω δεν κανεις τίποτα και μάλιστα σήμερα που ολη η πληροφορία ειναι στην οθονη σου δεν δικαιολογείσαι

Δημοσ.

Φιλε μου ολη η ουσία ειναι το spoiler, δυστυχώς αν δεν κάτσεις να διαβάσεις και να ασχοληθείς με τα 40 ευρω δεν κανεις τίποτα και μάλιστα σήμερα που ολη η πληροφορία ειναι στην οθονη σου δεν δικαιολογείσαι

 

Δεν μπορω να μαθω με tutorials και βιβλια. Δεν ειναι οτι δεν θελω. Νομιζω το καταλαβαινεις. Θα ηθελα να διαβαζα το βιβλιο, να ρωτουσα και ετσι να μαθαινα. Αλλα δεν τα καταφερνω....

 

Και δεν ειναι οτι δεν ψαχνω. Εκανα 6 μαθηματα C# με δασκαλο, + μεγαλο ψάξημο στο διαδύκτιο και κανω οχι τρελλα πραγματα, η πραγματα εννος επαγγελματια προγραμματιστη, αλλα γραφω απλο κωδικα. Με μολις 5 μαθηματα.

Γιατί θέλεις να μάθεις assembly και για ποιον επεξεργαστή;

Θελω να μαθω assembly γενικοτερα για να μαθω, και για ollydbg.

Δημοσ.

Έχω την εντύπωση πως και πάλι δε θα μάθεις ακόμη κι αν έχεις κάποιον πάνω από το κεφάλι σου (κατ' εμέ ο χείριστος τρόπος).

 

Τι εννοώ. Για να κατανοήσεις κάποιες έννοιες πρέπει να έχεις ένα μικρό υπόβαθρο για την οργάνωση ενός υπολογιστή. Έστω κάποια βασικά πράγματα πάνω σε έναν επεξεργαστή. Η Assembly είναι στην ουσία δυαδικό το οποίο είναι κωδικοποιημένο σε ανθρώπινα γράμματα. Δεν εννοώ κωδικοποιημένο όπως είναι μία δομή επανάληψης μιας γλώσσας υψηλού επιπέδου σε πολλές εντολές Assembly, αλλά μία εντολής assembly μεταφράζεται όντως σε μία ακολουθία από 0 και 1.

 

Τι γίνεται όταν δίνεις στον επεξεργαστή αυτή την ακολουθία από 0 και 1; Τι είναι η αποκωδικοποίηση; Τι είναι οι καταχωρητές; Αυτά είναι κάποια ερωτήματα που τουλάχιστον πρέπει να γνωρίζεις να απαντήσεις για έχεις κάποια ιδέα και ανάλογα με τον επεξεργαστή που θα χρησιμοποιήσεις, τα πράγματα αλλάζουν.

 

Βέβαια, πρέπει να γνωρίζεις να προγραμματίζεις και σε μία γλώσσα υψηλού επιπέδου. Αν όχι, τότε θα είναι δύσκολο να βλέπεις σε ένα κώδικα assembly δομές επιλογής, επανάληψης κλπ.

 

Κάτι άλλο πολύ σημαντικό είναι να είσαι καλός σε πράξεις που γίνονται σε δυαδικό σύστημα. Το δεκαεξαδικό θα σου λύσει τα χέρια (τα πάντα θα τα βλέπεις σε αυτό).

 

Να σε ρωτήσω. Πως και θέλεις να μάθεις να δουλεύεις έναν debugger, χωρίς να μπορείς από μόνος σου να δώσεις λίγη πίεση να μάθεις κάποια πράγματα; Μυρίζομαι, απλά ενθουσιασμό για κάτι, χωρίς να υπάρχουν συγκεκριμένοι στόχοι.

 

Όπως και να έχει βρες διαφάνειες, ή ένα βιβλίο μαθήματων Οργάνωσης Η/Υ από κάποιο Πολυτεχνείο και ξεκίνα να διαβάζεις από εκεί.

Ακόμη και τα 30-40 ευρώ θα είναι πεταμένα λεφτά αν τα δώσεις σε κάποιον να σου μάθει. Πάρε καλύτερα κανένα βιβλίο. Πριν πάρεις όμως χτύπα μια εδώ για προτάσεις.

  • Like 2
Δημοσ.

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

Δημοσ.

Ο πρώτος μου υπολογιστής Acorn Electron με την Basic έχει ενσωματωμένο two pass assembler για 6502 επεξεργαστή! Πριν ασχοληθώ όμως με τους υπολογιστές είχα τη συνήθη τρέλα της εποχής μου (τέλη δεκαετία 70 αρχές δεκατίας 80), τα ηλεκτρονικά. Οπότε πριν πιάσω υπολογιστή στα χέρια μου είχα δει εντολές σε assembly https://en.wikipedia.org/wiki/Elektor_TV_Games_Computer

Επεξηγούσε τα πάντα για τις ρουτίνες, τα interrupts, κ.α.

 

Σήμερα όμως αν κάποιος θέλει να μάθει assembly και έχει χρόνο, δεν χρειάζεται να φτάσει σε τέτοιο βαθμό γνώσης (π.χ. να παρακάμπτεις το λειτουργικό, με ένα δικό σου...) αλλά να χρησιμοποιεί κανείς το OS (κλήσεις και δομές των Windows) για να δημιουργεί εφαρμογές π.χ. παράθυρα, ακόμα και σε βάσεις δεδομένων μπορεί κανείς να μπαίνει από assembly.

 

Στην Assembly δεν σκεφτόμαστε με αντικείμενα, αλλά με διαδικασίες. Με τη μόνη διαφορά στη κλήση τους. Ενώ οι διάφοροι compilers ακολουθουν μια τυπική φόρμα, αυτός που χρησιμοποιεί την Assembly ορίζει αυτή την τυπική φόρμα, π.χ το StdCall το χρησιμοποιεί η MIcrosoft για κλήσεις στο Win Api. Άρα ουσιαστικά όταν λέμε ότι θα προγραμματίσουμε σε Assembly, λέμε ότι θα έχουμε μια Main λειτουργία, ένα Loop, ας πούμε, που θα περιμένει δράση από τον χρήστη, ή άλλα γεγονότα, μέσω ενός WindProc (που δέχεται μηνύματα) και τελικά ότι θέλουμε θα το πετύχουμε με Win Api. Άρα μας μένει το κομμάτι που λέει: Πώς ορίζουμε μεταβλητές, πως κάνουμε συγκρίσεις, πως διακλαδώσεις, πως επαναλήψεις (ενώ παράλληλα βλέπουμε και για κανένα μήνυμα, όπως "τερμάτισε δε σε αντέχω άλλο"). Έχω δει σε Assembly χρήση του Dx9 για γραφικά.

Βεβαίως η δύναμη της γλώσσας μηχανής είναι η ταχύτητα, αλλά σε ένα περιβάλλον με πολλές διεργασίες...που παρεμβάλλονται, δεν έχει νόημα η χρήση της, άμεσα. Οπότε θα πρότεινα να το ξανασκεφτείς. Αν όμως για το γαμώτο θες να μάθεις assembly (και κατανοείς τα βασικά όπως επαναλήψεις-διακλάδωση με συνθήκη- αντιγραφή τιμών - το τι σημαίνει Offset, ή όπως το λέω, Επιπλέον ή Διάστημα), τότε δες τα:

www.MASM32.com

Προσοχή η άδεια χρήσηw απαγορεύει να φτάχνεις Open Source λογισμικό, αν και σου δίνει το δικαίωμα...τσάμπα..να φτιάχνεις και να πουλάς κλειστού κώδικα λογισμικό. (Το γιατί το κάνουν αυτό δεν το ξέρω...έχω τις υποψίες μου)

O RosAsm καλός με ωραία παραδείγματα αλλά το έχουν αφήσει πίσω το έργο. Δουλεύει όμως ως έχει!

http://rosasm.freeforums.org/portal.php

http://web.archive.org/web/20100527083237/http://betov.free.fr/RosAsm.html

Δημοσ.

Έχω την εντύπωση πως και πάλι δε θα μάθεις ακόμη κι αν έχεις κάποιον πάνω από το κεφάλι σου (κατ' εμέ ο χείριστος τρόπος).

 

Τι εννοώ. Για να κατανοήσεις κάποιες έννοιες πρέπει να έχεις ένα μικρό υπόβαθρο για την οργάνωση ενός υπολογιστή. Έστω κάποια βασικά πράγματα πάνω σε έναν επεξεργαστή. Η Assembly είναι στην ουσία δυαδικό το οποίο είναι κωδικοποιημένο σε ανθρώπινα γράμματα. Δεν εννοώ κωδικοποιημένο όπως είναι μία δομή επανάληψης μιας γλώσσας υψηλού επιπέδου σε πολλές εντολές Assembly, αλλά μία εντολής assembly μεταφράζεται όντως σε μία ακολουθία από 0 και 1.

 

Τι γίνεται όταν δίνεις στον επεξεργαστή αυτή την ακολουθία από 0 και 1; Τι είναι η αποκωδικοποίηση; Τι είναι οι καταχωρητές; Αυτά είναι κάποια ερωτήματα που τουλάχιστον πρέπει να γνωρίζεις να απαντήσεις για έχεις κάποια ιδέα και ανάλογα με τον επεξεργαστή που θα χρησιμοποιήσεις, τα πράγματα αλλάζουν.

 

Βέβαια, πρέπει να γνωρίζεις να προγραμματίζεις και σε μία γλώσσα υψηλού επιπέδου. Αν όχι, τότε θα είναι δύσκολο να βλέπεις σε ένα κώδικα assembly δομές επιλογής, επανάληψης κλπ.

 

Κάτι άλλο πολύ σημαντικό είναι να είσαι καλός σε πράξεις που γίνονται σε δυαδικό σύστημα. Το δεκαεξαδικό θα σου λύσει τα χέρια (τα πάντα θα τα βλέπεις σε αυτό).

 

Να σε ρωτήσω. Πως και θέλεις να μάθεις να δουλεύεις έναν debugger, χωρίς να μπορείς από μόνος σου να δώσεις λίγη πίεση να μάθεις κάποια πράγματα; Μυρίζομαι, απλά ενθουσιασμό για κάτι, χωρίς να υπάρχουν συγκεκριμένοι στόχοι.

 

Όπως και να έχει βρες διαφάνειες, ή ένα βιβλίο μαθήματων Οργάνωσης Η/Υ από κάποιο Πολυτεχνείο και ξεκίνα να διαβάζεις από εκεί.

Ακόμη και τα 30-40 ευρώ θα είναι πεταμένα λεφτά αν τα δώσεις σε κάποιον να σου μάθει. Πάρε καλύτερα κανένα βιβλίο. Πριν πάρεις όμως χτύπα μια εδώ για προτάσεις.

 

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

 

Κοιταξτε. Εχω μιλησει σε πολλα φορουμ για αυτο μου το προβλημα(μεχρι που βαρεθηκα και σταματησα). Δεν ειναι απλα βαρεμαρα. ΕΙναι οτι διαβαζω και το μυαλο μου ειναι λες και δεν θελει να το βαλει... λες και το μισει το πραμα. Για παραδειγμα. Προσπαθουσα για 2,5 χρονια να παρω το lower με βιβλια, βιντεακια στο youtube(οταν ειχα ερωτησεις) και penpals για να κανω εξάσκηση. Ξερετε τι πηρα ? Τιποτα. Μετα βρεθηκε μια φιλη της οικογενειας που ηθελε να μου κανει μαθηματα δωρεαν. Σε 7 μηνες πηρα lower, και τωρα παω για το proficiency. Δευτερο παραδειγμα. Ηθελα να φτιαξω παιχνιδια(στο τελος το παρατησα βεβαια γιατι δεν μου αρεσε) οποτε αρχισα να μαθαινω C#. Πηρα tutorials κι αρχισα. Προσπαθησα να κανω πραξη οτι μαθαινα, μπας και το καταλαβω καλυτερα(γιατι ειμαι πρακτικος τυπος, η θεωρια με αφηνει στον τοπο). Τιποτα. Βρε ξανα... βρε ξανα... Τιποτα. Εκανα μαθηματα με εναν δασκαλο μεσω skype και team viwer. Με 5 μαθηματακια ξερω να κανω απλα προγραμματακια. Ξερω τι ειναι η μεταβλητες κ.τ.λ Απλα δεν μπορουσα να συνεχιζω λογο του οτι καθε μαθημα ηταν 20 ευρω την ωρα.

 

Πολλοι με αποκαλεσαν για οσα σας ειπα, οτι εχω ψυχολογικο προβλημα. Οτι ειμαι κολλημενος, και το οτι μαθαινω με δασκαλο ειναι γιατι λυπαμε τα λεφτα που δινω. Το προβλημα ειναι οτι τιποτα απο αυτα δεν ισχυει. Απλα δεν μαθαινω ετσι οπως μαθαινουν οι περισσοτεροι... ειμαι απλα διαφορετικος...

 

Οσο για την ερωτηση σου gon1332. Δεν θελω να μαθω να δουλευω το ollydbg. ΤΟ ΔΟΥΛΕΥΩ. Με τα ελαχιστα που εχω σπασει την γκλαβα μου κι εχω μαθει στην assembly, το χειριζομαι. Απλα θα ηθελα να μπορουσα να ξερω κανονικα την assembly για να το χειριζομαι ποιο ανετα και με μεγαλυτερη αποτελεσματικότητα γιατι κακα τα ψεματα... κανω πολλα με τα λιγα πραγματα που εχω μαθει. Αλλα μετααπο καποια φαση, χρειαζεσαι τα πολλα για να συνεχισεις...

 

Ο πρώτος μου υπολογιστής Acorn Electron με την Basic έχει ενσωματωμένο two pass assembler για 6502 επεξεργαστή! Πριν ασχοληθώ όμως με τους υπολογιστές είχα τη συνήθη τρέλα της εποχής μου (τέλη δεκαετία 70 αρχές δεκατίας 80), τα ηλεκτρονικά. Οπότε πριν πιάσω υπολογιστή στα χέρια μου είχα δει εντολές σε assembly https://en.wikipedia.org/wiki/Elektor_TV_Games_Computer

Επεξηγούσε τα πάντα για τις ρουτίνες, τα interrupts, κ.α.

 

Σήμερα όμως αν κάποιος θέλει να μάθει assembly και έχει χρόνο, δεν χρειάζεται να φτάσει σε τέτοιο βαθμό γνώσης (π.χ. να παρακάμπτεις το λειτουργικό, με ένα δικό σου...) αλλά να χρησιμοποιεί κανείς το OS (κλήσεις και δομές των Windows) για να δημιουργεί εφαρμογές π.χ. παράθυρα, ακόμα και σε βάσεις δεδομένων μπορεί κανείς να μπαίνει από assembly.

 

Στην Assembly δεν σκεφτόμαστε με αντικείμενα, αλλά με διαδικασίες. Με τη μόνη διαφορά στη κλήση τους. Ενώ οι διάφοροι compilers ακολουθουν μια τυπική φόρμα, αυτός που χρησιμοποιεί την Assembly ορίζει αυτή την τυπική φόρμα, π.χ το StdCall το χρησιμοποιεί η MIcrosoft για κλήσεις στο Win Api. Άρα ουσιαστικά όταν λέμε ότι θα προγραμματίσουμε σε Assembly, λέμε ότι θα έχουμε μια Main λειτουργία, ένα Loop, ας πούμε, που θα περιμένει δράση από τον χρήστη, ή άλλα γεγονότα, μέσω ενός WindProc (που δέχεται μηνύματα) και τελικά ότι θέλουμε θα το πετύχουμε με Win Api. Άρα μας μένει το κομμάτι που λέει: Πώς ορίζουμε μεταβλητές, πως κάνουμε συγκρίσεις, πως διακλαδώσεις, πως επαναλήψεις (ενώ παράλληλα βλέπουμε και για κανένα μήνυμα, όπως "τερμάτισε δε σε αντέχω άλλο"). Έχω δει σε Assembly χρήση του Dx9 για γραφικά.

Βεβαίως η δύναμη της γλώσσας μηχανής είναι η ταχύτητα, αλλά σε ένα περιβάλλον με πολλές διεργασίες...που παρεμβάλλονται, δεν έχει νόημα η χρήση της, άμεσα. Οπότε θα πρότεινα να το ξανασκεφτείς. Αν όμως για το γαμώτο θες να μάθεις assembly (και κατανοείς τα βασικά όπως επαναλήψεις-διακλάδωση με συνθήκη- αντιγραφή τιμών - το τι σημαίνει Offset, ή όπως το λέω, Επιπλέον ή Διάστημα), τότε δες τα:

www.MASM32.com

Προσοχή η άδεια χρήσηw απαγορεύει να φτάχνεις Open Source λογισμικό, αν και σου δίνει το δικαίωμα...τσάμπα..να φτιάχνεις και να πουλάς κλειστού κώδικα λογισμικό. (Το γιατί το κάνουν αυτό δεν το ξέρω...έχω τις υποψίες μου)

O RosAsm καλός με ωραία παραδείγματα αλλά το έχουν αφήσει πίσω το έργο. Δουλεύει όμως ως έχει!

http://rosasm.freeforums.org/portal.php

http://web.archive.org/web/20100527083237/http://betov.free.fr/RosAsm.html

Νομιζω οτι καταλαβα τι εννοεις σχετικα με την "θεωρια" της assembly. Απλα εκτελει αμεσες εντολες με μια default "φορμα". Assembly δεν θελω να μαθω για το γαμωτο βασικα. Οπως ειπα ποιο επανω με ενδιαφερει γιατι ¨δουλευω"το olldydbg και κατα καιρους χρειαζομαι assembly για να κανω σκριπτακια. Το masm32 το εχω στον υπολογιστη μου. Και εγω το ειδα διαβασει αυτο που λες. Αλλα δεν σκοπευω να κανω και λογισμικο... δεν ειμαι τοσο εξυπνος για αυτα.... Τον RosAsm δεν τον ξερω. Θα τα δω. Ευχαριστω :)

Δημοσ.

Κοιταξτε. Εχω μιλησει σε πολλα φορουμ για αυτο μου το προβλημα(μεχρι που βαρεθηκα και σταματησα). Δεν ειναι απλα βαρεμαρα. ΕΙναι οτι διαβαζω και το μυαλο μου ειναι λες και δεν θελει να το βαλει... λες και το μισει το πραμα. Για παραδειγμα. Προσπαθουσα για 2,5 χρονια να παρω το lower με βιβλια, βιντεακια στο youtube(οταν ειχα ερωτησεις) και penpals για να κανω εξάσκηση. Ξερετε τι πηρα ? Τιποτα. Μετα βρεθηκε μια φιλη της οικογενειας που ηθελε να μου κανει μαθηματα δωρεαν. Σε 7 μηνες πηρα lower, και τωρα παω για το proficiency. Δευτερο παραδειγμα. Ηθελα να φτιαξω παιχνιδια(στο τελος το παρατησα βεβαια γιατι δεν μου αρεσε) οποτε αρχισα να μαθαινω C#. Πηρα tutorials κι αρχισα. Προσπαθησα να κανω πραξη οτι μαθαινα, μπας και το καταλαβω καλυτερα(γιατι ειμαι πρακτικος τυπος, η θεωρια με αφηνει στον τοπο). Τιποτα. Βρε ξανα... βρε ξανα... Τιποτα. Εκανα μαθηματα με εναν δασκαλο μεσω skype και team viwer. Με 5 μαθηματακια ξερω να κανω απλα προγραμματακια. Ξερω τι ειναι η μεταβλητες κ.τ.λ Απλα δεν μπορουσα να συνεχιζω λογο του οτι καθε μαθημα ηταν 20 ευρω την ωρα.

 

Πολλοι με αποκαλεσαν για οσα σας ειπα, οτι εχω ψυχολογικο προβλημα. Οτι ειμαι κολλημενος, και το οτι μαθαινω με δασκαλο ειναι γιατι λυπαμε τα λεφτα που δινω. Το προβλημα ειναι οτι τιποτα απο αυτα δεν ισχυει. Απλα δεν μαθαινω ετσι οπως μαθαινουν οι περισσοτεροι... ειμαι απλα διαφορετικος...

 

Οσο για την ερωτηση σου gon1332. Δεν θελω να μαθω να δουλευω το ollydbg. ΤΟ ΔΟΥΛΕΥΩ. Με τα ελαχιστα που εχω σπασει την γκλαβα μου κι εχω μαθει στην assembly, το χειριζομαι. Απλα θα ηθελα να μπορουσα να ξερω κανονικα την assembly για να το χειριζομαι ποιο ανετα και με μεγαλυτερη αποτελεσματικότητα γιατι κακα τα ψεματα... κανω πολλα με τα λιγα πραγματα που εχω μαθει. Αλλα μετααπο καποια φαση, χρειαζεσαι τα πολλα για να συνεχισεις...

 

Νομιζω οτι καταλαβα τι εννοεις σχετικα με την "θεωρια" της assembly. Απλα εκτελει αμεσες εντολες με μια default "φορμα". Assembly δεν θελω να μαθω για το γαμωτο βασικα. Οπως ειπα ποιο επανω με ενδιαφερει γιατι ¨δουλευω"το olldydbg και κατα καιρους χρειαζομαι assembly για να κανω σκριπτακια. Το masm32 το εχω στον υπολογιστη μου. Και εγω το ειδα διαβασει αυτο που λες. Αλλα δεν σκοπευω να κανω και λογισμικο... δεν ειμαι τοσο εξυπνος για αυτα.... Τον RosAsm δεν τον ξερω. Θα τα δω. Ευχαριστω :)

 

κοιτά μπορεί έτσι να είναι τα πράγματα να μαθαίνεις με καθηγητή μόνο άλλα ο κόσμος των Η/Υ από άποψη μου από κάποιο σημείο και μετά είναι solo κομμάτι του καθενός, ναι μεν να μάθεις τα βασικά από κάποιους καθηγητές άλλα από κει και πέρα αν δεν μπορείς να βασιστείς πάνω σου δεν προχωράς.

Γιαυτό θα πρότεινα να προσπαθήσεις ακόμα λίγο να μάθεις μέσο youtube/sites/tutorials...

 

[offtopic]

από περιέργεια είσαι φοιτητής πληροφορικής η γενικά σε κάποιο κλάδο της? (αν θες μην απαντάς, άπλα μου φαίνεται λίγο παράξενο αν δεν είσαι του χώρου της πληρ. να θες να μάθεις assembly)

[/offtopic] 

  • Like 1
Δημοσ.

Ολοι μαθαινουνε αν καθεται καποιος απο πανω σου και στα μαθαινει/εξηγει.Το θεμα ειναι να βρεις τη δυναμη να το κανεις μονος σου αυτο το πραγμα.Για να μπορεις να το πετυχεις πρεπει να εχεις ενα πολυ δελεαστικο στοχο που να σε παρακινει να το κανεις.
Σκεψου κατι που θες να φτιαξεις σχετικα απλο και πανω σε αυτο αρχισε να μαθαινεις.
Για παραδειγμα πες οτι θα φτιαξεις ενα calculator ή οτι αλλο σου αρεσει...

Για να παρεις δυναμη θα σου πω τι εκανα προσφατα.Ηθελα να φτιαξω ενα scriptaki για να κανει ελεγχο σε ενα site.Με ελαχιστες γνωσεις python και με συνεχεις αναζητησεις στο internet το καταφερα.Αμα μου βαζανε ασκησεις θα βαριομουνα απιστευτα να κατσω να μαθω python,αλλα ετσι και εμαθα λιγα πραγματα και εφτιαξα κατι που θα μου χρησιμευσει...
Φιλικα παντα  :-D

  • Like 1
Δημοσ.

Οσο για την ερωτηση σου gon1332. Δεν θελω να μαθω να δουλευω το ollydbg. ΤΟ ΔΟΥΛΕΥΩ. Με τα ελαχιστα που εχω σπασει την γκλαβα μου κι εχω μαθει στην assembly, το χειριζομαι. Απλα θα ηθελα να μπορουσα να ξερω κανονικα την assembly για να το χειριζομαι ποιο ανετα και με μεγαλυτερη αποτελεσματικότητα γιατι κακα τα ψεματα... κανω πολλα με τα λιγα πραγματα που εχω μαθει. Αλλα μετααπο καποια φαση, χρειαζεσαι τα πολλα για να συνεχισεις...

Τι γνωρίζεις να κάνεις με την Assembly; Ποια είναι αυτά τα ελάχιστα; Τι νομίζεις ότι σου λείπει για να κάνεις τη δουλειά σου καλύτερη; Μήπως και δεν έχουν να κάνουν τόσο με Assembly όσο με workflows και τεχνικές.

Δημοσ.

Βοηθάει το στήσιμο για να κάνεις μια δουλειά...μετά πάνε όλα οκ. Στο θέμα τώρα σε ενδιαφέρει το dll, το exe ή να παρεμβάλεις εκτελέσιμο κώδικα εκεί που τρέχεις. Σε κάθε περίπτωση πρέπει να γνωρίζεις το interface, την  προσαρμογή δηλαδή.  Αναφέρθηκα πριν στο stdCall γιατί είναι ένας τρόπος να περάσεις μεταβλητές (με τιμή ή με αναφορά, δηλαδή με δείκτη σε τιμή). Ακόμα και η Μ2000 που έχω φτιάξει μπορεί να καλέσει ρουτίνες σε dll εξωτερικό, άρα το πιθανότερο είναι ότι σε ότι δουλεύεις μπορείς να χρησιμοποιήσεις με κάποιο τρόπο γλώσσα μηχανής!

Η προσαρμογή είναι το ένα θέμα. Το άλλο είναι το μέρος που προγραμματίζεις σε assembly. Κανονικά ένα πρόγραμμα σε γλώσσα μηχανής είναι διακριτές εντολες σε συγκεκριμένες θέσεις μνήμης. Π.χ. σε κάτι αρχαία μηχανήματα ξεκίναγες από με Link.png Site: ORG100H δηλαδή το 257byte από το πρώτο (που είναι το 0). Γιατί κόλλησαν στις σελίδες των 256 bytes; Διότι τις θεωρούσαν στα 8bit σελίδες, οπότε έδιναν το λεγόμενο Branch, άλμα στην ουσία, σε απόσταση +127 -128 (άρα και πίσω). Αυτά τα Link.png Site: Branch είχαν και ειδικότητες, π.χ. BNE σήμαινε διακλάδωσε αν δεν είναι ίδια (Not Equal)... Και εδώ ακριβώς είναι η απλότητα της Assembly...Υπάρχει ένα μοναδικό bit στον επεξεργαστή που αν είναι True δηλαδή 1 τότε έχουμε Equal. Το οποίο σημαίνει έχουμε Μηδέν! Διότι τη μόνη ισότητα που αναγνωρίζει ο επεξεργαστής είναι να έχει όλα τα Bit 0 στον Link.png Site: συσσωρευτή . (Α λέγεται στα πρώτα, λιγότερο σημαντικά 8 Bit, ΑΧ στα πρώτα 16bit. ..και στα 32 bit λέγεται EAX).Σε κάθε εντολή που έχει να κάνει με φόρτωση/επεξεργασία στο συσσωρευτή ρυθμίζονται άμεσα τα flag που η εντολή αλλάζει. Άρα για να μάθουμε Assembly θέλουμε πρώτα το πίνακα εντολών και τι flag κάθε εντολή αλλάζει. Μετά μας ενδιαφέρουν οι τρόποι να δώσουμε και να πάρουμε δεδομένα από και προς τους καταχωρητές.

http://gradestack.com/Microprocessors-and/Instruction-Set-of-8086/8086-Instruction-Set/19318-3912-38179-study-wtw

 

Οι λέξεις που μας ενδιαφέρουν είναι:

Operand....κάθε εντολή ανάλογα με ποιο τρόπο προσπέλασης επιλέξουμε δίνει άλλο νούμερο που θα καταχωρηθεί (όπως αναφέρω πιο πάνω κάθε εντολή γράφεται σε συγκεκριμένη διεύθυνση). Αυτό είναι το operand.

Κάθε εντολή μπορεί να θέλει ένα ή περισσότερα bytes για να σχηματιστεί και λέγεται Instruction.

Τα τρία γράμματα κάθε εντολής είναι το mnemonic, αλλά εκτός από ελάχιστες περιπτώσεις, όλες οι άλλες έχουν πολλά operands.

 

Πως γίνεται δυο ή τρια dll που έχουν γραφτεί να τρέχουν από συγκεκριμένη διεύθυνση, να τρέχουν στον ίδιο χώρο μνήμης; Γίνεται διότι στη φόρτωση γίνεται relocation και οι βιβλιοθήκες λέγονται Dynamic Link Library. Άρα τελικά ο κώδικάς μας αν και γράφτηκε να τρέχει σε συγκεκριμένη διεύθυνση...δεν θα είναι αυτή που επιθυμούμε, αλλά αυτή που θα αποφασίσει το Link.png Site: λειτουργικόνα είναι . Να γιατί τα Branch συμφέρουν, είναι διακλαδώσεις σε σχετική θέση, άρα σε κάθε περίπτωση μετακίνησης του κώδικα αυτά ακολουθούν.χωρίς αλλαγές.

 

Αν δεν σε ζορίζουν αυτά...έχει και άλλα!

 

 


Πολύ ωραία προγράμματα!

http://win32assembly.programminghorizon.com/tutorials.html

Δημοσ.

κοιτά μπορεί έτσι να είναι τα πράγματα να μαθαίνεις με καθηγητή μόνο άλλα ο κόσμος των Η/Υ από άποψη μου από κάποιο σημείο και μετά είναι solo κομμάτι του καθενός, ναι μεν να μάθεις τα βασικά από κάποιους καθηγητές άλλα από κει και πέρα αν δεν μπορείς να βασιστείς πάνω σου δεν προχωράς.

Γιαυτό θα πρότεινα να προσπαθήσεις ακόμα λίγο να μάθεις μέσο youtube/sites/tutorials...

 

[offtopic]

από περιέργεια είσαι φοιτητής πληροφορικής η γενικά σε κάποιο κλάδο της? (αν θες μην απαντάς, άπλα μου φαίνεται λίγο παράξενο αν δεν είσαι του χώρου της πληρ. να θες να μάθεις assembly)

[/offtopic] 

 

Εννοειτε. Οτι ξερω απο τους υπολογιστες, το εχω μαθει μονος μου. Απλα οπως λεω και στον pavlos77 θελω καποιον να μου βαλει τις βασεις. Οσο για το offtopic, ασχολουμαι παρα πολυ με τους υπολογιστες(εχω τρελλα), και θα ηθελα να γινω προγραμματιστης. Αλλα δεν το βλεπω....

Ολοι μαθαινουνε αν καθεται καποιος απο πανω σου και στα μαθαινει/εξηγει.Το θεμα ειναι να βρεις τη δυναμη να το κανεις μονος σου αυτο το πραγμα.Για να μπορεις να το πετυχεις πρεπει να εχεις ενα πολυ δελεαστικο στοχο που να σε παρακινει να το κανεις.

Σκεψου κατι που θες να φτιαξεις σχετικα απλο και πανω σε αυτο αρχισε να μαθαινεις.

Για παραδειγμα πες οτι θα φτιαξεις ενα calculator ή οτι αλλο σου αρεσει...

Για να παρεις δυναμη θα σου πω τι εκανα προσφατα.Ηθελα να φτιαξω ενα scriptaki για να κανει ελεγχο σε ενα site.Με ελαχιστες γνωσεις python και με συνεχεις αναζητησεις στο internet το καταφερα.Αμα μου βαζανε ασκησεις θα βαριομουνα απιστευτα να κατσω να μαθω python,αλλα ετσι και εμαθα λιγα πραγματα και εφτιαξα κατι που θα μου χρησιμευσει...

Φιλικα παντα  :-D

 

Εχω πολλα πραγματα που μου δινουν κινητρο να τα κανω. Στο "πρακτικο" μερος του θεματος ομως... τεζα.... Απο ψάξιμο τρελλο δεν το συζηταω. Απλα θελω καποιον να μου βαλει τις βασεις. Δεν ειμαι ανθρωπος που τα θελω στο πιάτο ..... θα λιωσω στο ψάξιμο...

Τι γνωρίζεις να κάνεις με την Assembly; Ποια είναι αυτά τα ελάχιστα; Τι νομίζεις ότι σου λείπει για να κάνεις τη δουλειά σου καλύτερη; Μήπως και δεν έχουν να κάνουν τόσο με Assembly όσο με workflows και τεχνικές.

 

Τα ελαχιστα ειναι τι ειναι το JE,JMP,HEX,EAX κ.τ.λ Με αυτα κανω δουλεια... που να ηξερα assembly κιολας...

Βοηθάει το στήσιμο για να κάνεις μια δουλειά...μετά πάνε όλα οκ. Στο θέμα τώρα σε ενδιαφέρει το dll, το exe ή να παρεμβάλεις εκτελέσιμο κώδικα εκεί που τρέχεις. Σε κάθε περίπτωση πρέπει να γνωρίζεις το interface, την  προσαρμογή δηλαδή.  Αναφέρθηκα πριν στο stdCall γιατί είναι ένας τρόπος να περάσεις μεταβλητές (με τιμή ή με αναφορά, δηλαδή με δείκτη σε τιμή). Ακόμα και η Μ2000 που έχω φτιάξει μπορεί να καλέσει ρουτίνες σε dll εξωτερικό, άρα το πιθανότερο είναι ότι σε ότι δουλεύεις μπορείς να χρησιμοποιήσεις με κάποιο τρόπο γλώσσα μηχανής!

Η προσαρμογή είναι το ένα θέμα. Το άλλο είναι το μέρος που προγραμματίζεις σε assembly. Κανονικά ένα πρόγραμμα σε γλώσσα μηχανής είναι διακριτές εντολες σε συγκεκριμένες θέσεις μνήμης. Π.χ. σε κάτι αρχαία μηχανήματα ξεκίναγες από με Link.png Site: ORG100H δηλαδή το 257byte από το πρώτο (που είναι το 0). Γιατί κόλλησαν στις σελίδες των 256 bytes; Διότι τις θεωρούσαν στα 8bit σελίδες, οπότε έδιναν το λεγόμενο Branch, άλμα στην ουσία, σε απόσταση +127 -128 (άρα και πίσω). Αυτά τα Link.png Site: Branch είχαν και ειδικότητες, π.χ. BNE σήμαινε διακλάδωσε αν δεν είναι ίδια (Not Equal)... Και εδώ ακριβώς είναι η απλότητα της Assembly...Υπάρχει ένα μοναδικό bit στον επεξεργαστή που αν είναι True δηλαδή 1 τότε έχουμε Equal. Το οποίο σημαίνει έχουμε Μηδέν! Διότι τη μόνη ισότητα που αναγνωρίζει ο επεξεργαστής είναι να έχει όλα τα Bit 0 στον Link.png Site: συσσωρευτή . (Α λέγεται στα πρώτα, λιγότερο σημαντικά 8 Bit, ΑΧ στα πρώτα 16bit. ..και στα 32 bit λέγεται EAX).Σε κάθε εντολή που έχει να κάνει με φόρτωση/επεξεργασία στο συσσωρευτή ρυθμίζονται άμεσα τα flag που η εντολή αλλάζει. Άρα για να μάθουμε Assembly θέλουμε πρώτα το πίνακα εντολών και τι flag κάθε εντολή αλλάζει. Μετά μας ενδιαφέρουν οι τρόποι να δώσουμε και να πάρουμε δεδομένα από και προς τους καταχωρητές.

http://gradestack.com/Microprocessors-and/Instruction-Set-of-8086/8086-Instruction-Set/19318-3912-38179-study-wtw

 

Οι λέξεις που μας ενδιαφέρουν είναι:

Operand....κάθε εντολή ανάλογα με ποιο τρόπο προσπέλασης επιλέξουμε δίνει άλλο νούμερο που θα καταχωρηθεί (όπως αναφέρω πιο πάνω κάθε εντολή γράφεται σε συγκεκριμένη διεύθυνση). Αυτό είναι το operand.

Κάθε εντολή μπορεί να θέλει ένα ή περισσότερα bytes για να σχηματιστεί και λέγεται Instruction.

Τα τρία γράμματα κάθε εντολής είναι το mnemonic, αλλά εκτός από ελάχιστες περιπτώσεις, όλες οι άλλες έχουν πολλά operands.

 

Πως γίνεται δυο ή τρια dll που έχουν γραφτεί να τρέχουν από συγκεκριμένη διεύθυνση, να τρέχουν στον ίδιο χώρο μνήμης; Γίνεται διότι στη φόρτωση γίνεται relocation και οι βιβλιοθήκες λέγονται Dynamic Link Library. Άρα τελικά ο κώδικάς μας αν και γράφτηκε να τρέχει σε συγκεκριμένη διεύθυνση...δεν θα είναι αυτή που επιθυμούμε, αλλά αυτή που θα αποφασίσει το Link.png Site: λειτουργικόνα είναι . Να γιατί τα Branch συμφέρουν, είναι διακλαδώσεις σε σχετική θέση, άρα σε κάθε περίπτωση μετακίνησης του κώδικα αυτά ακολουθούν.χωρίς αλλαγές.

 

Αν δεν σε ζορίζουν αυτά...έχει και άλλα!

 

 

Πολύ ωραία προγράμματα!

http://win32assembly.programminghorizon.com/tutorials.html

Ευχαριστω παρα πολυ που εκανες τοσο κοπο για να τα γραψεις ολα αυτα.... αλλα δεν καταλαβα σχεδον τιποτα :( :/

Δημοσ.

Εγώ θα έλεγα πάντως να αφήσεις την assembly, να αφήσεις και την C++ στην οποία έχεις πολλούς και καλούς λόγους να μπερδεύεσαι και να καταπιαστείς με κάποια πιο high level και περισσότερο αφαιρετική γλώσσα όπως πχ. python. Έτσι θα δεις και αποτελέσματα πιο γρήγορα που είναι και αυτό που σου λείπει απ' ότι κατάλαβα. Όταν γίνεις master σε μια τέτοια γλώσσα μετά κατέβα πιο κάτω στην C++ και αφού το κάνεις και αυτό αν σε τρώει ακόμα μπορείς να τυραννηθείς και με assembly. Μου φαίνεται λίγο κάπως να δυσκολεύεσαι με γλώσσες 3ης γενιάς και να πας να μπλέξεις με assembly.

Επίσης προσωπική άποψη, ένα καλό βιβλίο από κάποιον expert στο αντικείμενο του ευτυχώς ή δυστυχώς συνήθως θα σου διδάξει πολλά περισσότερα και σε μεγαλύτερο βάθος από ότι ένας random καθηγητής (που δεν θα μπορεί να κάνει το ίδιο είτε λόγω περιορισμένων γνώσεων είτε λόγω χρόνου).

Δημοσ.

Διαβασέ δυο τρεις φορές το κείμενο και ίσως...κάτι συνδυάσεις.

Προφανώς έχεις μια ιδέα του πώς εκτελείται ένα πρόγραμμα..ένας μετρητής προγράμματος δείχνει την διεύθυνση απ΄ όπου θα πάρει την επόμενη εντολή, άρα αν μια εντολή λέει πήγαινε είκοσι θέσεις μετά, αυτό το 20 θα προστεθεί στον μετρητή προγράμματος...άρα να πως γίνεται η διακλάδωση...Τώρα το άλλο κόλπο είναι το πώς βγαίνει η απόφαση. Ο κώδικας π.χ. έχει μια εντολή που΄κοιτάει σημαίες. Δεν υπάρχουν πολλές σημαίες...μια είναι για το μηδενισμό, μια για τον αρνητικό, μια για το carry,το επιπλέον ψηφίο, και μερικά άλλα για ειδικές δουλειές αλλά όλη η δουλειά γίνεται με τα τρια πρώτα. Το θέμα είναι να καταλάβεις πότε οι σημαίες αλλάζουν. Αυτό γίνεται κάθε στιγμή, σε κάθε εντολή υπάρχουν οι σημαίες που αλλάζουν. Αν μια εντολή δεν αλλάζει τη σημαία, τότε δεν αλλάζει. Αν την αλλάζει, σημαίνει ότι θα την κάνει όπως τη θέλει, και μπορεί να την αφήσει ως έχει, αλλά σίγουρα ξέρουμε πριν καν τρέξει ο κώδικας ότι από το σημείο της εντολής η σημαία θα είναι έτσι αν συμβαίνει αυτό ή το άλλο αν δεν συμβαίνει. Άρα σημασία δεν έχει να μάθουμε τι κάνει κάθε εντολή, απλά ονομαστικά, π.χ. η MOV αντιγράφει (δεν υπάρχει μετακίνηση, δηλαδή διαγραφή στη θέση που διαβάζει η MOV), η όποια σημαία θα εξαρτηθεί από το αποτέλεσμα της MOV. Αν δεν βάλουμε εντολή διακλάδωσης δεν θα λογαριάσουμε την σημαία, ή σε άλλες περιπτώσεις δεν θα έχουμε το ίδιο αριθμητικό αποτέλεσμα (το carry παίζει σε επόμενες πράξεις, οπότε αν θέλουμε να ξεκινήσουμε με μηδενικό, έχουμε εντολή που το αλλάζει σε μηδέν, ή το αφήνει σε μηδέν αν είναι έτσι). 

Αυτά είναι τα βασικά! Μετά έχεις να δεις π.χ. για την MOV πόσοι τρόποι υπάρχουν αντιγραφής, από μνήμη σε μνήμη, από καταχωρητή σε καταχωρητή, βάλε συνδυασμούς με το νου σου και θα υπάρχουν. Υπάρχουν όμως και άλλοι που δεν φαντάζεσαι άμεσα, όπως βάσει δείκτη. Γενικά οι εντολές συνδυάζονται με τέσσερις διαφορετικές αριθμητικές οντότητες, διευθύνσεις ή βάσεις, offsets ή indexes(διαστήματα, ή το επιπλέον από μια βάση), δεδομένα (π.χ. γράμμα, αριθμός) και αριθμός καταχωρητή (εδώ αντί για νούμερα βάζουμε γράμματα π.χ. ΕΑΧ). Συνάμα με αυτά υπάρχουν Operands που πέρνουν τον δείκτη τον βάζουν σε μια βάση και μετά τον αυξάνουν για την επόμενη φορά, όλα σε μια εντολή. Και άλλα που  δεν χρειάζεται να σπάσεις το κεφάλι σου, τα διαβάζεις.

Στο ερώτημα, τι είναι σωστό να χρησιμοποιήσω η απάντηση είναι απλή...ό,τι κάνει το πρόγραμμα να δουλεύει. Δεν υπάρχουν δηλαδή περιορισμοί στην Assembly όπως λέει στη σελίδα του MASM32 For performance out of this world.

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...