All pastes #38912 Raw Edit

Stuff

public text v1 · immutable
#38912 ·published 2006-01-28 16:40 UTC
rendered paste body
.586p 
.model flat,stdcall 
option casemap:none 

SearchBytePattern PROTO :DWORD, :DWORD, :DWORD, :DWORD, :BYTE, :BYTE

;-----------------------------------------------------------------------

      include \masm32\include\windows.inc
      include \masm32\include\imagehlp.inc
      include \masm32\include\comdlg32.inc
      include \masm32\include\user32.inc
      include \masm32\include\kernel32.inc
      include \masm32\include\masm32.inc

      includelib \masm32\lib\imagehlp.lib
      includelib \masm32\lib\comdlg32.lib
      includelib \masm32\lib\user32.lib
      includelib \masm32\lib\kernel32.lib
      includelib \masm32\lib\masm32.lib

      Main   PROTO

;-----------------------------------------------------------------------

.data
ofn                          OPENFILENAME <>
buffer                       db 260 dup(0) 
buffer2                      db 260 dup(0)
FilterString                 db "choose the file",0,"*.*",0,0
pattern     db 072h, 016h, 061h 

.data?
hFileWrite      HANDLE ? 
hFileRead       HANDLE ?
processInfo	    PROCESS_INFORMATION		  <>
startInfo       STARTUPINFO 		      <>





memory_ptr      dd  ?   ; ptr to our allocated memory
memory_size     dd  ?   
filehandle      dd  ?   
file_size       dd ?
bytesrw       dd ?

.Code
SearchBytePattern proc BytePattern:DWORD, SizeOfBytePattern:DWORD, SearchField:DWORD, SizeOfSearchField:DWORD,Wildcard:BYTE, WildcardCharacter:BYTE                      
                       
local FoundBytePattern: DWORD

    mov [FoundBytePattern], -1h
    xor eax, eax
    mov ecx, [SearchField]
    mov edx, [BytePattern]
    .while eax < SizeOfSearchField
      xor esi, esi
      push eax
      .while esi < SizeOfBytePattern
        .if eax >= SizeOfSearchField
          .break
        .endif
        mov bl, [ecx+eax]
        mov bh, [edx+esi]
        .if Wildcard == TRUE
          .if bh == WildcardCharacter
            jmp _
          .endif
        .endif
        .if bh == bl
_:        
          inc eax
          inc esi
          .if esi == SizeOfBytePattern
            sub eax, SizeOfBytePattern
            mov FoundBytePattern, eax
            jmp @end
          .endif
        .else
          pop eax
          .break
        .endif
      .endw
      inc eax
    .endw
@end:
    mov eax, FoundBytePattern
	ret
SearchBytePattern endp


Main proc      

	mov  ofn.lStructSize, SIZEOF ofn
    	mov  ofn.lpstrFilter, OFFSET FilterString
    	mov  ofn.lpstrFile, OFFSET buffer
    	mov  ofn.nMaxFile, 260
    	mov  ofn.Flags, OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST or OFN_LONGNAMES or OFN_EXPLORER or OFN_HIDEREADONLY

invoke GetOpenFileName, ADDR ofn
mov eax, ofn.lpstrFile
mov eax, [eax]
test eax, eax	; no filename? end prog immediately...
jz ERRORMSG

invoke    CreateFileA, addr buffer, 80000000h, 0, 0, 3, 80h, 0
cmp     eax, 0FFFFFFFFh
jz      ERRORMSG
mov     dword ptr [filehandle], eax

; Speicher schaffen
invoke  VirtualAlloc, 0, eax, MEM_COMMIT, PAGE_EXECUTE_READWRITE
mov [memory_ptr], eax
test eax, eax
jz ERRORMSG

invoke SearchBytePattern, addr pattern , sizeof pattern , memory_ptr, file_size, 0, 0
      
; ExE in Speicher lesen
invoke ReadFile, filehandle, eax, file_size, offset bytesrw, 0
mov eax, [file_size]


ERRORMSG:
	;Error occured


Main endp

	start:
	invoke Main
end start