[gdb] impossible désassembler

impossible désassembler [gdb] - ASM - Programmation

Marsh Posté le 18-09-2004 à 17:19:21    

Bonjour,
j'ai un programme en assembleur que je modifie progressivement. Entre chaque phase, je vérifie qu'il marche encore en le compilant avec GCC et l'exécutant, j'utilise aussi GDB pour le débugger et le désassembler.
A présent j'ai deux versions du programme : une qui fonctionne normalement, et une que je ne peux plus désassembler avec GDB. J'obtiens l'erreur suivante :

(gdb) disass main
No function contains specified address.


Alors que dans la version précédente, ça fonctionne bien.
 
Je compile avec gcc version 3.2.2 et l'option -g, sur un système linux (redhat 9). Savez-vous d'où peut venir le problème, et surtout comment désassembler le programme ?
 
J'ai eu une idée : dans le "man" de GCC, il est précisé que l'option -fomit-frame-pointer (que je n'utilise pas) peut rendre le debuggage impossible sur certains systèmes. Or au cours de mes modifications, j'ai supprimé l'utilisation du registre %ebp partout où c'était possible. Cela pourrait-il causer le problème ? (Oui je ne connaissais pas cette option au début, sinon je ne l'aurais pas fait à la main... D'ailleurs je ne connais pas grand chose à l'assembleur et à GDB/GCC alors soyez patients s'il vous plaît...)
 
Enfin, merci d'avance, et excusez-moi si la question a déjà été posée: j'ai fait une recherche infructueuse sur le mot "désassembler" dans ce forum.

Reply

Marsh Posté le 18-09-2004 à 17:19:21   

Reply

Marsh Posté le 18-09-2004 à 19:57:14    

tu peux tout simplement utiliser gcc pour désassembler à la source (plutot ne pas assembler du tout)
 
gcc -S machin.c et hop tu as un petit fichier.s :D
 
mais qu'est-ce qui te fais croire que ressasser de l'assembleur te fera debugger ton programme ?

Reply

Marsh Posté le 18-09-2004 à 20:27:03    

Je me suis mal exprimée :)
La source est un fichier .s
Je peux le compiler (avec gcc).
Mais ensuite, je ne peux pas désassembler l'"executable" avec gdb.
 
Plus précisément: j'y arrivais jusqu'à un certain point, et après quelques modifs bénignes, ça ne fonctionne plus. Le programme marche toujours ! Mais j'ai besoin de le désassembler en hexa pour un projet scolaire.

Reply

Marsh Posté le 18-09-2004 à 20:28:31    

euh c'est quoi l'intérêt ? si t'as le source en assembleur ... je comprends pas ce que tu veux faire ...

Reply

Marsh Posté le 18-09-2004 à 20:50:51    

je veux l'hexa de l'executable :) Ya quand même des différences entre l'assembleur que j'écris dans le .s et celui que je désassemble dans gdb :) Et gdb me permettrait de  le désassembler en hexa.
De plus, même en dehors de ça, si je veux débugger le programme il faut bien que j'y mettre des breakpoint... Et comment faire, sans avoir accès aux instructions et à leurs adresses ?
De toute façon j'ai besoin de le désassembler, et j'y arrive pas, voilà. Encore désolée pour la confusion.

Reply

Marsh Posté le 18-09-2004 à 22:46:12    

[:ciler]

Reply

Marsh Posté le 19-09-2004 à 11:01:02    

bah prends le problem dans l'autre sens: qu'est ce que t'as rajouter pour qu'il ne te disassemble pas ta fonction?
 
est ce que au moins, les autres fonctions sont tjrs dessassemblable??

Reply

Marsh Posté le 19-09-2004 à 13:01:43    

Non non, le programme n'est plus désassemblable, du tout. Quelle que soit la fonction ou l'étiquette (je ne suis pas sûre pour la terminologie...) que j'essaye.


Message édité par Misc le 19-09-2004 à 13:02:21
Reply

Marsh Posté le 19-09-2004 à 13:21:24    

tentes:
 
ld --print-map <obj>
objdump -D  <obj>
 
 
est ce que t'aurais pas mis une option d'optimization un peut particuliere :/

Reply

Marsh Posté le 19-09-2004 à 15:23:34    

Ces deux commandes m'affichent vraiment vraiment vraiment beaucoup de choses :/ Je te remercie je vais consulter la documentation pour savoir ce que ça fait. Il y aura sûrement ce que je cherche, dedans.
Pour les optimisations, hé bien, à la compilation non, je fais bêtement tout à la main, mais ce que j'ai optimisé ça  ne casse pas des briques, je me contente de retirer ce qui peut être retiré...
Merci beaucoup pour ces commandes, comme je l'ai précisé au début je n'y connais pas grand chose... Merci :)

Reply

Marsh Posté le 19-09-2004 à 15:23:34   

Reply

Marsh Posté le 19-09-2004 à 16:20:25    

print-map pour voir la liste des symboles
objdump pour dessassembler.
 
regarder si tu trouves bien ta fonction dans les deux et son address.
 
tu mets comme option de compilation en plus?
 
qu'est ce que tu as fait pour que "avant ca marche" et "apres ca marche pu"

Reply

Marsh Posté le 19-09-2004 à 16:44:58    

en fait il faut faire un :
objdump -t <obj> pour ne voir que la liste des symboles. deja regarde si tu vois bien les tients.
 
sinon, j'aurais tendance a dire qu'il te manque un .globl devant tes labels, ou qq chose du genre.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed