[ASM]Besoin d'un petit peu d'aide

Tout sur les langages de programmation.

[ASM]Besoin d'un petit peu d'aide

Messagepar Bck » 24 Juillet 2005, 14:13

Salut à tous,

Je (re)decouvre l'assembleur et je me pose une petite question, qu'elle la difference entre :

Code: Tout sélectionner
mov EAX, BX


et

Code: Tout sélectionner
mov EAX,[BX]


A quoi correspondent les crochets? L'adresse, la valeur de BX ?

Merci d'avance

Bck
Un panda qui mix.... n'importe quoi :D
Avatar de l’utilisateur
Bck
Crackeur de bas niveau
Crackeur de bas niveau
 
Messages: 127
Inscription: 20 Juillet 2005, 02:19

Messagepar Neitsa » 24 Juillet 2005, 14:35

mov EAX,[BX]


En français on traduira ca par :

Met dans EAX ce qui est situé à l'adresse pointée BX.

si tu utiilse les "prefix override" ca fait :

mov EAX, dword ptr [BX]

N.B:

tu ne peux pas écrire cela :

mov EAX, BX


tu est obligé de spécifier le type de mouvement :

MOVZX EAX,BX

ou encore

MOSX EAX,BX

deplus je ne me rapelle plus si une adresse 16 bits peut pointer sur un DWORD... (je n'ai jamais fait de 16 bits) mais ca me parait étrange... du moins en mode protégé.
Neitsa
 

Messagepar madchild » 24 Juillet 2005, 19:22

salut!!

je me permet d'utiliser ce post!!

ok donc par exemple MOV EAX,DWORD PTR DS:[ESI+2FC], en francais, ça se traduirait par :

met dans EAX ce qui se trouve à l'adresse pointée par DS, c'est a dire ESI + 2FC ??

Par contre LEA EAX,DWORD PTR DS:[EBX+EBX*4] veut dire:

place dans EAX la valeur de l'offset étant pointé par DS, lui meme étant égale à EBX+EBX*4

y'a t il des erreurs??
Dernière édition par madchild le 24 Juillet 2005, 20:05, édité 1 fois.
madchild
Crackeur expert
Crackeur expert
 
Messages: 202
Inscription: 13 Juillet 2005, 16:01
Localisation: In Da Appart

Messagepar Bck » 24 Juillet 2005, 19:47

Ah merci Neitsa, ca me parait bcp plus clair. ;)


Bck
Un panda qui mix.... n'importe quoi :D
Avatar de l’utilisateur
Bck
Crackeur de bas niveau
Crackeur de bas niveau
 
Messages: 127
Inscription: 20 Juillet 2005, 02:19

Messagepar Neitsa » 24 Juillet 2005, 20:43

Hi,

de rien :D

pour répondre à Madchild :

MOV EAX,DWORD PTR DS:[ESI+2FC]


il faut décomposer pour bie comprendre :

-MOV EAX : met dans EAX, là c'est facile :D
-DWORD : on "mov" un DWORD (double mots soit 32 bits)
- PTR : pointé par (PoinTeR en anglais)
- DS : c'est un segment. Sous windows les segments CS, DS et SS pointent au même endroit (type de mémoire 'flat' autrement dit plat). C'est un héritage du 16 bits, mais les processeurs actuels utilise toujours les segments car lors du boot de l'os, le modèle de mémoire est segmenté).
DS désigne ici le Data segment autrement dit, le segment qui acceuille les données du programme.

[ESI+2FC] : on prend la valeur de ESI et on ajoute 0x2FC pour savoir quel est l'adresse.

Pour résumer : MOV EAX,DWORD PTR DS:[ESI+2FC]

Met dans EAX le DWORD pointé par l'adresse ESI+2FC, DWORD situé dans le Data Segment.

place dans EAX la valeur de l'offset étant pointé par DS, lui meme étant égale à EBX+EBX*4


C'est juste si on omet le "pointé par DS". le pointeur c'est [EAX+EBX*4]. DS indique seulement dans quel segment se trouve le pointeur (je rapelle que sous Windows c'est négligeable, on pourrait mettre CS ou SS)

Voilà j'espère que c'est un peu plus clair :D

N.B: on peut ommettre le segment, techniquement quand on spécifie le segment on appelle cela un "segment override", sans ca marche très bien aussi :

MOV EAX,DWORD PTR [ESI+2FCh]

mais les désassembleurs font ce qu'on leur demande :)
Neitsa
 

Messagepar madchild » 24 Juillet 2005, 20:57

Merci beaucoup neitsa!!

Un peu compliqué mais jcomprend petit à petit!!c'est quand même tres interessant le langage assembleur :)

Je vais faire un copié collé de ton explication et la garder bien au chaud dans un bloc note :D

@++
My perception of poetical injection is ejaculation, the immaculate conception. [J.M.T.]
madchild
Crackeur expert
Crackeur expert
 
Messages: 202
Inscription: 13 Juillet 2005, 16:01
Localisation: In Da Appart


Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 2 invités