Dump memoire : indications

cs_Quichon Messages postés 5 Date d'inscription lundi 28 avril 2003 Statut Membre Dernière intervention 29 avril 2003 - 28 avril 2003 à 22:39
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 - 29 avril 2003 à 23:57
comment fait-on pour lire le segment lors d'un deump memoire en intel ?

eventuellement balancez les sources, on se debrouillera avec...

merci d'avance, amis porgrammeurs (confirmés, à l'inverse de moi)

13 réponses

CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
29 avril 2003 à 03:29
dump à l'écran ou dans un fichier ?
Veux-tu dumper tout un segment (64Ko) ?

Core Breaker :)
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
29 avril 2003 à 03:32
Lire le segement ???
La valeur d'un registre de segment ?
Lors d'un dump ??

Peux tu donner un exemple de ce que tu veux STP ? Voire expliquer plus

Core Breaker :)
0
cs_Quichon Messages postés 5 Date d'inscription lundi 28 avril 2003 Statut Membre Dernière intervention 29 avril 2003
29 avril 2003 à 06:50
Le dump se fait à l'écran tout comme un éditeur hexadécimal (exactement pareil au niveau de la présentation)
voilà :)
0
TangiX Messages postés 59 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 2 juin 2004
29 avril 2003 à 09:28
Tu veux donc faire un dump comme Debug ??
Ceux que tu as besoins, c donc le code qui permet de convertir une valeur numérique en chaine ascii ??

%-6 TangiX %-6
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Quichon Messages postés 5 Date d'inscription lundi 28 avril 2003 Statut Membre Dernière intervention 29 avril 2003
29 avril 2003 à 10:58
Oui entre autre mais aussi le code pour accéder à la mémoire pour organiser enfin tout ça sous forme de tableau
en fait c'est une fenêtre exactement pareille que celle de debug mais sous dos (comme un éditeur hexa)
0
TangiX Messages postés 59 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 2 juin 2004
29 avril 2003 à 11:44
Pour faire un beau tableau, tu dois faire des bonne boucle
Pour charger une valeur de la mémoire, utilise l'instruction LODSB (DS;SI->AL,SI+1->SI)
Pour effectuer la conversion essaye le code suivant (je l'ai pas tester mais le principe est bon) :

 Mov BX, 3030h
Debut:
 Cmp AL,10h
 Jb Suite
 Sub AL,10h
 Inc BH
 Cmp BH,3Ah
 Jne Debut
 Mov BH,'A'
 Jmp Debut

Suite
 Cmp AL,1
 Jb Fin
 Dec AL
 Inc BL
 Cmp BL,3Ah
 Jne Suite
 Mov BL,'A'
 Jmp Suite

Fin:

La chaine se trouve dans BX mais ca peut etre changer
bonne prog

%-6 TangiX %-6
0
cs_Quichon Messages postés 5 Date d'inscription lundi 28 avril 2003 Statut Membre Dernière intervention 29 avril 2003
29 avril 2003 à 13:58
Pourrais tu m'expliquer ces lignes, stp ?
En gros, je voudrais savoir comment on recupere le segment, est-ce qu'on le met dans un tableau qu'on declare avant ?

> Pour faire un beau tableau, tu dois faire des bonne boucle
> Pour charger une valeur de la mémoire, utilise l'instruction LODSB (DS;SI->AL,SI+1->SI)
0
TangiX Messages postés 59 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 2 juin 2004
29 avril 2003 à 14:22
en gros il te faut deux boucle équivalente à un 'for-next' en vb : la premiére forme ton paragraphe en fonction du nombre de ligne
la deuxième forme une ligne en fonction du nombre de valeur
tu place ton code permettant d'afficher une valeur dans la deuxième boucle
tu place ta deuxième boucle dans la première avec le retour à la ligne
et voila... (c un peu brouillon :clown) )

tu n'as pas besoin de transferrer ton segment ailleurs puisqu'il est déja en mémoire :) l'instruction LODSB te permet de récupérer les octets un par un en mettant le segment dans DS et l'indexdans SI (en plus SI s'incrémente tous seul). L'octet lu est placé dans AL, il ne reste plus qu'a l'exploité

%-6 TangiX %-6
0
cs_Quichon Messages postés 5 Date d'inscription lundi 28 avril 2003 Statut Membre Dernière intervention 29 avril 2003
29 avril 2003 à 15:02
Et LODSB, c'est quoi la syntaxe, si on considère par exemple que j'ai la valeur du segment dans ax ?
0
TangiX Messages postés 59 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 2 juin 2004
29 avril 2003 à 15:27
push AX
pop DS
xor SI,SI
mov CX,n
boucle:
lodsb
;exploitation de AL
loop boucle

ce code lit les n premiers élement du segment pointé par AX:0

%-6 TangiX %-6
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
29 avril 2003 à 23:42
.model tiny
.386
le_segment_a_dumper equ 0000h
.code
org 100h
start:
push cs
push cs
pop es
pop ds
jmp debut

tab db "0123456789ABCDEF"
conv db "00 00 00 00 00 00 00 00 "
db "00 00 00 00 00 00 00 00 "
asc db "................"
db 13, 10, '$'
blank db "00 00 00 00 00 00 00 00 "
db "00 00 00 00 00 00 00 00 "
db "................"

debut:
cld
push ds
pop es
mov ax, le_segment_a_dumper
mov ds, ax
mov di, offset conv
xor si, si
mov bx, offset tab
mov cx, 16384 ; 65536 / 4

principale:
lodsd
mov edx, eax

push ds
push cx

push es
pop ds

mov ax, 16384
sub ax, cx
push ax
and ax, 03h
shl ax, 2
mov cx, 4

boucle_conv:
push ax
push di
mov di, 4
sub di, cx
add di, ax
add di, offset asc

mov al, dl

cmp al, ' '
jb translate

cmp al, 128
jae translate

cmp al, '$'
je translate

stosb

translate:
pop di
shr al, 4
xlat
stosb

mov al, dl
and al, 0Fh
xlat
stosb
shr edx, 8
inc di
pop ax
loop boucle_conv

pop ax
inc ax
test ax, 3
jnz suivant

mov di, offset conv
push dx
mov ah, 9
mov dx, di
int 21h
pop dx

pusha
mov si, offset blank
mov cx, debut - blank
rep movsb
popa

suivant:
pop cx
pop ds
loop principale

mov ax, 4C00h
int 21h

end start


Core Breaker :)
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
29 avril 2003 à 23:53
Il y mieux pour convertir un digit hexa:

tab db "0123456789ABCDEF"

mov al, valeur
mov bx, offset tab
xlat


valeur est un digit hexa (entre 0 et 15)
à la suite de ça AL contient le digit hexa conerti (de '0' à 'F')
En plus c'est direct comme conversion (en une instruction !!)

Core Breaker :)
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
29 avril 2003 à 23:57
lodsb équivaut à:

si DF=1 (mis par l'instruction std)
mov al, ds:[si]
dec si


si DF=0 (mis par l'instruction cld)
mov al, ds:[si]
inc si


Core Breaker :)
0