Send db to bmp

Signaler
Messages postés
41
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
4 octobre 2012
-
Messages postés
41
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
4 octobre 2012
-
bonjour,
j' ai un bmp que j' ai mais dans ma source sous forme "DB" je veux le sortir de ma source et le mettre dans un bmp.
j' arrive a y sortire du txt mais je n' arrive pas a y sorti mon bmp...

Source.asm
.386
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data
my_file db "test.bmp",NULL
my_bytes db "OwNeDbYp0m1",NULL

;Mybmp
   hFile dd ?
   include bmp.inc ; on retrouve un bmp sous forme DB 
.code
start:
; comme sa sa marche ( ouvrir avec un editeur "notepad++")
; si on met Mybmp a la place de my_bytes sa ne marche plus
  invoke CreateFile,addr my_file,GENERIC_READ or GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
  mov hFile,eax
  invoke lstrlen,addr my_bytes
  invoke WriteFile,hFile,addr my_bytes,eax,0,0
  invoke CloseHandle,hFile
  
  invoke ExitProcess,0
   
end start

6 réponses

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
QUELLE HORREUR !!!
Faut commencer par apprendre l'ASM.
Une suite de 'invoke' ne donnera qu'une daube, rien de plus.

Disons qu'on a ADDR de my_bytes dans ESI:
lea eax, [esi - 1]
strLEN:
add eax, 1
cmp byte ptr[eax], 0
jne short strLEN
sub eax, esi ; EAX contient srtlen de my_bytes
CELA SANS AUCUN APPEL DE FONCTION !!!

ciao...
BruNews, MVP VC++
Messages postés
41
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
4 octobre 2012

ok mais cela ne change pas le resultat...
Messages postés
41
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
4 octobre 2012

.386
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data
my_file db "test.bmp",NULL
   hFile dd ?
   include bmp.inc ; on retrouve un bmp sous forme DB  ;Mybmp
   
.code
start: 

invoke CreateFile,addr my_file,GENERIC_READ or GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
mov hFile,eax

lea esi, Mybmp		
lea eax, [esi - 1]
strLEN:
add eax, 1
cmp byte ptr[eax], 0
jne short strLEN
sub eax, esi

invoke WriteFile,hFile,addr Mybmp,eax,0,0
invoke CloseHandle,hFile 
invoke ExitProcess,0
   
end start


j' ai mis ta suggestion.
il es vrai je ne suis pas du tous du monde informatique, ces pourquoi je suis pas très bon sur le sujet!
Mon probleme perciste, pour un chaine sa fonctionne mais pour mettre mon bmp qui est en db il ne me met sa dans mon fichier "BMÖh".
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
Tu as calculé strlen() ok mais le chainage sur my_file est fait ??? ben non.

Si tu n'es pas du monde informatique, ça se conçoit fort bien, alors ne perds pas de temps avec l'ASM qui nécessite quelques années de pratique pour sortir quoi que ce soit de correct.

Fais ton prog en C, ce sera nettement plus aisé et tu auras de plus un exe nettement plus performant qu'avec du pseudo ASM.

ciao...
BruNews, MVP VC++
Messages postés
41
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
4 octobre 2012

.386
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data
Adress_File db "test.cfg",NULL
hFile dd ?
   include bmp.inc ; on retrouve un bmp sous forme DB  ;Mybmp
   
.code
start: 

invoke CreateFile,addr Adress_File,GENERIC_READ or GENERIC_WRITE,0,0,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,0
mov hFile,eax
;	*
lea esi, Mybmp		
lea eax, [esi - 1]
strLEN:
add eax, 1
cmp byte ptr[eax], 0
jne short strLEN
sub eax, esi
;	*
push 0
push 0
push eax
push offset Mybmp
push hFile
call WriteFile
;	*
invoke CloseHandle,hFile 
;	*
push 0
call ExitProcess
   
end start
Messages postés
41
Date d'inscription
mardi 8 mai 2007
Statut
Membre
Dernière intervention
4 octobre 2012

UP!

Si quelqu'un sais il faut le dire sa me sert mais sa sert a toutes les personnes qui rencontre le problème.