استفسار حول كود بحث بصيغة hex لقيم
#11
الدالة GetHexStrByOffset فيها ثلاث مدخلات
الأول مسار الملف
الثاني أفست البداية
الثالث أفست النهاية
هنا يجب ان لا تكون قيمة أكبر من حجم الملف
سبحان الله وبحمده سبحان الله العظيم
الرد
#12
اولا شكرا جزيلا لاخي صاحب الموضوع المهم والذي سبق وبحثت جوانبه ولم اجد اجابة شافية وثانيا الشكر كل الشكر لاخونا الكريم الشبح على المعلومات الرائعة وبعد اذن صاحب الموضوع لي بعض التساؤلات بخصوص هذا الطرح
في الحقيقة عندي برنامج يقراء ملف الابروم من احد انواع الهواتف وكنت اضطر الى تحميل هذا الاخير الى برنامج hexedituer ومن ثم ابحث عن قيم معينة داخل الملف وهذه القيم هي شفرة الهاتف ..كل هذا العمل اليدوي اردت ان اختصره من خلال انشاء برنامج احمل له الملف عن طريق opendialog ومن ثم يعطيني القيم المرادة مباشرة ولم اجد حل لان تحميل ملف الى الذاكرة كان بطيئ ومليئ بالاخطاء ....ويبدو لي انك اخي الشبح تمتلك الحل واتمنى ان توضحلي طريقة استخدام هذه الخورزميات وهل تنفع في حالتي هذه مع اجمل التحايا اخي الفاضل
الرد
#13
هذه محاولتي لاستثمار الدالة الثانية المثال في المرفقات وممكن اخي الفاضل الشبح هل ممكن طريقة مثالية للتعديل على البيانات وحفضها مجدد

[صورة: D8WE1m.png]

علما اني اضف دالة تحويل الhex الى str وهذا طبعا لاظهار قيم الميمو1 بشكل نص في ميمو2


الملفات المرفقة
.rar   hex.rar (الحجم : 613.41 ك ب / التحميلات : 40)
الرد
#14
السلام عليكم
إدا كنت ستعدل في بايتات الملف من Memo
سيتوجب عليك تحويل HexStr إلى Byte Array
هده دالتين واحدة لتحويل HexStr و الأخرى لإعادة الكتابة في الملف من جديد

PHP كود :
type
  TByteArray 
= array of Byte;

procedure HexStr2ByteArray(const HexStr: string; out ByteArray: TByteArray);
var
  
I: Integer;
begin
  SetLength
(ByteArray, Length(HexStr) div 2);
  for 
I := 0 to Pred(Length(HexStr) div 2) do
  
begin
    ByteArray
[I] := StrToInt('$' + Copy(HexStr, (I * 2) + 1, 2));
  
end;
end;

procedure WriteHexStrByOffset(const AOldFile, ANewFile: string; const ABuffer:
  
TByteArray;
  const 
AOffsetB, AOffsetE: Integer);
var
  
MS: TMemoryStream;
begin
  MS 
:= TMemoryStream.Create;
  try
    
MS.LoadFromFile(AOldFile);
    
MS.Position := AOffsetB;
    
//MS.Seek(0, 0);
    
try
      
MS.WriteBuffer(ABuffer[0], AOffsetE + 1);
      
MS.SaveToFile(ANewFile);
    
except
      
// Error
    
end;
  finally
    
MS.Free;
  
end;
end;

{
Usage:

var
  
ByteArray: TByteArray;
begin
  HexStr2ByteArray
('FF00EE', ByteArray);
  
WriteHexStrByOffset('Test.exe', 'NewTest.exe', ByteArray, 0, 3);
end;
} 
أيضا مرفق المثال في المشاركة رقم 6
http://www.delphi4arab.net/forum/showpos...ostcount=6
مع إضافة إمكانية إعادة الكثابة


الملفات المرفقة
.7z   HxViewer2.7z (الحجم : 1.99 ك ب / التحميلات : 19)
سبحان الله وبحمده سبحان الله العظيم
الرد
#15
عيد مبارك اخي الشبح ولجميع الاخوة الكرام سيتم ان شاء الله تطبيق المثال ومحاولة فهم جيد للكود وفي الحقيقة اخي الشبح لقد رفعت الغموض عن هذه المعارف وفتح لنا باب واسع من المعرفة وياريت المزيد من الامثلة او فتح موضوع مستقل تشرح جميع جوانب هذا الموضوع الشيق
الرد


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


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