2009-04-27 5 views
6

Je voudrais ajouter un nouveau drapeau dans un fichier elf. Ce drapeau devrait alors être disponible au noyau dans le descripteur de processus. Ma première idée était d'utiliser libelf, mais malheureusement, il semble y avoir un bug avec Ubuntu. Elfedit aurait probablement été un outil sympa mais je n'ai pas trouvé de version pour Linux, en particulier Ubuntu. Donc, je me demande si quelqu'un peut me suggérer s'il y a un autre outil utile là-bas pour ajouter un drapeau personnalisé à un fichier elf?Modification du fichier elf

Un grand merci pour votre aide!

+0

Quel bogue avez-vous rencontré en liberté? –

+0

Dans le fichier inclus de type.c: 3: /usr/include/libelf.h:98: erreur: attendu spécificateur-qualifier-liste avant 'off64_t' ... Plus peut être trouvé ici: https://bugs.launchpad.net/ubuntu/+s...ls/+bug/201078 –

Répondre

2

Les personnes qui sont capables de modifier le noyau pour profiter du nouveau drapeau ne demanderaient probablement pas comment ajouter le drapeau aux bibliothèques ELF. Alors, comment prévoyez-vous que le noyau utilise ce nouveau drapeau? Quel est le but du drapeau? Puisque vous ajoutez à la librairie standard, vous ne pouvez pas corriger le bogue d'Ubuntu et lui faire savoir que vous l'avez fait (mettez le correctif à sa disposition - mais il faudra probablement le relayer la chaîne).

+0

Oui, vous avez absolument raison. Si je devais être un véritable hacker du noyau, ce serait probablement une tâche simple. Malheureusement, je commence juste avec un travail pratique sur le noyau. Fondamentalement, je veux spécifier un drapeau dans le fichier ELF qui indique au noyau qu'une application a besoin d'un "traitement spécial". Ce traitement spécial devrait se produire lors des changements de contexte, et là je voudrais savoir si la tâche qui a été désactivée avait ce drapeau personnalisé dans le fichier ELF. En d'autres termes, j'ai 2 tâches (1) ajouter un drapeau personnalisé à l'exécutable correspondant (2) rendre ce drapeau personnalisé disponible pour le noyau –

1

Veuillez regarder ELFIO library. Il contient des exemples WriteObj et Writer. En utilisant la bibliothèque, vous serez capable de créer et/ou de modifier les fichiers binaires ELF.

+0

J'aime vraiment la bibliothèque et j'ai travaillé les derniers jours avec elle (en essayant de la convertir en bibliothèque). J'ai obtenu toutes les sources avec les templates et les macros convertis (alias split en déclarations et définitions), mais maintenant la lib plante (lol). Eh bien, pourriez-vous vous considérer pour en faire une "vraie" bibliothèque? – lama12345

0

(bien que vieille question, mais à titre de référence, je suis en train d'écrire réponse basée sur ma propre expérience)

je suggère de lire le fichier elfe dans struct mémoire, apporter des modifications aux drapeaux et la mémoire de processus de charge avec votre struct en mémoire. Cette méthode nécessitera moins d'efford que la correction de bogue. Pour commencer, vérifiez le fichier elf.c pour elf, l'en-tête du programme, les entêtes de section struct. vous pouvez lire l'en-tête du fichier dans votre structure qui doit avoir trois membres struct pour elf, program, section. Commencez à lire dans votre structure à partir de l'en-tête elf. lisez ensuite l'en-tête du programme sur le décalage donné dans l'en-tête elf (itérativement pour tous les en-têtes de programme). De la même manière, vous pouvez lire toutes les sections dans les en-têtes de section. L'encapsulation de 3 structures d'en-têtes dans votre propre structure vous donne également la possibilité d'avoir des données supplémentaires dans votre autre structure.

Questions connexes