Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    Inscrit en
    mars 2009
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : mars 2009
    Messages : 2
    Points : 0
    Points
    0

    Par défaut [GDB]Modifier une variable sans avoir le code source

    Bonjour,
    Je suis entrain de jouer à un jeu dont je n'ai pas le code source et je voudrais touver avec gdb l'emplacement de la variable qui spécifie le nombre de vies restantes (afin de la modifier). J'ai actuellement (au début du jeu) 5 vies; il faudrait donc que je trouve une variable de type int, uint, short ou unsigned short ou quelque chose dans le genre égale à 5.
    J'arrive à faire "attach [PID du processus]" dans gdb mais je ne sais pas comment lui faire faire une telle recherche.
    Comment pourrais-je m'y prendre? (le programme n'est pas open-source)

  2. #2
    Membre émérite
    Inscrit en
    mars 2005
    Messages
    865
    Détails du profil
    Informations forums :
    Inscription : mars 2005
    Messages : 865
    Points : 974
    Points
    974

    Par défaut

    Hum... si tu n'as que le binaire, il y a de fortes chances qu'il soit compilé en release, c'est-à-dire sans symboles de debug ; gdb devrait te le dire ?

    Et sans symboles de debug, il ne te reste plus qu'à analyser le code machine pour trouver ta variable, autant dire que ça va te demander beaucoup de temps...

  3. #3
    Membre habitué
    Profil pro Yassine Chaouche
    Développeur informatique
    Inscrit en
    janvier 2003
    Messages
    170
    Détails du profil
    Informations personnelles :
    Nom : Yassine Chaouche
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Distribution

    Informations forums :
    Inscription : janvier 2003
    Messages : 170
    Points : 142
    Points
    142

    Par défaut

    Tu peux essayer avec un find mais il faut avoir une plage d'addresse valide.

    Dans cet exemple je cherche l'entier 2 dans une plage prise au hasard (l'addresse de départ a été donné par gdb lors de l'attach).

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    (gdb) where
    #0  0xffffe424 in __kernel_vsyscall ()
    #1  0xb6c1bc4d in ?? ()
    Backtrace stopped: previous frame inner to this frame (corrupt stack?)
    (gdb) find 0xb6c1bc4d, +800, (int) 2
    0xb6c1bdaf
    0xb6c1be0b
    2 patterns found.
    (gdb) find 0xb6c1bc4d, +800, (int) 10
    Pattern not found.
    (gdb) find 0xb6c1bc4d, +800, (int) 2
    0xb6c1bdaf
    0xb6c1be0b
    2 patterns found.
    (gdb)

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •