Nitruk
Messages postés128Date d'inscriptionlundi 8 août 2005StatutMembreDernière intervention20 juillet 2009
-
9 août 2005 à 21:44
BALEZ Yonnel -
27 janv. 2006 à 10:09
Comment trouver l'offset de début de ligne de commande dans un exe 16 bits et eventuellement comment s'y référencer sous MASM ? (Je débute...)
merci d'avance
cs_Nasman
Messages postés202Date d'inscriptionmardi 17 mai 2005StatutMembreDernière intervention29 septembre 20083 10 août 2005 à 09:08
Sauf erreur de ma part les fichiers .exe 16bits présentent le même
en-tête (PSP) que les fichiers .com dont voici le descriptif. La
différence principale entre ces deux formats est que l'exécutable .com
commence en CS:0100h avec un PSP en CS:0000h (et une ligne de commande
en 81h) - Rappel CS=DS=ES=SS pour un .com.
Le fichier exe 16bits commence en CS:0000h et son PSP en DS:0000. Tu devrais trouver ta ligne de commande à :
Nitruk
Messages postés128Date d'inscriptionlundi 8 août 2005StatutMembreDernière intervention20 juillet 2009 10 août 2005 à 11:07
J'ai essayé comme ça mais mon programme n'a pas l'air de trouver là-bas la ligne de commande. S'il faut que je me référencie à CS, je ne sais pas comment faire. Je vous envoie ce bout de code. Pourriez vous me le corriger svp ?
mov BP, 0080h
inc BP
mov al, [BP+00]
cmp al, 0Dh
je Traitement2
dec BP
xor si, si
cs_Nasman
Messages postés202Date d'inscriptionmardi 17 mai 2005StatutMembreDernière intervention29 septembre 20083 10 août 2005 à 12:08
Je ne peux pas trop t'apporter d'aide pour la création de fichiers
32bits avec MASM car j'utilise NASM dont la syntaxe est un peu
différente.
Les opérations se déroulent généralement ainsi:
1) Création du (ou des) fichier asm avec un éditeur de texte
2) Compilation du (ou des) fichier avec MASM avec indication du format désiré (objet, coff, ...)
avec Nasm c'est par exemple
Nasmw -fobj Fichier.asm ;-fobj crée un fichier objet (.obj)
3) Edition de liens - Rassemble les différents programmes objets et
bibliothèques, importe les adresses des fonctions de dll, des API, crée
l'entête PE (format des exécutables windows)
Avec alink:
alink -oPE Fichier.obj Fichier2.obj Fichier3.res
Fichier3.res est une ressource, pour inclure une
icone, des boites de dialogue, des menu etc à ton exécutable.
Voici un petit programme pour illustrer les différentes sections
Le fichier PE créé possèdera une section .text (programme), une section
.data (intitulés du message), une section .imports (les dll
Kernel32.dll et user32.dll et les fonctions API MessageBoxA et
ExitProcess).
Nitruk
Messages postés128Date d'inscriptionlundi 8 août 2005StatutMembreDernière intervention20 juillet 2009 10 août 2005 à 12:24
Merci, maintenant je progresse. Mais je voudrais mettre un registre à la place de 0081h pour pouvoir incrémenter au fur et à mesure sa valeur, et Masm n'accepte pas les différents registres que j'aiproposé jusque là. Quel registre pourrais-je proposer ?
Et au passage, quel(s) caractère(s) faut-il envoyer pour effacer un caractère précédemment tapé ?
cs_Nasman
Messages postés202Date d'inscriptionmardi 17 mai 2005StatutMembreDernière intervention29 septembre 20083 10 août 2005 à 13:50
Pour lire le contenu de ta ligne de commande, essaie d'employer ES et
DI pour pointer l'origine et éventuellement DS et SI pour la
sauvegarder quelque part.
Tu pourra utiliser les instructions MOVSB pour copier un octet de ES:DI en DS:SI ou MOVSW pour copier un word de ES:DI en DS:SI.
Ces instructions présentent l'interrêt d'incrémenter (ou de décrémenter) DI et SI
En mettant une valeur recherchée dans al (ax) tu pourra utiliser
l'instruction SCASB (SCASW) pour comparer al à l'octet pointe par ES:DI
(avec incrémentation)
Que demande le peuple !!!
D'autre part si le format PE t'interesse, va voir l'article suivant:
cs_Nasman
Messages postés202Date d'inscriptionmardi 17 mai 2005StatutMembreDernière intervention29 septembre 20083 10 août 2005 à 14:30
Peux-tu en mettre plus sur les instructions qui plantent, celà
permettrait de mieux cerner l'instruction qui pose problème. Je suppose
que tu a voulu dire [ES:DI] au lieu de [EX:DI]
cs_Nasman
Messages postés202Date d'inscriptionmardi 17 mai 2005StatutMembreDernière intervention29 septembre 20083 10 août 2005 à 15:07
Je te dois des excuses car la source que j'utilise pour les
instructions asm doit comporter quelques bugs. Le registre SI est le
"source index" et donc doit être employé pour lire et le registre DI
est le "destination index". Par défaut MOVSB doit copier DS:SI dans
ES:DI. Il est possible de remplacer DS par ES pour la lecture mais pas
le ES
Ainsi on doit pouvoir coder
ES: movb pour copier de ES:SI vers ES:DI.
Pour pouvoir t'aider davantage peux-tu mettre ton programme complet
ici. Peut-être qu'une déclaration préalable est erronnée ou manquante ?