IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

x86 32-bits / 64-bits Assembleur Discussion :

De binaire à assembleur.


Sujet :

x86 32-bits / 64-bits Assembleur

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut De binaire à assembleur.
    Bonjour,
    Après moultes recherches, je piétine. Voilà mon problème :
    Je souhaite m'amuser un peu avec un jeu abandonware qui a bersé mon enfance. Malheureusement des crash du jeu interviennent régulièrement et bien entendu aucun patch n'existe et le code source n'est pas disponible.
    Avec mes petites connaissances en programmation, j'essaye donc de déboguer ça moi même.
    J'ai pu repérer la dll et la ligne qui crash via le debuger de visual studio, qui montre des instructions asm.
    Seulement, je n'arrive pas a éditer l'asm via visual, et je n'arrive pas a mettre la main sur un logiciel ou un outil qui permet de transformer ma dll en asm.
    Je sais qu'un tel procédé existe et je n'ai pas peur de me lancer à l'attaque de milliers de lignes d'asm non commentées

    Si vous avez des conseils, logicels, experiences, etc, à me proposer, je vous en serais très reconnaissant !

  2. #2
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Bonjour,

    — C'est quel jeu ?
    — Sur quel système d'exploitation ?

    Ce que tu recherches s'appelle un « désassembleur » (disassembler en anglais) Fais une recherche, car il en existe un certain nombre.

    Il est peu probable que ce soit dans une DLL que se trouve ton problème. Plus précisément, s'il ne s'agit pas d'une partie intégrante de ton logiciel, il est possible que ce soit une bibliothèque d'usage général, donc beaucoup plus vaste que tu l'imagines. Des milliers de lignes ne sont qu'un minimum, malheureusement : j'avais désassemblé à une époque les 32 ko de ROM d'un huit bits de 1987 et obtenu 20.000 lignes.

    D'autre part, la plupart de ces produits étaient déjà écrits dans un langage de haut niveau. Généralement en C, souvent en C++ ou en Delphi. Le code assembleur que tu vas obtenir va être assez éloigné du code source original.

    Enfin, si tu obtiens des plantages aléatoires, il est probable qu'il ne s'agisse pas d'un bug mais d'une incompatibilité avec les bibliothèques et les environnements récents. Regarde plutôt dans un premier temps si tu ne peux pas retrouver les bibliothèques originales.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Merci d'avoir répondu,
    Il s'agit de Warhammer - Dans l'ombre du rat Cornu, de 1996 et j'y joue sur windows 7 32bit.
    Le crash que j'obtiens n'est en fait pas aléatoire, c'est tout le temps le même au même moment : lorsque je lance certains sorts. (pas tous, juste certains ! mais tout le temps les mêmes)

    j'ai alors droit à : Exception non gérée à 0x1004a945 dans WHSHR.EXE*: 0xC0000005: Violation d'accès lors de la lecture de l'emplacement 0x00000000.
    ligne asm montrée par Visual : 1004A945 mov ecx,dword ptr [eax]
    où eax = 0

    Si ma mémoire est bonne, même a l'époque quand j'y jouais sur windows 95/98, le bug existait.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Sous UNIX, on appelle cela une « segfault » et c'est extrêmement courant : on veut récupérer la donnée à l'adresse pointée par EAX, mais EAX contient une valeur invalide. Il faut donc vérifier en amont pourquoi cette valeur est invalide en examinant les routines censées avoir modifié EAX et ça peut remonter loin.

    Les problèmes sont que, d'une part, EAX contient probablement la valeur de retour d'une fonction écrite en C ou C++ et que, d'autre part, ça peut vraiment être dû à n'importe quoi : par exemple, si tu alloues 1024 octets de mémoire en C en écrivant « ptr = malloc(1024) », il y a de forte chances pour que le retour de malloc soit transmis dans EAX, lequel va ensuite être écrit à l'adresse occupée par la variable x. Si le programmeur a considéré que le système retournerait toujours de la mémoire et n'a pas géré les erreurs possibles, ce qui arrive fréquemment, alors le programme plantera le jour où le système d'exploitation refusera de le satisfaire.

    Il est aussi tout-à-fait possible que cette valeur soit un handle vers un fichier ou un pointeur vers une ressource comme la mémoire vidéo. Si celui-ci ou celle-ci n'existe plus sous la forme que le jeu connaissait, cela va conduire également à un échec non pris en charge.

    Vois également cette page, si ce n'est déjà fait : elle traite des adaptations à faire pour faire fonctionner le jeu dans un environnement adéquat : WarHammer sous XP.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 9
    Points : 8
    Points
    8
    Par défaut
    Problème localisé : toutes les parties ne chargent pas toutes les ressources (en particulier ici les ressources nécessaires aux sorts). Aillant bien fouillé les fichiers de confs des parties en question et n'ayant rien trouvé, le chargement doit se faire dans les dll associées pas moyen donc de customiser les parties comme j'aurai aimé le faire !
    Merci en tout cas pour tes clarifications et ton aide.

  6. #6
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 360
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 360
    Points : 23 600
    Points
    23 600
    Par défaut
    Comment ça, « customiser les parties » ?

Discussions similaires

  1. [PIC 18F] Convertisseur Décimal/Binaire to DTMF en assembleur
    Par YASSSCOTT dans le forum Autres architectures
    Réponses: 0
    Dernier message: 20/03/2015, 16h56
  2. corespondance code assembleur et binaire
    Par diawdji dans le forum Windows
    Réponses: 6
    Dernier message: 07/07/2007, 04h26
  3. Tutoriels, F.A.Q : la rubrique Assembleur de Developpez.com
    Par Alcatîz dans le forum Assembleur
    Réponses: 3
    Dernier message: 07/06/2007, 20h14
  4. ecrire son OS (assembleur ??)
    Par Anonymous dans le forum Programmation d'OS
    Réponses: 9
    Dernier message: 25/11/2002, 20h25
  5. Quel désassembleur/assembleur pour un exe Windows ?
    Par Anonymous dans le forum x86 32-bits / 64-bits
    Réponses: 6
    Dernier message: 17/04/2002, 11h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo