2017-02-19 5 views
0

J'ai créé un fichier binaire brut créé à partir d'un fichier elf en utilisant objcopy -o binaire. Est-il possible de le déplacer d'un décalage donné? Je crois que l'effet que je cherche serait similaire à utiliser option --change-adresses, puis le convertir en binaire.Est-il possible de déplacer un binaire?

vous remercions d'avance

Répondre

0

de man obdjdump:

objcopy peut être utilisée pour générer un fichier binaire en utilisant une cible de sortie binaire (par exemple, utiliser -O binaire). Lorsque objcopy génère un fichier binaire brut, il produira essentiellement un vidage de la mémoire du contenu du fichier objet d'entrée
. Tous les symboles et informations de déplacement seront ignorés. L'image mémoire commencera à l'adresse de chargement de la section la plus basse copiée dans le fichier de sortie.

(souligné par moi)

Donc, à moins que vous exportez plusieurs sections, qui sont chargées à différents endroits, déplaçant alors la seule section vous pousser dans le binaire n'a aucun effet.

+0

Je ne sais pas si je comprends ce que vous voulez dire. Le code est destiné à s'exécuter dans un environnement intégré, dans un espace d'adressage physique réel. Donc, déplacer la section unique est important. Le binaire doit être préparé pour s'exécuter à l'emplacement spécifique dans lequel il sera chargé. – joseCM

+0

mais ce n'est pas le genre de binaire que produit '-O binary'; "L'image mémoire commencera à l'adresse de chargement de la section la plus basse". Donc, si vous avez seulement une section, peu importe où elle commence, son début sera toujours le début de la sauvegarde binaire. –

+0

Oui bien sûr. Mais dans le script de liaison, les adresses VMA réelles sont spécifiées dans la plage d'adresses d'intérêt. Si, par exemple, une variable globale est située à l'adresse X, le code référencera cette adresse. Je veux changer le binaire pour que le code qui référence la variable (qui sera maintenant à X + OFFSET) soit modifié pour référencer l'adresse correcte. – joseCM