Friday, August 24, 2012

Debug: Apprenez à craquer fenêtres, les programmes ect manuellement

Debug: Apprenez à craquer fenêtres, les programmes ect manuellement


Debug est un programme qui est livré avec les versions modernes de DOS (je ne sais pas quand j'ai commencé à expédier avec DOS). Quoi qu'il en soit, tous les utilisateurs Windows doivent-il déjà.

C'est un excellent outil pour debuging programmes, unassembling et à la fissuration, et la lecture "cachés" des zones de mémoire, comme le secteur de boot, et bien plus encore.

Ce qui suit a été copié à partir d'un tutoriel de montage qui est l'auteur nous ne pouvons pas de crédit, parce que nous n'avons aucune idée qui il est.

Obtenez en mode DOS et tapez "debug", vous obtiendrez une invite comme ceci:
-

"?" maintenant le type, vous devriez obtenir la réponse suivante:
Un assemblage [adresse]
comparer l'adresse de gamme C
dépotoir D [large]
entrez l'adresse E [liste]
remplir la liste F gamme
vont G [= adresse] [adresses]
hex H valeur1 valeur2
entrée du port, je
L charge [adresse] [lecteur] [firstsector] [numéro]
déplacer l'adresse gamme M
nom de N [chemin] [arglist]
sortie O du port octets
procéder P [= adresse] [numéro]
quitter Q
registre R [s'inscrire]
liste plage de recherche S
trace T [= adresse] [valeur]
unassemble U [large]
écrire W [adresse] [lecteur] [firstsector] [numéro]
d'allouer de la mémoire étendu XA [pages #]
désallouer la mémoire paginée XD [gérer]
Plan élargi pages de mémoire XM [Lpage] [PPAGE] [gérer]
afficher élargi XS état de la mémoire

Permet de passer par chacune de ces commandes:
Assembler:

-Une
107A: 0100

A ce stade, vous pouvez commencer à assembler certains programmes, tout comme l'aide d'un assembleur. Cependant l'assembleur de débogage est très limité car vous aurez sans doute remarqué. Essayons d'entrer dans un programme simple:

-Une
107A: 0100 MOV AH, 02
107A: 0102 MOV DL, 41
107A: 0104 INT 21
107A: 0106 INT 20
-G
Une

Programme terminé normalement

C'est le même programme que nous avons fait à la fin du chapitre précédent. Remarquez comment vous exécutez le programme que vous venez avec "g", et notent également comment la partie set-up n'est pas là? C'est parce que debug est tout simplement trop limité pour soutenir cela.
Une autre chose que vous pouvez faire avec l'assemblage est de spécifier l'adresse à laquelle vous voulez commencer, par défaut, il s'agit 0100 puisque c'est là que tous les fichiers. COM commencer.
Comparez:

Comparer prend 2 blocs de la mémoire et les affiche côte à côte, octet par octet. Permet de faire un exemple. Tout à fait hors de débogage si vous n'avez pas déjà en utilisant "q". Maintenant, tapez "debug c: \ command.com"

-C 0100 l 8 0200
10A3: 0100 06 7A 10A3: 0200

Cette commande a comparé décalage 0100 avec 0200 pour une longueur de 8 octets. Debug répondu à l'emplacement qui était différent. Si 2 emplacements étaient les mêmes, debug serait tout simplement les omettre, si tous sont le débogage même serait tout simplement revenir à l'invite sans réponse.
Dump:

Dump sera le dump d'un segment de mémoire spécifié. Pour le tester, le programme de montage code qui encore une fois:

C: \> debug
-Une
107A: 0100 MOV AH, 02
107A: 0102 MOV DL, 41
107A: 0104 INT 21
107A: 0106 INT 20
D-0100 l 8
107A: 0100 B4 02 B2 41 CD 21 CD 20
A. ...!.

Le "B4 02 B2 41 CD 21 CD 20" est le programme que vous venez de faire en langage machine.

B4 02 = MOV AH, 02
B2 41 = MOV DL, 41
CD 21 = INT 21
CD 20 = INT 20

Le "... A.!». partie est votre programme en ASCII. Le "." représentent les caractères non imprimables. Notez que le A il.
Entrez:

C'est l'une des commandes dures. Avec elle, vous pouvez entrer / modifier certaines zones de mémoire. Permet de changer notre programme de sorte qu'il imprime un B au lieu d'un A.
-E 0103 <- édition du programme au segment 0103
107A: 0103 41,42 <- Changement de 41 à 42
-G
B

Programme terminé normalement
-
N'était-ce pas étonnant?
Remplissez:

Cette commande est assez inutile, mais qui sait ....
Il remplit la quantité de la mémoire avec les données spécifiées. Permet par exemple effacer toute la mémoire du segment 0100 à 0108, qui se trouve être notre programme.
-F 0100 l 8 0 <- décalage de fichier 0100 pour une longueur de 8 octets avec 0
-D 0100 l 8 <- vérifier que cela a fonctionné
107A: 0100 00 00 00 00 00 00 00 00 .......
Yep, il a travaillé.
Aller:

Jusqu'à présent, nous avons utilisé go (g) pour démarrer le programme que nous venons de créer. Mais Go peut être utilisé pour beaucoup plus. Par exemple, disons que nous voulons exécuter un programme à 107B: 0100:
-R CS <- définir le registre CS pour pointer vers 107B
CS 107A
: 107B
-G = 100

Vous pouvez également définir des points d'arrêt.
-A <- entrer dans notre programme initial nous avons donc quelque chose de
107A: 0100 MOV AH, 02 à travailler avec
107A: 0102 MOV DL, 41
107A: 0104 INT 21
107A: 0106 INT 20
-G 102 <- mettre en place un point de rupture au 107A: 0102

À ce stade, le programme s'arrêtera, d'afficher tous les registres et l'instruction en cours.
Hex:

Cela peut être très utile. Il soustrait et ajoute deux valeurs hexadécimales:
H-2 une
0003 0001 <- 2h + 1 + = 3h et 2h - 1h = 1h

Ceci est très utile pour calculer une longueur programmes, comme vous le verrez plus tard.
Entrée:

C'est l'une des commandes les plus avancées, et j'ai décidé de ne pas parler trop pour l'instant. Il va lire un octet de données de n'importe lequel de vos ordinateurs ports I / O (clavier, souris, imprimante, etc).

I-3FD
60
-

Vos données peuvent être différentes.
Dans le cas où vous voulez en savoir, 3FD est port Com 1, également connu sous le nom Adaptateur asynchrone d'abord.
Charge:

Cette commande dispose de 2 formats. Il peut être utilisé pour charger le fichier spécifié avec le nom de commande (n), ou il peut charger un secteur spécifique.

-N c: \ command.com
-L

Cela va charger command.com en debug. Quand un programme valide est chargée de tous les registres seront mis en place et prêt à exécuter le programme.
L'autre méthode est un peu plus compliqué, mais aussi plus utile potentiel. La syntaxe est

L <adresse> <drive letter/> <sector> <montant à load>
100-l 2 10 20

Cela va charger à partir de 0100 de décalage à partir du lecteur C (0 = A, 1 = B, 2 = C, etc), 10h pour les secteurs du secteur 20h. Cela peut être utile pour récupérer les fichiers que vous avez supprimés.
Déplacer:

Déplacer prend un octet de l'adresse de départ et il se déplace à l'adresse de destination. C'est très bon pour déplacer des données temporaires dans une zone de libre, que de le manipuler sans avoir à vous soucier de qui affecte le programme d'origine. Il est particulièrement utile si elle est utilisée en conjonction avec la commande r à laquelle je vais faire plus tard. Essayons un exemple:
-A <- entrer dans notre programme initial nous avons donc quelque chose de
107A: 0100 MOV AH, 02 à travailler avec
107A: 0102 MOV DL, 41
107A: 0104 INT 21
107A: 0106 INT 20
-M 107A: 0100 L 8 107B: 0100 <- plus de 8 octets à partir de 107A: 0100 en 107B: 0100
E-107B: 0103 <- edit 107B: 0103
107B: 0103 41,42 <- et de les modifier 42 (
-D 107A: 0100 L 8 <- assurez-vous que cela a fonctionné
107A: 0100 B4 02 B2 41 CD 21 CD 20 ... A.!.
-D 107B: 0100 L 8
107A: 0100 B4 02 B2 42 CD 21 CD 20 ... B.!.
-M 107B: 0100 L 8 107A: 0100 <- restaurer le programme d'origine car nous aimons les changements.
Nom:

Cela va régler déboguer avec un nom de fichier à utiliser pour I / O commandes. Vous devez inclure l'extension de fichier, et vous pouvez utiliser les commandes d'addition:

-N c: \ command.com
Sortie:

Exactement ce que vous pensez qu'elle est. Sortie envoie des trucs à un port d'E / S. Si vous avez un modem externe avec ces lumières froides à ce sujet, vous pouvez tester ceci. En savoir quel port votre modem est sous tension et utiliser le nombre hexadécimal correspondant ci-dessous:

Com 1 = 3F8 - 3FF (3DF pour le mien)
Com 2 = 2F8 - 2FF
Com 3 =??? -??? (Si quelqu'un sait, s'il vous plaît faites le moi savoir)

Maintenant, tournez sur la DTA (Data Terminal Ready) bits en envoyant 01h à elle:
-O XXX 1 <- XXX est le port COM en hexadécimal

Dès que vous appuyez sur Entrée, jetez un oeil à votre modem, vous devriez voir une lumière s'allume. Vous pouvez vous amuser encore plus avec la commande de sortie. Dites quelqu'un a mis un de ces mots de passe BIOS sur "votre" ordinateur. Généralement, vous devez retirer la batterie pour se débarrasser de lui, mais pas plus:

MI / BIOS AWARD
O-70 17
O-71 17

QPHOENIX BIOS
-O 70 FF
O-71 17

QGENERIC
O-70 2E
-O 71 FF

Ces commandes seront effacer la mémoire du BIOS, ce qui désactive le mot de passe.
Procéder:

Produit dans l'exécution d'un programme, généralement utilisés ensemble Trace osier, que je vais couvrir plus tard. Comme la commande go, vous pouvez spécifier une adresse à partir duquel commencer

en utilisant l'adresse =
-P 2

Debug répondra avec les registres et la commande en cours d'être exécutés.
Bien:

Cela a obtenu d'être la caractéristique la plus avancée de débogage, il sort de débogage!

-Q
Inscrivez-vous:

Cette commande peut être utilisée pour afficher la valeur actuelle de tous les registres, ou manuellement les définir. Ceci est très utile pour l'écriture de fichiers comme vous le verrez plus tard.

-R AX
AX: 011B
: 5
-
Recherche:

Une autre commande très utile. Il est utilisé pour trouver l'occurrence d'un octet spécifique, ou une série d'octets dans un segment. Les données pour rechercher peut soit par caractères, ou une valeur hexadécimale. Les valeurs hexadécimales sont entrés avec un espace ou une virgule entre les deux, et les personnages sont enfermés avec des guillemets (simple ou double). Vous pouvez également rechercher des caractères hex et avec la même chaîne:
-Nc: \ command.com <- command.com charge donc nous avons quelques données à rechercher dans
-L
-S 0 l 0 "MS-DOS" <- bloc de mémoire de recherche complet pour «MS-DOS"
10A3: 39E9 <- trouve la chaîne dans 10A3: 39E9

REMARQUE: la recherche est sensible à la casse!
Trace:

Il s'agit d'une fonctionnalité vraiment beaucoup de débogage. Elle retracera à travers un programme d'une instruction à la fois, l'affichage de l'instruction et les registres après chaque. Comme la commande go, vous pouvez spécifier où commencer l'exécution de, et pour combien de temps.
-A <- oui, cette chose de nouveau
107A: 0100 MOV AH, 02
107A: 0102 MOV DL, 41
107A: 0104 INT 21
107A: 0106 INT 20
-T = 0100 8

Si vous laissez de côté la quantité d'instructions que vous souhaitez suivre, vous pouvez utiliser l 'instance (p) pour poursuivre l'exécution aussi longtemps que vous le souhaitez.
Unassemble:

Unassembles un bloc de code. Grande pour le débogage (et à la fissuration)
-U 100 L 8 <- unassembles 8 octets à partir de l'offset 100
107A: 0100 MOV AH, 02 <- réponse débuts de
107A: 0102 MOV DL, 41
107A: 0104 INT 21
107A: 0106 INT 20
Ecrire:

Cette commande fonctionne très similaire à charger. Il dispose également de 2 manières elle peut agir: en utilisant le nom, et en spécifiant un emplacement exact. Reportez-vous à l'arrière pour charger pour plus d'informations.

REMARQUE: Le registre CX doit être de définir la taille du fichier pour écrire!
REMARQUE: écriture ne va pas écrire des fichiers EXE ou HEX [SIZE = 7] [SIZE = 14]...