تقييم الموضوع :
  • 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
الرد }}}
تم الشكر بواسطة: محمديات
#22
لا ادري ما هي المشكله هنا

الرد }}}
تم الشكر بواسطة:
#23


وعلى فكره انا شغال على 2013 vb.net
والبرنامج تم عمله على .net freamwork 4
ولا ادري ما المشكله
الرد }}}
تم الشكر بواسطة:
#24
(21-05-14, 06:54 PM)محمديات كتب :

وعلى فكره انا شغال على 2013 vb.net
والبرنامج تم عمله على .net freamwork 4
ولا ادري ما المشكله

ارجع إلي هذه المشاركة التي فيها البحث عن 3 قيم وتعديل القيمة الثالثة وانسخ كود البحث داخل مصفوفة عن مصفوفة آخرى

ملاحظة: لقد قمت بتعديل كل الاكواد في جميع المشاركات بحيث أصبحت أبسط وأصغر
الرد }}}
تم الشكر بواسطة: محمديات
#25
تمام واضح سوف اقوم بالتجربه والرد عليك
الرد }}}
تم الشكر بواسطة:
#26
ممتاااااااااااااز وشكرا لك للمجهود الطيب لكن المشكله ان ال crc لا يعطي القيم اللي انا طالبها بالظبط لأن المشكله لا اعرف نوع ال crc المستخدمه في مثل هذه الملفات ولن نتطرق له الن حتى اتاكد من crc صحيح اريد استخدامه


اما بالنسبه واجهتني مشكله في الكود هذا لا ادري لماذا وشكرا لك
الرد }}}
تم الشكر بواسطة:
#27
(21-05-14, 10:36 PM)محمديات كتب : اما بالنسبه واجهتني مشكله في الكود هذا لا ادري لماذا وشكرا لك

هذا حل لمشكلتك Smile

كود :
Dim Find As Byte() = {&HFF, &HFF, &H10}

If IsArraysEqual(Find, {&HFF, &HFF, &H10}) Then
    MsgBox("الحالة الأولى")
ElseIf IsArraysEqual(Find, {&H5E, &H5, &H64}) Then
    MsgBox("الحالة الثانية")
Else
    MsgBox("الحالة الثالثة")
End If

وهذا الكود المستخدم للتحقق من أن المصفوفتين متساويتين

كود :
Function IsArraysEqual(ByVal ArrayA As Byte(), ByVal ArrayB As Byte()) As Boolean
    If ArrayA.Length <> ArrayB.Length Then
        Return False
    Else
        Dim Counter As Integer = 0
        For I As Integer = 0 To ArrayA.Length - 1
            If ArrayA(I) = ArrayB(I) Then
                Counter += 1
            Else
                Exit For
            End If
        Next

        Return (Counter = ArrayA.Length)
    End If
End Function
الرد }}}
تم الشكر بواسطة: محمديات
#28
شكرا لمتابعتك لي اخي الحبييييييييييييييييييييييييييييييب جدا Motaz Alnuweiri واتمنى اقدر ارد جميلك هذا علي وسوف اجرب واوفيك بالنتيجه
الرد }}}
تم الشكر بواسطة:
#29
(22-05-14, 04:26 PM)محمديات كتب : شكرا لمتابعتك لي اخي الحبييييييييييييييييييييييييييييييب جدا Motaz Alnuweiri واتمنى اقدر ارد جميلك هذا علي وسوف اجرب واوفيك بالنتيجه

العفو أخي محمديات Smile
الرد }}}
تم الشكر بواسطة: محمديات
#30
1- بالنسبه لل crc وجدت برنامج يقوم بعمله بالطريقة الصحيحه ويكتب ال crc المناسب للملف والملف يعمل بطريقه صحيحه انا رفعت البرنامج لمعرفة نوع ال crc او الطريقة التي يتبعها في حساب ال crc او على الأقل طريقة دمجه داخل برنامجي ليعمل في الخلفية ويعدل ال crc Smile

2- عندي مشكله عند البحث بالهكس عن مجموعة بايت بجوار بعضهم اريد ان اظهر كل قيمة منهم في صندوق فيظهرون عندي بصيغة الأرقام ولا يظهرون بصيغة الهيكس وانا اريدهم يظهرون بصيغة الهيكس والكود المستخدم
كود :
Dim Buffer(MyFileStream.Length - 1) As Byte
            Dim Find As Byte() = {&H46, &H3, &HFF, &HF}
            MyFileStream.Read(Buffer, 0, Buffer.Length)
            If IsArraysEqual(Find, {&H46, &H3, &HFF, &HF}) Then
                Dim Index As Integer = 0
                Do
                    Index = SearchByteArray(Buffer, Find, Index)

                    If Index <> -1 Then

                        TextBox2.Text = Buffer(Index + 0)
                        TextBox3.Text = Buffer(Index + 1)
                        TextBox4.Text = Buffer(Index + 3) & Buffer(Index + 2)

                    End If
                Loop Until Index = -1

هذا ناتج الكود



ولكن من الفترض او المطلوب انه يظهر القيم الحقيقة مثل


ومكانهم بالملف الهيكس



مع العلم اني استخدمة خاصية البحث اللي حضرتك شرحتها علشان اعرف مكانه على ال buffer
ولكن ما الحل لأنه في النهاية المظهر اللي من المفترض ان يخرج



مع امكانية عمل swap بالضغط على زر وليكن مثلا لنقل مربع ازرق مكان مربع ازرق اخر في نفس الملف

واسف اني اطلت عليك اخي الحبيب والمحبوب Smile

Motaz Alnuweiri
الرد }}}
تم الشكر بواسطة:


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  ارجو التعديل على الدالة المرفقة - الدالة تعيد الرقم -1 new_programer 4 137 20-03-24, 01:18 PM
آخر رد: تركي الحلواني
  كيفية جمع أرقام عمود فى الداتا جريد فيو بناءاً على بيانات معينة heem1986 5 239 25-02-24, 11:26 PM
آخر رد: heem1986
  كيفية تنفيذ امر عند التعليم على checkbox بالداتا جريد فيو heem1986 2 162 21-02-24, 01:37 AM
آخر رد: heem1986
  كيفية انشاء سكريبت لقاعدة بيانات من خلال الكود heem1986 1 214 20-02-24, 12:00 AM
آخر رد: Kamil
  كيفية تنفيذ أمر عرض بيانات من فورم ثان مصمم هاوي 7 338 19-02-24, 12:28 AM
آخر رد: مصمم هاوي
  كيفية حفظ وتحزيم المشروع وتشغيله كبرنامج علىجميع الاجهزة الرائد 3 1,137 18-02-24, 10:37 PM
آخر رد: الحزين اليماني
  [VB.NET] مساعدة في استدعاء البيانات معينه من form الأول إلى form 2 بدون التعديل loay775 2 281 18-01-24, 05:04 PM
آخر رد: loay775
  [سؤال] كيفية انشاء فورم داخل مشروعى عاصم النجار 2 314 05-01-24, 12:36 AM
آخر رد: HALIM ELEULMA
  حماية عمود داخل ورقة الاكسل العيدروس 3 195 05-01-24, 12:21 AM
آخر رد: HALIM ELEULMA
  [سؤال] كيفية ربط ماكينة الدفع ببرنامج الكاشير ؟ osamaelmaghraby 3 336 26-12-23, 11:53 PM
آخر رد: osamaelmaghraby

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


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم