Code:
invoke CreateFile,path,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0
cmp eax,INVALID_HANDLE_VALUE
jne @f
.data
error_open_target db "Konnte Zieldatei nicht öffnen!",0
.code
invoke MessageBox,0,offset error_open_target,0,MB_ICONERROR
ret
@@:
mov file_handle,eax
invoke GetFileSize,file_handle,0
mov file_size,eax
invoke VirtualAlloc,0,file_size,MEM_COMMIT,PAGE_READWRITE
mov p_mem,eax
test eax,eax
jnz @f
invoke MessageBox,0,offset error_memalloc_target,0,MB_ICONERROR
jmp closefile
@@:
invoke ReadFile,file_handle,p_mem,file_size,addr temp,0
test eax,eax
jnz @f
.data
error_reading_target db "Konnte Zieldatei nicht lesen!",0
.code
invoke MessageBox,0,offset error_reading_target,0,MB_ICONERROR
jmp freemem
@@:
so, nun findest du an Adresse, die in p_mem festgehalten wird, den Inhalt der Datei.
bsp, was man damit dann machen kann:
Code:
;so, nun Datei lesen
mov edi,p_mem
add edi,[edi+03ch] ;PE
mov eax,file_size
add eax,p_mem
.if edi>eax || edi<p_mem || word ptr[edi]!="EP"
.data
error_invalid_pe db "Zieldatei ist keine gültige Win32PE Executable!",0
.code
invoke MessageBox,0,offset error_invalid_pe,0,MB_ICONERROR
jmp freemem
.endif
zum Schluss noch alles fein schließen:
Code:
freemem:
invoke VirtualFree,p_mem,file_size,MEM_DECOMMIT
closefile:
invoke CloseHandle,file_handle
siehe auch:
http://win32assembly.online.fr/tut12.html