QUAKER

W32DSM 8.93
 

Un p'tit click sur mon sponsor SVP.


Ouvrir "Disassembler"

Dans "Disassembler Options"-->cochez :Enable JUMP CONDITIONAL ,JUMP INCONDITIONNAL + CALL (X référence)--> Ces choix sont fait pour afficher ou non les CALL et JUMP qui ont appelés les routines qui suivent .


 
 

Dans cet exemple vous voyez que l'adresse 0001:0A62 peut être appelé par un JUMP à l'adresse 0001:0A5D--> "Referenced by a (U) nconditionnal ... Jump ..."

Idem pour 0001:0A64 avec le CALL à l'adresse 0001:0A64--> "Referenced by a Call..."

Donc très important (pour suivre dans le listing désassemblé le déroulement du prog ou les eventuels chemins qu'il pourrait prendre)

Si vous ne voyez que des caractères illisibles il est nécessaire de "régler" les "Fonts"

Evidement il faut le sauvegarder-->Save Disassembly Text File and Créate Project File

Il sera crée un fichier du prog désassemblé avex l' extention ALF dans un répertoire nommé Wpjfiles qui vous pourrez lire avec un éditeur texte quelconque et un fichier projet avec l'extention WPJ qui vous sera nécessaire pour lancer le debugger (aussi présent dans le rép Wpjfiles).

LES MENUS

SEARCH -->FIND TEXT : Utile pour la recherche de suite de caractères de toutes sortes.

GOTO :

Goto code start-->Aller à la première ligne du code désassemblé (CtrlS)

Goto program entry point-->Aller à la première ligne du démarrage du prog.(F10)

Goto page-->Aller à la page désirée (toutes les indications se trouvent en bas de l'écran lors de vos déplacements dans le prog).(F11)

Goto code location-->Allez à l'adresse mémoire désirée.(En 32 bits : adresse Code offset) (En 16 bits : Code segment + Code offset) (ShiftF12)

EXECUTE TEXT.

Lors d'une étude du prog avec le listing désassemblé , quand vous vous trouvez sur un CALL ou un JUMP (surlignement en jaune vert) : vous pouvez simuler le saut ou le CALL en cliquant sur "EXECUTE JUMP" ou "EXECUTE CALL" vous irez automatiquement à l'adresse indiquée. De plus vous pouvez revenir en arrière avec les commandes "Return from...".

Functions.

Les imports-->Vous avez ici tous les fichiers extérieurs donc le prog a besoin pour tourner (qu'il importe) essentiellement les API de Windoz69 (affichés en bleu dans le listing): très utiles----->vous pouvez aussi poser des BPX dessus . Visionnez les pour chaque prog : elles pourront vous être très utiles si vous voulez debugger avec SOFTICE .

Les exports--Vous avez ici tous les fichiers à qui le prog envoie (exporte) des infos.

HEX DATA.

La représentation du prog en Hexadécimal

REFS .

Menu réferences-->Affichage des menus du prog.

Dialog références-->Affichage des Dialogues du prog.

String data références -->Affichage des commentaires concernant déroulement du prog. Toutes les chaines de caractères (entre autres : le texte des boites dialogues) et repères posés par le créateur du prog pour s'y retrouver et qui nous sont bien utiles.Et c'est avec ces repères que W32dasm est génial .Le principe est de relever tous les contenus des boites dialogue lors du déroulement normal du prog (ex: Votre période d'évaluation est terminée ; Veuillez vous enregistrer . . .etc ) et ensuite de trouver dans ces" String Dat ..." les mêmes phrases ou tout du moins ce qui se rapproche afin de se retrouver dans la routine qui crée ces boites de dialogue.

Le fait de double cliquer sur une ligne quelconque vous amène directement sur la ligne concernée dans le listing (vérifier si il y en a plusieurs).Je précise que certain de ces menus peuvent être absents suivant le type de prog.

Ouvrir Debug-->Debugger Options-->Ne laissez activez (pour l'instant)"Debug only this process" et "Display program génerated exeptions".

LE DESASSEMBLAGE

Ouvrir "Disassemble"--->"Open File To Disassemble"---> sélectionnez votre prog...

Double click dessus ou "Ouvrir".

Le processus de désassemblage commence

Si vous voyez en bas le désassemblage s'effectuer ligne par ligne :c'est vraisemblablement un prog 16 bits--->W32dsm pourra donc seulement le désassembler mais pas le debugger.

Par contre si vous voyez la procédure s'effectuer : "Pré processing . . .Procéssing Call . . .Procéssing Jmp . . .Disassemble . . .--->Prog 32 bits + debugging possible (suivant la taille du prog : cela peut être long ).

Vous voyez apparaître le listing du prog.

Déjà avec les "string data ref", vous pouvez essayé de situer quelques routines importantes suivant le but que vous recherchez .

Ouvrir "Goto"---->" Goto Program Entry Point"--->vous arrivez à la ligne de début du prog.

Ici à ce niveau vous pouvez ,si vous êtes un pro de l'assembleur ( que je ne suis pas ), tracer le prog (avec les flêches clavier haut et bas) manuellement : Méthode du " Dead Listing ". Heureusement il ya le debugging . . .

LE DEBUGGING

Si vous voulez debugger un prog désassemblé que vous avez déjà enregistré :

Ouvrir "Project"-->"Open Project File"-->vous devez voir "votre prog .wpj"

Double Click dessus.

Ouvrir "Debug"--->"Load Process"

La fenêtre du prog désassemblé se ferme ; deux fenêtres s'ouvrent : la fenêtre du traçage et la fenêtre qui affiche les " informations ,données ,paramètres ...etc " qui passent par les registres du microprocesseur .

La fenêtre de traçage.
 
 

AutoStep Into (F5)-->Traçage automatique en entrant dans les Call.

AutoStep Over (F6)-->Traçage automatique en ne rentrant pas dans les Call.

Step Into (F7)-->Traçage ligne par ligne en entrant dans les Call.

Step Over (F8)-->Traçage ligne par ligne en rentrant pas dans les Call.

Pause-->Arrêt du traçage (utile pour stopper les traçage Auto...).

Vous constaterez que quand vous tracez ligne par ligne (ou en "auto") les lignes parcourues dans le listing deviennent rouges ce qui pourra vous être très utiles.

Run (F9)-->Lancement normal du prog (toujours sous le contrôle de Wdsm) .Les modifs que vous aurez effectuées seront pris en compte ainsi que les BPX.(mais pas réellement dans le prog).

Goto Adresse-->Allez directement à une adresse désirée.

La pose de BPX (break point) s'effectue avec la touche F2(apparition d' un petit carré jaune sur la gauche de la ligne concernée dans le listing et d'une étoile dans la fenêtre de traçage ).

Patch Code-->Ouverture d'une fenêtre pour modifier fictivement une instruction.

Modif d'instruction dans la fenêtre "PATCH CODE"'

EIP-->L'adresse oû vous êtes et son instruction.

Notez en visionnant dans la fenêtre traçage l'adresse de l'instruction suivante.

Enter New Instruction Below-->Entrez votre nouvelle instruction-->Enter.

Un message d'erreur s'affichera si le nouveau code n'est pas valide.

Votre nouvelle instruction apparaîtra dans la grande fenêtre en dessous (en ASM et Hexa).

L'adresse suivante (et l'instruction) dans EIP apparaît-->Important : il y a de fortes chances pour que la nouvelle instruction que vous avez rentrée n'ait pas la même taille mémoire que celle que vous avez remplacée . Vous devez impérativement compenser par des NOP si elle est inférieure afin de retrouver la même instruction suivante .Ne pas mettre d'instruction de taille supérieure. Et évidement si égale : OK .

Notez le code Hexa.(Cela vous servira pour la vrai modif sous éditeur HEXA)

Continuez vos modifs si vous avez d'autres lignes à modifier. Elles s'incrémenterons au fur et à mesure dans la grande fenêtre.

Clear Patch-->Effacer toutes vos modifs.(revenir à l'état initial).

Remove Last Line-->Effacer la dernière ligne entrée.

Apply Patch-->Appliquer vos modifs (+ confirmation).

Close-->Fermeture de la fenêtre (+ confirmation).

( FIN DU PATCH.)

Terminate-->Arrêt du debuggeur (passe à "Close" quand le prog est arrêté ).

La fenêtre contenu des registres.

Au centre vous voyez tous ce qui "passent" par les registres du processeur : "Source for Data Disp 1",(EAX,EBX,ECX,EDX,ESI,EDI,EBP et EIP étant l'adresse mémoire où vous êtes). Ainsi que dans la case en haut à gauche.Vous les verrez évolué au fur et à mesure du traçage.

Donc à visionner aux moments importants du traçage notamment lors de comparaison.

Une calculette pour les conversions Hex:Dec est utile (présente comme utilitaire dans Hworks32) .

Vous avez aussi la touche "Oper" (presque en bas sur la gauche) qui quand elle est activée vous indique le contenu des opérandes : important , par exemple, pour savoir si les sauts conditionnels vont être effectués ou pas.

Les deux lignes du bas vous indiquent l'état du processus.(Dans ce cas de figure : "Non Fatal Access Violation " = Planté ...

La case "Bpts" vous rappelle les BPX que vous avez posés. "Clear" pour les supprimer.

En dessous "Actives Dlls": les DLL actives pendant le déroulement du prog.

SOMMAIRE