Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » [Tutoriel] Désassembler des syscalls avec une seule main
LephenixnoirEn ligneAdministrateurPoints: 17180 Défis: 142 Message

[Tutoriel] Désassembler des syscalls avec une seule main

Posté le 20/10/2016 11:29

Voici quelque chose que j'ai longtemps gardé en réserve, et rédigé ces derniers jours pour me détendre. J'espère pouvoir vous faire découvrir avec ce tutoriel, l'intérêt du rétro-engineering et tout ce qu'on peut apprendre simplement en désassemblant des syscalls (rien que ça, enfin).

Ce tutoriel a été rédigé avec LaTeX et essaie d'être un peu exhaustif. Vous pouvez le télécharger en fichier joint au format PDF.

Désolé pour la référence au fxSDK, que vous ne pouvez manifestement pas encore utiliser parce que les outils ne sont pas réellement prêts. J'ai utilisé fxos tout le long du tutoriel, et modifié un peu les informations qu'il a renvoyé en sortie (par exemple, quand il y a des octets de données qui peuvent s'interpréter comme des instructions, fxos décode les instructions, mais j'ai retiré cette information qui ne ferait qu'embrouiller le lecteur). J'essaierai de vous fournir un outil simple à utiliser quand je le publierai.

Voilà, j'espère que cette technique de désassemblage pourra vous être utile

Fichier joint


NinestarsHors ligneMembrePoints: 2254 Défis: 22 Message

Citer : Posté le 20/10/2016 12:25 | #


Très interressant ! Tu as fais un vrai travail de recherche, bien joué. Maintenant je comprend comment ça fonctionne derière tout ça.
C'est interressant que tu aies pris pour exemple la fonction Sleep(), ton analyse justifie les propos que tu tenais concernant ma lib de gestion du clavier qui s'utilise avec des Sleep(). En fait oui sleep et vraiment pourri
(ps petit coquille avec le mot desassembleur au 3.3 )
LephenixnoirEn ligneAdministrateurPoints: 17180 Défis: 142 Message

Citer : Posté le 20/10/2016 13:25 | #


Merci ! J'ai eu le temps de bien digérer la méthode depuis que TeamFX m'a expliqué ça pour la première fois sur Casiopeia

Effectivement, la fonction Sleep() est un bon exemple parce qu'elle est à la fois très simple et très moche. J'ai de la chance d'avoir pu disposer de cet exemple

(corrigé, merci)
YatisEn ligneMembrePoints: 470 Défis: 0 Message

Citer : Posté le 11/12/2018 21:03 | #


Merci pour ce tutoriel de qualité j'ai appris beaucoup de choses <3

Seulement j'ai un petit souci, j'aimerais déassembler des syscalls (histoire de mieux comprendre le fonctionnement de la calto).J'arrive à déassembler des programme simple, mais impossible de trouver la table des syscalls. Je suppose que ça se trouve dans l'image de l'os, mais impossible de le d'assembler
J'ai essayé avec un .fls et un .bin mais rien ne fait j'ai toujours la même erreur:
sh3eb-elf-objdump a écrit :

file format not recognized


La commande que je fais:
Moi même a écrit :

sh3eb-elf-objdump -m sh3 -d test.elf -D OS_205_E.bin > test.s
ZezombyeHors ligneRédacteurPoints: 1652 Défis: 13 Message

Citer : Posté le 11/12/2018 21:04 | #


C'est dans l'OS, mais le .bin tout entier n'est pas forcément au format elf, il y a par exemple un entête qui n'est pas dans le format elf.
Divers jeux : Puissance 4 - Chariot Wars - Sokoban
Ecrivez vos programmes basic sur PC avec BIDE
LephenixnoirEn ligneAdministrateurPoints: 17180 Défis: 142 Message

Citer : Posté le 11/12/2018 21:07 | #


Je t'ai pourtant mis dans le chat l'option -b binary à cet effet !
YatisEn ligneMembrePoints: 470 Défis: 0 Message

Citer : Posté le 12/12/2018 09:44 | #


Lephenixnoir a écrit :
Je t'ai pourtant mis dans le chat l'option -b binary à cet effet !

Ma dyslexie me joue des tours visiblement, j'avais fait:
Moi même a écrit :

sh3eb-elf-objdump -m sh3 -d binary -D OS_205_E.bin > test.s

donc -d au lieu de -b, c'est pour ça que ça fonctionnait pas
Merci

Ajouté le 10/02/2019 à 17:54 :
Actuellement j'essaie de déassembler le syscall 0x117. Seulement voila, je me trouve un peu perdu sur certain point du code. ( )
Ce qui me pose problème c'est la différence entre jsr et jmp. La doc me dit que jsr "sauvegarde pr" puis saute a l'adresse donnée alors que jmp ne fait que sauter à l'address sans toucher à rien.
Je sais que pr signifie Procedure Register mais impossible de comprendre son utilité... et du coup quel avantage on a à utiliser jsr plutôt que jmp.
LephenixnoirEn ligneAdministrateurPoints: 17180 Défis: 142 Message

Citer : Posté le 10/02/2019 17:55 | #


pr est le registre qui dit à quel endroit il faut retourner quand on appelle rts. C'est-à-dire, où continuer une fois la fonction actuelle terminée.

Donc, jmp saute comme si tu avais fait un bra, un bt ou un autre saut normal, tandis que jsr saute dans une sous-routine ; ça fait un appel de fonction. Le code reprend après le jsr une fois que la sous-fonction aura exécuté rts.
ItytHors ligneMembrePoints: 216 Défis: 0 Message

Citer : Posté le 10/02/2019 18:04 | #


Bon j'aimerais bien lire, mais je dois d'abord apprendre le langage d'assemblage...
salut je m'appelle sacha et je viens du bourg-palette et voici mon meilleur ami pikachu
LephenixnoirEn ligneAdministrateurPoints: 17180 Défis: 142 Message

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2020 | Il y a 61 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd