Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Vos tutoriels et astuces


Index du Forum » Vos tutoriels et astuces » [Tutoriel] Désassembler des syscalls avec une seule main
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 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


Ninestars Hors ligne Membre Points: 2461 Défis: 24 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 )
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 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)
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Yatis En ligne Membre Points: 580 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
Zezombye Hors ligne Rédacteur Points: 1756 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
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

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


Je t'ai pourtant mis dans le chat l'option -b binary à cet effet !
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Yatis En ligne Membre Points: 580 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.
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 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.
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)
Ityt Hors ligne Membre Points: 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
Lephenixnoir En ligne Administrateur Points: 24146 Défis: 170 Message

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


Commence ici : https://www.planet-casio.com/Fr/forums/topic12345-1-[Tutoriel]-Initiation-a-l-assembleur-SuperH.html
Mon graphe (24 Mars): (gint#27 ; (Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; ...) || (shoutbox v5 ; v5)

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 108 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