include \masm32\include\masm32rt.inc
comment * -----------------------------------------------------
FIX Tool -> Find and Replace New
^ ^ ^ ^ ^
Name : FTFRN
Data : 2013-04-20
Ver : 2.0
By : Dragon
Mem : Advantage of fast Find
Does not support batch modify
build environment requirements masm32v11
makeit.bat compile
run_this.bat execute the tool
----------------------------------------------------- *
.data
fname db "infile",0 ;<-- Input the file name
fbakname db "infile.bak",0 ;<-- Input the backup file name
findData db "findData",0 ;<-- Input Find bytes content
findLen dd 8 ;<-- Input length
fixData db 90H,90H,90H ;<-- Input replacement bytes content
fixLen dd 3 ;<-- Input length
findPOS dd 0
.code
start:
call main
exit
main proc
call openGPCore
ret
main endp
openGPCore proc
LOCAL hFile :DWORD
LOCAL hBakFile :DWORD
LOCAL dSize :DWORD
LOCAL hMem :DWORD
.if rv(exist,offset fname) != 0
mov hFile, fopen(offset fname)
.else
print "not find "
print offset fname
ret
.endif
mov dSize, fseek(hFile,0,FILE_END)
mov hMem, alloc(dSize)
mov eax , fseek(hFile,0,FILE_BEGIN)
mov eax , fread(hFile,hMem,dSize)
mov dword ptr [findPOS] , 0
;----find----
mov ecx, dSize
push ecx
mov edx, hMem
push edx
mov eax, dword ptr [findLen]
push eax
mov ecx, offset findData
push ecx
;pat patlen textt texttlen
call qs
;printf ("%d",dword ptr [findPOS])
.if dword ptr [findPOS] == 0
print "Not find "
print offset findData,13,10
.else
;----backup file----
mov hBakFile, fcreate( offset fbakname )
mov eax , fwrite( hBakFile, hMem, dSize)
fclose hBakFile
;----fix----
mov eax , fseek(hFile,dword ptr [findPOS],FILE_BEGIN)
mov eax , fwrite( hFile, offset fixData, dword ptr [fixLen])
print "Fix "
print offset fname
print " success.",13,10
.endif
fclose hFile
free hMem
ret
openGPCore endp
OUTPUT proc
mov eax,dword ptr [esp+4]
mov dword ptr [findPOS] , eax
ret
OUTPUT endp
preQsBc proc
push ebp
mov ebp,dword ptr [esp+10h]
push esi
mov esi,dword ptr [esp+10h]
push edi
mov ecx,100h
lea eax,[esi+1]
mov edi,ebp
rep stos dword ptr es:[edi]
xor eax,eax
test esi,esi
jle preQsBc1
mov edi,dword ptr [esp+10h]
mov ecx,esi
preQsBc2:
xor edx,edx
mov dl,byte ptr [eax+edi]
inc eax
mov dword ptr [ebp+edx*4],ecx
dec ecx
cmp eax,esi
jl preQsBc2
preQsBc1:
pop edi
pop esi
pop ebp
ret
preQsBc endp
qs proc
sub esp,404h
mov ecx,dword ptr [esp+408h]
push ebx
push ebp
mov ebp,dword ptr [esp+414h]
lea eax,[esp+0Ch]
push eax
push ebp
push ecx
call preQsBc
mov eax,dword ptr [esp+428h]
add esp,0Ch
xor ebx,ebx
sub eax,ebp
mov dword ptr [esp+8],eax
js qs1
mov edx,dword ptr [esp+418h]
push esi
push edi
qs3:
mov esi,dword ptr [esp+418h]
mov ecx,ebp
lea edi,[ebx+edx]
xor eax,eax
repe cmps byte ptr [esi],byte ptr es:[edi]
jne qs2
push ebx
call OUTPUT
mov edx,dword ptr [esp+424h]
add esp,4
qs2:
lea eax,[edx+ebp]
xor ecx,ecx
mov cl,byte ptr [eax+ebx]
mov eax,dword ptr [esp+10h]
add ebx,dword ptr [esp+ecx*4+14h]
cmp ebx,eax
jle qs3
pop edi
pop esi
qs1:
pop ebp
pop ebx
add esp,404h
ret
qs endp
end start
download src