21-05-14, 02:13 AM
تفضل أخي، هذا بالنسبة للبحث عن 3 قم واستبدال القيمة الثالثة
والكود المستخدم للبحث داخل مصفوفة عن مصفوفة آخرى من برمجتي (مع العلم أنه كل الأكواد من برمجتي)
كود :
Dim MyFileStream As IO.FileStream = Nothing
Try
'تعريف مسار الملف
MyFileStream = New IO.FileStream("D:\test.exe", IO.FileMode.Open, IO.FileAccess.ReadWrite)
'مصفوفة من البايت بحجم الملف
Dim Buffer(MyFileStream.Length - 1) As Byte
'المصفوفة المراد البحث عنها داخل الملف
Dim Find As Byte() = {&HFF, &HFF, &H10}
'قرائة الملف حتي النهاية
MyFileStream.Read(Buffer, 0, Buffer.Length)
Dim Index As Integer = 0
Do
Index = SearchByteArray(Buffer, Find, Index)
If Index <> -1 Then
'اسنبدال القيمة الثالثة بقيمة جديدة
Buffer(Index + 2) = &HFF
End If
Loop Until Index = -1
'الانتقال لبداية الملف
MyFileStream.Seek(&H0, IO.SeekOrigin.Begin)
'كتابة المصفوفة للملف بعد التعديل
MyFileStream.Write(Buffer, 0, Buffer.Length)
'للتأكد من أنه تم كتابة كل البيانات للملف
MyFileStream.Flush()
Finally
If MyFileStream IsNot Nothing Then MyFileStream.Close()
End Tryوالكود المستخدم للبحث داخل مصفوفة عن مصفوفة آخرى من برمجتي (مع العلم أنه كل الأكواد من برمجتي)

كود :
Function SearchByteArray(ByVal Array As Byte(), ByVal Find As Byte(), ByVal Start As Integer) As Integer
If Find.Length > Array.Length Then Return -1
Dim Index As Integer = 0
If Start > 0 Then
Index = Start + Find.Length
End If
If Index > Array.Length Then Return -1
For I As Integer = Index To (Array.Length - Find.Length) - 2
If Array(I) = Find(0) Then
Dim Counter As Integer = 1
For J As Integer = 1 To Find.Length - 1
If Array(I + J) = Find(J) Then
Counter += 1
Else
Exit For
End If
Next
If Counter = Find.Length Then Return I
End If
Next
Return -1
End Function