begin process at 2010 02 09 23:10:53
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Assembleur

 > 

Divers

 > 

Aide et documentation

 > 

Problème pour définir des "user-defined offsets" sous IDA


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème pour définir des "user-defined offsets" sous IDA

dimanche 9 novembre 2008 à 11:33:06 | Problème pour définir des "user-defined offsets" sous IDA

ProGamer

Bonjour,

Je rencontre quelques difficulté pour définir des "user-defined offsets" sous IDA 5.2. Plus exactement, les offsets déjà définis dans le code que l'on m'a donné sont erronnés, j'essaie donc de les corriger (en fait, c'est la façon dont IDA les affiche qui est erronnée).

Voici le code en question (oui c'est du 68000 mais je ne pense pas que ça change grand chose) :

00010792 0240 0006                           andi.w  #6,d0
00010796 323B 0056                           move.w  off_107EE(pc,d0.w),d1
0001079A 4EBB 1052                           jsr     off_107EE(pc,d1.w)

[...]

000107EE 0008 007A 00A8 00CA off_107EE:      dc.w loc_7F2+4-off_107EE
000107EE                                     dc.w loc_864+4-off_107EE
000107EE                                     dc.w loc_892+4-off_107EE
000107EE                                     dc.w loc_8B6+2-off_107EE


000107F6                     loc_107F6:
000107F6 1038 F603                           move.b  ($FFFFF603).w,d0

Alors qu'en fait, le résultat souhaité pour les offsets est celui-ci :

000107EE 0008 007A 00A8 00CA off_107EE:      dc.w loc_107F6-off_107EE
000107EE                                     dc.w loc_10868-off_107EE
000107EE                                     dc.w loc_10896-off_107EE
000107EE                                     dc.w loc_108B8-off_107EE


Je précise que les labels loc_107F6, loc_10868, loc_10896 et loc_108b8 existent bien, et que c'est bien la que doivent pointer les offsets.

Je vous indique ce que je fais et le résultat que j'obtiens :
- Je sélectionne les 4 lignes indiquées en gras sur le premier listing
- J'annule la définition comme offset, et je les reséléctionne à nouveau
- Je fais Ctrl+R, la fenêtre des "user-defined offset" s'affiche
- J'entre les données suivantes : OFF16, Base : 0x107EE, Target : 0x107F6, Delta : 0, et je valide
- IDA m'informe qu'il n'est pas nécessaire d'entrer un Target et qu'il peut le calculer lui-même, le problème, c'est que si je répond oui, je me retrouve dans le cas précédent... Donc, je réponds non.
- Une fenêtre "Convert to Offset en masse" apparaît
- A Lower Value, je mets : 0x107F6, et je valide

Résultat : seule la première ligne s'affiche correctement, les autres restent en hexa :

000107EE 0008 007A 00A8 00CA off_107EE:      dc.w loc_107F6-off_107EE
000107EE                                     dc.w $7A
000107EE                                     dc.w $A8
000107EE                                     dc.w $CA

Si je ne sélectionne qu'une ligne parmi les 4, je peux changer la ligne de la façon voulue, mais les autres lignes redeviennent alors en hexa...

J'ai retourné ça dans tous les sens, j'ai même essayé d'utiliser des scripts IDC pour modifier les lignes une à une, mais sans succès.

Maintenant, on peut se demander si ce n'est pas un bug dans IDA.

En effet, si l'ont calcule les offsets résultant, on a par exemple :
Dans le cas erroné (loc_7F2 + 4 - off_107EE) : 0x07F2 + 4 - 0x107EE = FFFF 0008
Dans le cas souhaité : (loc_107F6 - off_107EE) : 0x107F6 - 0x107EE = 0000 0008

Ca fait bien 8 en valeur absolue, mais dans le cas erroné, l'offset est négatif. Or, la valeur 32-bit signée FFFF 0008 ne peut pas être représentée sur un entier 16-bit signé ! Mais on dirait qu'IDA ne s'en préoccupe pas et ignore complètement la parti haute, le signe avec, et croit donc avoir calculé un offset correct...

Voilà, c'est un peu long, mais je remercie d'avance toute personne qui pourra éclairer mes lanternes.


Cette discussion est classée dans : off, dc, loc, 107ee, 000107ee


Répondre à ce message

Sujets en rapport avec ce message

algorithme huffman [ par yannenater ] salut,je voulais savoir si qqun pouvait m'aider pour trouver comment coder en ASM 68000 l'algo de huffman pour compresser un petit texte. le tout débu ERROR PROGRAM 68000 [ par monseigneurdaco ] j ai essayé d ecrire un programme qui calcule le nombre de chaque caractere dans le texte, mais j ai pas mal d erreur de prog et j arrive pas a les tr dc.b ne marches pas sous easy68k? [ par biologue2003 ] bonsoirvoila le programme complet je n'arrive pas a le faire tourner sous easy68kSTART    ORG    $1000  Lea Pile(PC),A7  bsr AFFICHERAFFICHER PEA ADR( pic16f631/690 [ par elsena ] Bonjour, J'ai fait un petit programme afin de me familariser avec la série 16f631/390, avant de réinscrire mes programmes dans ces nouveaux pics. Celu


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,966 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales