2010-12-11 53 views
2

Jusqu'à maintenant j'ai toujours utilisé des ressources sous MSVC++ pour accéder aux données brutes depuis l'intérieur de mes programmes et je n'ai jamais travaillé directement avec un éditeur de liens, mais maintenant je suis sous Linux et j'utilise un compilateur croisé pour produire des fichiers elf. Un ami et moi travaillons sur un OS de jouet. Une chose que nous devons accomplir à un moment donné est qu'un gros morceau de données brutes arbitraires soit lié à l'exécutable. Nous voulons que les données soient situées près de la fin de l'exécutable et doivent également pouvoir obtenir un pointeur vers ces données brutes. Il est probablement intéressant de noter que GRUB charge le noyau en mémoire au démarrage. Une de nos idées précédentes consistait simplement à écrire un programme pour convertir les données dans un fichier source C où les données étaient représentées sous la forme d'un tableau d'octets, mais nous pensons que c'est un peu brouillon et nous préférons l'avoir lié directement.Liaison de données/ressources brutes en exécutable en utilisant LD

Des idées? Je n'ai pas besoin des détails horribles juste un large aperçu de ce qui doit être fait. Je pense que nous devrons probablement apporter quelques modifications à notre script d'éditeur de liens.

Répondre

2

Jetez un oeil à l'appel objdump --add-section après avoir terminé le lien pour ajouter les données arbitraires dans le fichier ELF. Alternativement, si vous écrivez un noyau, vous pouvez faire ce que Linux fait pour charger un initrd et juste charger GRUB votre noyau puis charger les données séparément dans un emplacement mémoire connu et y accéder de cette façon.