Dim ary1() as integer
dim ary2() as long
For each I byte starting at 0 in file
' save exe so it can be addressed with Mid or MidB below
ary1(I) = byte I from file
ary2(I) = I
redim as necessary
Next
Sort ary1, ary2 ' sort ary1 and ary2 on ary1, ary2
Redim ary3(255) as integer
Dim bln0Is0 as boolean
I - 0
if ary1(0) = 0 then I = 1 ' skip setting ary3(0)
For I = I to Ubound(ary1)
J = ary1(I)
if ary3(J) = 0 then ' 1st J in ary2
ary3(J) = ary2(I) ' index to ary1 character J
End if
Next
For I = 0 to Ubound(string) ' For Each string
' Get 1st character of string
J = Asc(Left(string(I),1)) ' 1st character from string
K = ary3(J) ' get index into ary1-2
' If character does not occur in EXE then index is 0
Do while(ary1(K) = J) ' as long as ary1(K) = character
' ary2(K) has 0-relative start position in exe
if string = MidB(Exe,ary2(K)+1,Len(string)) then
.... got it
End if
K = K + 1
Loop
Next
01234567
EXE="CCEEFABB"
ary3 ary1 ary2 EXE
Pos Value Pos Value Pos Value Pos Value
"A" 0 0 "A" 0 5 0 "C"
"B" 1 1 "B" 1 6 1 "C"
"C" 3 2 "B" 2 7 2 "E"
"D" 0 3 "C" 3 0 3 "E"
"E" 5 4 "C" 4 1 4 "F"
"F" 7 5 "E" 5 2 5 "A"
6 "E" 6 3 6 "B"
7 "F" 7 4 7 "B"
Look for "EF"
J = Asc("E)
For
K = Ary3(J) ' 5
ary1(5) = "E"
ary2(5) = 2
MidB(aryEXE,2,2) = "EE"
K = K + 1 6
ary1(6) = "E"
ary2(6) = 3
MidB(aryEXE,3,2) = "EF"