تقييم الموضوع :
  • 1 أصوات - بمعدل 5
  • 1
  • 2
  • 3
  • 4
  • 5
[سؤال] كيفية التعديل على قيمه معينه داخل ملف هيكس
#21
لقد قمت بتعديل مثال "البحث عن 3 قيم وتعديل القيمة الثالثة" بحيث يقوم بحساب CRC-32 للملف بعد التعديل وتخزينها في المكان الذي أشرت إليه

كود :
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()

    'حساب CRC-32 للملف بعد التعديل وتحويله لمصفوفة من البايت
    Dim CRCBytes As Byte() = BitConverter.GetBytes(CRC32.ComputeChecksum(Buffer))

    'الانتقال لموقع حفظ CRC-32
    MyFileStream.Seek(&HC, IO.SeekOrigin.Begin)

    'كتابة قيمة CRC-32 الجديدة للملف بعد التعديل
    MyFileStream.Write(CRCBytes, 0, CRCBytes.Length)

Finally
    If MyFileStream IsNot Nothing Then MyFileStream.Close()
End Try

وهذا كود Crc32 - منقول

كود :
Public Class Crc32
    Shared table As UInteger()

    Shared Sub New()
        Dim poly As UInteger = &HEDB88320UI
        table = New UInteger(255) {}
        Dim temp As UInteger = 0
        For i As UInteger = 0 To table.Length - 1
            temp = i
            For j As Integer = 8 To 1 Step -1
                If (temp And 1) = 1 Then
                    temp = CUInt((temp >> 1) Xor poly)
                Else
                    temp >>= 1
                End If
            Next
            table(i) = temp
        Next
    End Sub

    Public Shared Function ComputeChecksum(bytes As Byte()) As UInteger
        Dim crc As UInteger = &HFFFFFFFFUI
        For i As Integer = 0 To bytes.Length - 1
            Dim index As Byte = CByte(((crc) And &HFF) Xor bytes(i))
            crc = CUInt((crc >> 8) Xor table(index))
        Next
        Return Not crc
    End Function
End Class

المصدر: Calculate CRC32 of an String or Byte Array
الرد }}}
تم الشكر بواسطة: محمديات


الردود في هذا الموضوع
RE: كيفية التعديل على قيمه معينه داخل ملف هيكس - بواسطة Motaz Alnuweiri - 21-05-14, 04:52 PM

المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  كيفية منع ظهور الأخطاء من إعدادات البيسيك mmaalmesry 2 851 29-08-25, 10:30 AM
آخر رد: mmaalmesry
  [سؤال] طريقة توسيط النص داخل اداة comboBox سمير1404 7 3,860 24-08-25, 01:01 PM
آخر رد: أبو خالد الشكري
  كيفية جلب أسماء الأعمدة بجدول من جداول sql heem1986 2 747 17-08-25, 09:15 PM
آخر رد: heem1986
  كيفية حفظ إعدادات البرنامج بحيث لا تتغير أحمد إبراهيم سعد 4 3,004 06-08-25, 06:34 PM
آخر رد: Taha Okla
  مساعدة في كيفية ترحيل البيانات من داتا قريدفيو إلى داتا قريدفيو في فيجوال بيسك ahmedfa71 13 2,246 09-07-25, 11:24 PM
آخر رد: أبو خالد الشكري
  كيفية احتساب الفرق بين تاريخين بناء على عدد معين مصمم هاوي 2 554 15-01-25, 02:02 PM
آخر رد: مصمم هاوي
  كيفية التعامل مع inputbox في فيجوال ستوديو أسامة حسين 4 3,506 14-01-25, 02:04 AM
آخر رد: أبو خالد الشكري
  استدعاء من جدولين داخل اداه FlowLayoutPanel برجاء الافادة للضرورة جداً modymody300894 7 638 15-11-24, 11:02 AM
آخر رد: modymody300894
  كيفية معرفة الجهاز رئيسي ام فرعي المتألق9 1 398 13-11-24, 06:41 PM
آخر رد: justforit
  كتابه عدد معين من الارقام داخل تيكست بوكس modymody300894 3 559 07-11-24, 09:15 PM
آخر رد: modymody300894

التنقل السريع :


يقوم بقرائة الموضوع: