delphi4arab منتديات دلفي للعرب
استفسار حول كود بحث بصيغة hex لقيم - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : استفسار حول كود بحث بصيغة hex لقيم (/showthread.php?tid=6447)

الصفحات: 1 2


استفسار حول كود بحث بصيغة hex لقيم - بى سات - 17-09-2014

السلام عليكم

كيف البحث عن قيمة هيكس مينة احددها للبرنامج مهما كان ترقيمها بالاوفست يعنى لا يشترط تحديد اوفست معين لها
وبعدها يقوم بتحديد مثلا 10 او 20 بايت بعدها ويستخرجهم داخل memo
مرفق صورة
[صورة: CmYuyA.jpg]


استفسار حول كود بحث بصيغة hex لقيم - Insid3Code - 17-09-2014

و عليكم السلام و رحمة الله
راجع اخي هذه المشاركة رقم 22... الملفات المصدرية للأداة SlugMRT

http://www.delphi4arab.net/forum/showthread.php?tid=1733&page=3


استفسار حول كود بحث بصيغة hex لقيم - بى سات - 17-09-2014

بارك الله فيك يا اخى

كيف احدد مثلا 300 بايت بعد الاوفت المحدد مباشرة ويعرضهم داخل ميمو


استفسار حول كود بحث بصيغة hex لقيم - Agmcz - 18-09-2014

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

PHP كود :
function FindByHexStr(const AFile, AHexStr: string): Integer;
  function 
HexStr2ChrStr(HexStr: string): string;
  var
    
I: Integer;
    
S: string;
  
begin
    
for I := 1 to Length(HexStr) do
    
begin
      S 
:= S + HexStr[I];
      if 
I mod 2 = 0 then
      begin
        Result 
:= Result + Chr(StrToInt('$' + S));
        
S := '';
      
end;
    
end;
  
end;
var
  
MS: TMemoryStream;
  
FileSize: Integer;
  
Buffer: string;
begin
  Result 
:= -1;
  
MS := TMemoryStream.Create;
  try
    
MS.LoadFromFile(AFile);
    
FileSize := MS.Size;
    
SetLength(Buffer, FileSize);
    
MS.Read(Buffer[1], FileSize);
    try
      
Result := Pos(HexStr2ChrStr(AHexStr), Buffer) - 1;
    
except
      
// Error
    
end;
  finally
    
MS.Free;
  
end;
end;

{
Usage:
Edit1.Text := IntToStr(FindByHexStr('C:\Test.exe', '4D5A500002'));
}

function 
GetHexStrByOffset(AFile: string; const AOffsetB, AOffsetE: Integer):
  
string;
var
  
MS: TMemoryStream;
  
I, FileSize: Integer;
  
Buffer: array of Byte;
begin
  Result 
:= '';
  
MS := TMemoryStream.Create;
  try
    
MS.LoadFromFile(AFile);
    
FileSize := AOffsetE - AOffsetB + 1;
    
SetLength(Buffer, FileSize);
    
MS.Position := AOffsetB;
    
MS.Read(Buffer[0], FileSize);
    try
      for 
I := 0 to Pred(FileSize) do
      
begin
        Result 
:= Result + IntToHex(Buffer[I], 2);
      
end;
    
except
      
// Error
    
end;
  finally
    
MS.Free;
  
end;
end;

{
Usage:
Memo1.Text := GetHexStrByOffset('C:\Test.exe', 5, 300);
} 



استفسار حول كود بحث بصيغة hex لقيم - بى سات - 18-09-2014

بارك الله فيك اخى
الدالة الاولى بكود الاستعمال تعمل بشكل ممتاز ولاكن الدالة التانية و يقراء من بعد الاوفست الناتج داخل الاديت ب 7 بايت مثلا
القيمة داخل اللاديت تبدا من 47621
كيف يبدا تحديد من بعد تلك القيمة ب7 بايت لتكون بداية التحديد والعرض داخل الميمو ب عد تلك القيمة وليس اول الملف
و استعمال opendlg وليس تحديد ملف داخل مسار معين
شكرا


استفسار حول كود بحث بصيغة hex لقيم - Agmcz - 18-09-2014

ستكون هكذا
PHP كود :
var
  
Offset: Integer;
begin
  Edit1
.Text :=  IntToStr(FindByHexStr('C:\Test.exe', '4D5A500002'));
  
Offset := StrToInt(Edit1.Text) + 7;
  
Memo1.Text := GetHexStrByOffset('C:\Test.exe', Offset, 300);
end; 



استفسار حول كود بحث بصيغة hex لقيم - بى سات - 19-09-2014

اقل ما يقال عنك انك رائع

لك كل التقدير ولاكن لدى استفسار بسيط لماذا اقوم بادخال القيمة يدويا فى الاديت 2 طالما استطيع ان اجعل البرنامج يطبعها بشكل الى


استفسار حول كود بحث بصيغة hex لقيم - Agmcz - 19-09-2014

الأمر راجع إليك
الفكرة عندك وأكمل



استفسار حول كود بحث بصيغة hex لقيم - بى سات - 19-09-2014

كل الشكر والتقدير لك ساتمها بعون الله
احترامى لك ياغالى


استفسار حول كود بحث بصيغة hex لقيم - بى سات - 19-09-2014

سؤال اخير اخى الغالى استعملت
SizeFrag:=390
لاحدد بة قيمة بايت التحديد ولاكن اقع فى الخطاء البرمجى