Δημοσιεύτηκε: 13 Ιαν 2013, 23:12
από simosx
alkismavridis έγραψε:Αλλά εδώ είναι όλα στατικά.
Αν πχ. πάω και σβήσω το lib2.o που έχει δημιουργηθεί, το πράγμα δουλεύει ακόμα...


Το lib2.asm χρειάζεται να τροποποιηθεί ώστε να είναι εφικτό να δημιουργηθεί μια δυναμική/διαμοιραζόμενη βιβλιοθήκη.
Δες την ενότητα 9.2 στο http://www.nasm.us/doc/nasmdoc9.html

Περιληπτικά,
1. μια διαμοιραζόμενη βιβλιοθήκη τοποθετείται στη μνήμη κατά τη φόρτωση, οπότε ο παραδοσιακός τρόπος χειρισμού των μεταβλητών δε λειτουργεί (πρέπει να καθορίσεις σε σχέση με τη μετατόπιση από τη θέση που θα τοποθετηθεί σε κάθε εκτέλεση). Εδώ χρησιμοποιείς μετατοπίσεις σε σχέση με το GOT, global offset table. Στον παραπάνω σύνδεσμο αναφέρει λεπτομέρειες, στο 9.2.
Χρειάζεται δηλαδή μετατροπή στον κώδικα.

2. Για τη μεταγλώττιση του lib2.asm, γράφεις κάτι σαν
Κώδικας: Επιλογή όλων
ld -shared -o lib2.so lib2.o

οπότε και θα παραχθεί δυναμική/διαμοιραζόμενη βιβλιοθήκη lib2.so.