2010-12-06 56 views
1

J'utilise C et ASM {} dans l'une de nos classes pour terminer un projet assembleur dans lequel nous devons chiffrer une chaîne d'entrée, la transmettre et la déchiffrer.Accès aux membres du tableau dans l'assembleur

La clé est chargée dans un tableau C char vide (20 caractères) et est ensuite utilisée ultérieurement avec l'instruction XOR à chiffrer.

Le code pour charger l'adresse du tableau est:

esi Ica, clé

qui met l'adresse de 'clé' dans esi. L'adresse ici est la même que l'adresse du tableau de clés lorsque nous examinons le registre en mode débogage, donc nous savons que cela fonctionne.

mov edx, [esi]

nous avons pensé que cela déplacerait la valeur de premier indice de esi dans EDX, comme nous utilisons "mov [esi], eax" mettre la valeur de l'un inscrire dans le tableau esi. L'inverse semblait logique.

Cependant, la valeur obtenue par edx est "875575655" (dernière exécution) ou similaire. Beaucoup trop grand pour une valeur de char.

J'ai le sentiment que nous pouvons avoir accès à la mauvaise table, Un conseil serait apprécié.

Remarque: Habituellement, pour augmenter l'indice de tableau, nous utilisons simplement inc esi et ensuite nous lisons comme nous l'avons fait plus haut, c'est ainsi que nous avions l'intention de lire le tableau également.

Répondre

2

Avec mov edx, [esi] vous avez lu DWORD (parce que edx taille est double mot). Utilisez mov dl, [esi] pour lire l'octet.

2

875575655 en hexa est 0x34303967, ce serait la chaîne 'g904'. Pour expliquer: bien que ce soit une chaîne de caractères, vous pouvez charger plus de caractères à la fois. Ainsi, au lieu de faire des charges de 20 octets et des xors, vous pouvez effectuer 5 opérations de ce type sur DWORD.