Accueil > > > DUMP HEXADECIMAL
DUMP HEXADECIMAL
Information sur la source
Description
permet de faire des fichier de resources plus pratique qu'un fichier *.rc ou il faut utiliser plusieurs appi pour recuperer l'offset de la resource c'est un prog qui utilise que ds fonctions dos j'avais fait le même prog avec des apis grande difference de vitesse LINK version 5.60.339
Source
- .386
- code16 segment use16
- assume cs:code16,ds:code16
-
-
-
- octets db 20 dup(0)
- buffer db 100 dup(0)
- format db '0123456789ABCDEF',0
- hf_cible dw ?
- hf_source dw ?
- nbwrite dw ?
- sizefile dd 0
- nbread dd 0
- path_fc db 100 dup(0)
- fn_source db 100 dup(0)
- label_name db 12 dup(0)
- text1 db 9h,'Ajout dans un fichier de resource *.hex d'
- db 82h,'j',85h,20h,82h,'xistant ?',0Dh,0Ah
- db 9h,'si oui : chemin + nom de fichier + [ENTER],sinon :'
- db '[ENTER]',0Dh,0Ah,'$'
- text3 db 0Dh,0Ah,9h,'Donnez un nom pour le label et validez'
- db '[ENTER]',13,10,9,'nom :','$'
- usage db 0Dh,0Ah,9h,'Faites glisser sur l',27h,'executable le'
- db 'fichier que vous voulez'
- db 0Dh,0Ah,9h,'utiliser comme resource dans un programme.','$'
-
- start16:
- ;pour lire la ligne de commande ds=es
- ;pour lire les données ds=cs
-
- push cs
- pop ds
-
- cmp byte ptr es:[80h],0
- je @usage
-
- ;------------------------------------ouverture du fichier source-------------------------------
-
- mov bl,es:[80h]
- xor bh,bh ;bx=longueur ligne de command
-
- mov byte ptr es:[81h+bx],0 ;la chaine doit ce terminer par 0
-
- mov ax,3d02h ;ouvre fichier source
- push es
- pop ds
- mov dx,82h
- int 21h
- push cs
- pop ds
- mov hf_source,ax ;handle
-
-
-
- mov ax,4202h ;optenir la taille du fichier source
- mov bx,hf_source
- xor cx,cx
- xor dx,dx
- int 21h
- mov bx,dx
- shl ebx,16
- mov bx,ax
- mov sizefile,ebx
-
- mov ax,4200h ;remettre le pointeur au début du fichier source
- mov bx,hf_source
- xor cx,cx
- xor dx,dx
- int 21h
-
-
- ;---------------------demande à l'utilisateur si ajout ou nouveau-------------
- mov ah,9h
- mov dx,offset text1
- int 21h
-
-
- mov byte ptr [path_fc],98 ;indique la taille max du buff avant appelle
- ;fonction.
- xor ax,ax
- mov ah,0Ah
- mov dx,offset path_fc
- int 21h ;ecriture ds buff
-
- mov bl,[path_fc+1]
- cmp bl,0 ;faut-il creer un nouveau fichier ?
- je newfile
-
- add bl,2
- mov byte ptr [path_fc+bx],0
-
-
-
-
- mov ax,3d02h ;ouvre fichier cible
- push cs
- pop ds
- lea dx,[path_fc+2]
- int 21h
- mov hf_cible,ax ;handle
-
- mov ax,4202h ;mettre le pointeur à la fin du fichier
- mov bx,hf_cible
- xor cx,cx
- xor dx,dx
- int 21h
-
- mov ah,40h ;écris saut de ligne retour chariot
- mov bx,hf_cible
- mov cx,2
- mov word ptr [buffer],0A0Dh
- lea dx,[buffer]
- int 21h
-
- jmp appendfile
-
-
- newfile:
-
- ;---------------------------------creation du fichier cible----------------------------------
-
- mov bl,es:[80h]
- xor bh,bh ;bx=longueur ligne de command
-
- mov cx,bx
- mov di,81h
- mov al,'.' ;cherche '.'dans ligne de command
- repne scasb
-
- mov dword ptr es:[di],00584548h ;change l'extenssion en '.HEX'
-
-
- mov ah,3Ch ;cree le fichier *.hex
- xor cx,cx
- push es
- pop ds
- mov dx,82h
- int 21h
- push cs
- pop ds
- mov hf_cible,ax ;handle
-
- appendfile:
-
- ;----------------------------creer label data--------------------
- mov ah,9h
- mov dx,offset text3
- int 21h
-
- mov byte ptr [label_name],10 ;indique la taille max du buff avant appelle
- ;fonction.
-
- mov ah,0Ah
- mov dx,offset label_name
- int 21h ;ecriture ds buff
-
- mov bl,[label_name+1]
- add bx,2 ;bx=taille chaine + 2 premiers octs du buffer
- mov byte ptr [label_name+bx],20h ;ajout d'un espace en fin de chaine
-
-
-
-
- ;--------------------LECTURE FICHIER SOURCE ECRITURE FICHIER CIBLE---------------------------
-
-
- xor cx,cx
- mov ah,40h
- mov cl,[label_name+1] ;nombre caractères tapé au clavier
- inc cl ;+1 puisqu'ajout d'un espace
- lea dx,[label_name+2] ;addr chaine
- mov bx,hf_cible
- int 21h ;ecriture du label_name dans fichier cible
-
-
-
- nextline:
-
-
- mov ax,3F00h ;lit 16 octets ds fichier source
- mov bx,hf_source
- mov cx,16
- mov dx,offset octets ;les stoke dans octets
- int 21h
- test ax,ax ;fin de lecture du fichier ?
- je @4
- ;------------------------------determiner le nombre de bytes à ecrire.
- push ax
- add nbread,eax
- mov bx,5
- mov edx,sizefile
- cmp edx,nbread ;est-ce que le nombre total d'octets lu = taille fichier ?
- jne @1
-
- mov bx,3
-
- @1:
-
-
- mov cx,ax
- shl ax,2
- add ax,cx ;mult par 5 le nbr d'octets
- add ax,bx ;et add bx
-
- mov nbwrite,ax ;nbr d'octets à écrire
- ;-------------------------------
-
- lea di,[buffer]
- lea bx,[octets]
-
- mov dword ptr [di],20206264h ;'db '
- add di,4
-
-
-
- pop cx
-
-
- formatage:
- mov byte ptr [di],30h ;'0'
- call FormatByte
- mov word ptr [di],2C68h ;'h,'
- add di,2
- loop formatage
-
- dec di ;pas ecrire virgule si fin de ligne
-
- mov word ptr [di],0A0Dh ;saut de ligne retour chariot
-
- mov ah,40h ;écris ligne ds fichier cible
- mov bx,hf_cible
- mov cx,nbwrite
- mov dx,offset buffer
- int 21h
-
- jmp nextline
-
- @usage:
-
- mov ah,9h
- mov dx,offset usage
- int 21h
- mov ah, 00h
- int 16h
-
- jmp @5
-
- @4:
- mov ah,3Eh ;fermer handle
- mov bx,hf_cible
- int 21h
- @5:
-
- mov ax,4C00h ;quit
- int 21h
-
- Formatbyte proc
-
- xor ax,ax
- xor dx,dx
- mov si,offset format
- mov al,[bx]
- inc bx
- mov dl,al
- shr al,4
- and dl,00001111b
- push si
- add si,ax
- mov al,[si]
- inc di
- mov [di],al
- pop si
- add si,dx
- mov al,[si]
- inc di
- mov [di],al
- inc di
- ret
-
- Formatbyte endp
-
- code16 ends
-
- ; ---------------------------------------------------------------------------
- ; SEGMENT DE STACK
-
- stack16 segment stack
- db 200h dup (?)
- stack16 ends
-
- end start16
-
.386
code16 segment use16
assume cs:code16,ds:code16
octets db 20 dup(0)
buffer db 100 dup(0)
format db '0123456789ABCDEF',0
hf_cible dw ?
hf_source dw ?
nbwrite dw ?
sizefile dd 0
nbread dd 0
path_fc db 100 dup(0)
fn_source db 100 dup(0)
label_name db 12 dup(0)
text1 db 9h,'Ajout dans un fichier de resource *.hex d'
db 82h,'j',85h,20h,82h,'xistant ?',0Dh,0Ah
db 9h,'si oui : chemin + nom de fichier + [ENTER],sinon :'
db '[ENTER]',0Dh,0Ah,'$'
text3 db 0Dh,0Ah,9h,'Donnez un nom pour le label et validez'
db '[ENTER]',13,10,9,'nom :','$'
usage db 0Dh,0Ah,9h,'Faites glisser sur l',27h,'executable le'
db 'fichier que vous voulez'
db 0Dh,0Ah,9h,'utiliser comme resource dans un programme.','$'
start16:
;pour lire la ligne de commande ds=es
;pour lire les données ds=cs
push cs
pop ds
cmp byte ptr es:[80h],0
je @usage
;------------------------------------ouverture du fichier source-------------------------------
mov bl,es:[80h]
xor bh,bh ;bx=longueur ligne de command
mov byte ptr es:[81h+bx],0 ;la chaine doit ce terminer par 0
mov ax,3d02h ;ouvre fichier source
push es
pop ds
mov dx,82h
int 21h
push cs
pop ds
mov hf_source,ax ;handle
mov ax,4202h ;optenir la taille du fichier source
mov bx,hf_source
xor cx,cx
xor dx,dx
int 21h
mov bx,dx
shl ebx,16
mov bx,ax
mov sizefile,ebx
mov ax,4200h ;remettre le pointeur au début du fichier source
mov bx,hf_source
xor cx,cx
xor dx,dx
int 21h
;---------------------demande à l'utilisateur si ajout ou nouveau-------------
mov ah,9h
mov dx,offset text1
int 21h
mov byte ptr [path_fc],98 ;indique la taille max du buff avant appelle
;fonction.
xor ax,ax
mov ah,0Ah
mov dx,offset path_fc
int 21h ;ecriture ds buff
mov bl,[path_fc+1]
cmp bl,0 ;faut-il creer un nouveau fichier ?
je newfile
add bl,2
mov byte ptr [path_fc+bx],0
mov ax,3d02h ;ouvre fichier cible
push cs
pop ds
lea dx,[path_fc+2]
int 21h
mov hf_cible,ax ;handle
mov ax,4202h ;mettre le pointeur à la fin du fichier
mov bx,hf_cible
xor cx,cx
xor dx,dx
int 21h
mov ah,40h ;écris saut de ligne retour chariot
mov bx,hf_cible
mov cx,2
mov word ptr [buffer],0A0Dh
lea dx,[buffer]
int 21h
jmp appendfile
newfile:
;---------------------------------creation du fichier cible----------------------------------
mov bl,es:[80h]
xor bh,bh ;bx=longueur ligne de command
mov cx,bx
mov di,81h
mov al,'.' ;cherche '.'dans ligne de command
repne scasb
mov dword ptr es:[di],00584548h ;change l'extenssion en '.HEX'
mov ah,3Ch ;cree le fichier *.hex
xor cx,cx
push es
pop ds
mov dx,82h
int 21h
push cs
pop ds
mov hf_cible,ax ;handle
appendfile:
;----------------------------creer label data--------------------
mov ah,9h
mov dx,offset text3
int 21h
mov byte ptr [label_name],10 ;indique la taille max du buff avant appelle
;fonction.
mov ah,0Ah
mov dx,offset label_name
int 21h ;ecriture ds buff
mov bl,[label_name+1]
add bx,2 ;bx=taille chaine + 2 premiers octs du buffer
mov byte ptr [label_name+bx],20h ;ajout d'un espace en fin de chaine
;--------------------LECTURE FICHIER SOURCE ECRITURE FICHIER CIBLE---------------------------
xor cx,cx
mov ah,40h
mov cl,[label_name+1] ;nombre caractères tapé au clavier
inc cl ;+1 puisqu'ajout d'un espace
lea dx,[label_name+2] ;addr chaine
mov bx,hf_cible
int 21h ;ecriture du label_name dans fichier cible
nextline:
mov ax,3F00h ;lit 16 octets ds fichier source
mov bx,hf_source
mov cx,16
mov dx,offset octets ;les stoke dans octets
int 21h
test ax,ax ;fin de lecture du fichier ?
je @4
;------------------------------determiner le nombre de bytes à ecrire.
push ax
add nbread,eax
mov bx,5
mov edx,sizefile
cmp edx,nbread ;est-ce que le nombre total d'octets lu = taille fichier ?
jne @1
mov bx,3
@1:
mov cx,ax
shl ax,2
add ax,cx ;mult par 5 le nbr d'octets
add ax,bx ;et add bx
mov nbwrite,ax ;nbr d'octets à écrire
;-------------------------------
lea di,[buffer]
lea bx,[octets]
mov dword ptr [di],20206264h ;'db '
add di,4
pop cx
formatage:
mov byte ptr [di],30h ;'0'
call FormatByte
mov word ptr [di],2C68h ;'h,'
add di,2
loop formatage
dec di ;pas ecrire virgule si fin de ligne
mov word ptr [di],0A0Dh ;saut de ligne retour chariot
mov ah,40h ;écris ligne ds fichier cible
mov bx,hf_cible
mov cx,nbwrite
mov dx,offset buffer
int 21h
jmp nextline
@usage:
mov ah,9h
mov dx,offset usage
int 21h
mov ah, 00h
int 16h
jmp @5
@4:
mov ah,3Eh ;fermer handle
mov bx,hf_cible
int 21h
@5:
mov ax,4C00h ;quit
int 21h
Formatbyte proc
xor ax,ax
xor dx,dx
mov si,offset format
mov al,[bx]
inc bx
mov dl,al
shr al,4
and dl,00001111b
push si
add si,ax
mov al,[si]
inc di
mov [di],al
pop si
add si,dx
mov al,[si]
inc di
mov [di],al
inc di
ret
Formatbyte endp
code16 ends
; ---------------------------------------------------------------------------
; SEGMENT DE STACK
stack16 segment stack
db 200h dup (?)
stack16 ends
end start16
Conclusion
pour compiler vous devez avoir le LINK version 5.60.339 vous avez qu'à taper LINK version 5.60.339 dans un moteur de recherche je l'ai renommer link16 et je l'ai mis dans le repertoire masm32/bin
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
974 Application Server (12.2.4.0)974 APPLICATION SERVER (12.2.4.0)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP mySongBook Player (1.0.0)MYSONGBOOK PLAYER (1.0.0)mySongBook Player est un logiciel gratuit permettant l'accès à une archive de tablatures/partitio... Cliquez pour télécharger mySongBook Player
|