arm64_assembly_linux — συγκεντρωτικός οδηγός — DedSec Project
arm64_assembly_linux — συγκεντρωτικός οδηγός ARM64 Assembly (Linux) Συνήθης χρήση: Προγραμματισμός συστημάτων. Προτεινόμενη επέκταση αρχείου: .s . Εκτέλεση / περιβάλλον: Μεταγλώττιση για…
ARM64 Assembly (Linux)
Συνήθης χρήση: Προγραμματισμός συστημάτων.
Προτεινόμενη επέκταση αρχείου: .s.
Εκτέλεση / περιβάλλον: Μεταγλώττιση για στόχο Linux AArch64 με assembler.
Αρχικό παράδειγμα
// Conceptual AArch64 assembly fragment
.global _start
_start:
mov x0, #42
mov x8, #93
svc #0
Πώς διαβάζεται
Δείχνει κωδικό εξόδου, όχι μήνυμα· οι συμβάσεις ABI διαφέρουν.
Συνηθισμένο λάθος
Δείχνει κωδικό εξόδου, όχι μήνυμα· οι συμβάσεις ABI διαφέρουν. Έλεγξε την έκδοση διερμηνευτή/μεταγλωττιστή και μην εκλαμβάνεις το δείγμα ως έτοιμη εφαρμογή παραγωγής.
ARM64_Assembly_Linux — Αναλυτικός οδηγός εξάσκησης
Πραγματικό αρχικό δείγμα
// Conceptual AArch64 assembly fragment
.global _start
_start:
mov x0, #42
mov x8, #93
svc #0
Περιβάλλον: Compile for an AArch64 Linux target with its assembler.. Επιβεβαίωσε ότι έχεις το σωστό compiler, host ή simulator πριν θεωρήσεις την έξοδο αξιόπιστη. Για scripts με πρόσβαση σε προσωπικά αρχεία ή ρυθμίσεις, χρησιμοποίησε προσωρινά και read-only δεδομένα.
Συγκεκριμένος στόχος υλοποίησης
Γράψε AArch64 Linux userspace πρόγραμμα που τελειώνει με exit status μέσω x8 syscall και svc #0. Έλεγξε echo $? στον σωστό host.
Κρίσιμο λάθος που πρέπει να αναγνωρίζεις
Το Linux syscall ABI διαφέρει από macOS/ARM32· x0 για arguments, x8 για αριθμό. Λάθος αρχιτεκτονική δεν εκτελεί binary.
ARM64_Assembly_Linux — Διαδρομή ουσιαστικής εξάσκησης
Μικρό πρόγραμμα τερματισμού
Σε Linux AArch64 οι kernel syscalls χρησιμοποιούν το x8 για τον αριθμό κλήσης και x0..x5 για ορίσματα. Το exit της αρχιτεκτονικής έχει αριθμό 93. Το παρακάτω είναι πειραματικό Linux-specific assembly και όχι φορητό API για κάθε ARM64 λειτουργικό.
.global _start
_start:
mov x0, #0
mov x8, #93
svc #0
Συναρμολόγησε το με assembler για AArch64, κάνε link με σωστό entry point και τρέξε το μόνο σε συμβατό περιβάλλον. Ένα 64-bit ARM chip με Android ή iOS δεν σημαίνει ότι δέχεται αυτούσια την ίδια ABI. Ο κώδικας διακόπτει τη διεργασία με status 0 χωρίς να επιστρέψει σε C runtime.
Registers και μνήμη
Τα x0..x30 είναι 64-bit general registers, ενώ τα w0..w30 προσφέρουν 32-bit όψη τους. Η εγγραφή σε w register μηδενίζει τα ανώτερα 32 bits του αντίστοιχου x register. Δημιούργησε ξεχωριστή διαδικασία που φορτώνει μεγάλη 64-bit τιμή και κατόπιν ενημερώνει το w0· παρατήρησε τη διαφορά και εξήγησε γιατί δεν είναι ισοδύναμο με ενημέρωση μόνο του χαμηλού μισού.
Πρόσκληση συνάρτησης
Διάκρινε την Linux syscall ABI από τη συνηθισμένη AAPCS64 function-calling convention. Στην τελευταία τα x0..x7 χρησιμοποιούνται για πολλά ορίσματα/αποτελέσματα, ενώ ο link register x30 φυλάσσει return address. Μη θεωρείς ότι ένα syscall συμμορφώνεται σε κάθε λεπτομέρεια με μια συνηθισμένη BL κλήση.
Ελέγξιμη εργασία
Κατασκεύασε δεύτερο πρόγραμμα με exit status 7 και έλεγξε την τιμή εξόδου από το shell. Πρόσθεσε λάθος syscall number σε απομονωμένο πείραμα και εξήγησε γιατί η επιστροφή αρνητικού error code δεν πρέπει να συγχέεται με την επιτυχία της κλήσης. Τεκμηρίωσε target triple, assembler, linker και πώς επιβεβαίωσες ότι εκτελέστηκε σε AArch64 αντί για emulation. Η εργασία δεν έχει εκτελεστεί στο παρόν audit.