Je dois effectuer objdump
sur un ELF pour obtenir l'adresse et/ou les tailles de fonctions et variables spécifiques ainsi que objcopy
pour le convertir en un format différent pour les opérations effectuées plus tard. Surtout avec la première partie, certaines des opérations effectuées sur le résultat de objdump
sont un peu complexes, donc je suis allé avec la création d'une petite application C++ pour cela. Cela fonctionne, cependant il appelle actuellement objdump
et objdopy
de gcc directement en incluant ses paramètres avec un appel system
.objdump et objcopy en tant que bibliothèque c/C++
Il y a plusieurs raisons pour lesquelles je n'aime pas cette approche, dont la principale est que je dois compter sur l'utilisation de l'ordinateur sur le PC ou les distribuer avec mon propre exécutable et le traiter comme une sorte de dynamique bibliothèque, mais sous forme d'exécutables, que je n'aime pas non plus. Ma question est, existe-t-il une forme de bibliothèque (gcc?) Que je pourrais (de préférence statiquement) lier pour effectuer les mêmes opérations de cette façon? Je préfèrerais utiliser quelque chose de très proche de gcc, surtout quand il s'agit de compatibilité avec les fichiers gcc produits en entrée et en donnant la même sortie, car j'ai déjà ce genre de version de mon propre exécutable.
Quel est le problème que vous essayez de résoudre? * Pourquoi * faites-vous/en avez-vous besoin? –
Donc, vous voulez essentiellement réécrire des parties de 'objdump/objcpy'? Ensuite, vous voudrez probablement jeter un coup d'œil à [libbfd] (ftp://ftp.gnu.org/old-gnu/Manuals/bfd-2.9.1/html_mono/bfd.html) – kaylum
@JesperJuhl Je pensais que c'était pas pertinent pour la discussion mais comme vous l'avez demandé je suppose que je vais répondre. C'est parce que je travaille sur un projet embarqué (bare-metal) qui nécessite d'effectuer quelques étapes initiales avant de démarrer (ou de déboguer) l'application. En particulier, j'ai besoin de charger une partie du binaire dans une mémoire externe, qui est connectée à la MCU principale. Ceci est plus facile avec un chargeur placé temporairement dans la RAM du MCU. Cependant, le PC qui charge l'application cible (dans la mémoire interne et externe) doit connaître l'emplacement des fonctions du chargeur, d'où 'objdump'. –