delphi4arab منتديات دلفي للعرب

نسخة كاملة : استفسار حول كود بحث بصيغة hex لقيم
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
الصفحات : 1 2
السلام عليكم

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

Insid3Code

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

http://www.delphi4arab.net/forum/showthr...733&page=3
بارك الله فيك يا اخى

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

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);
} 
بارك الله فيك اخى
الدالة الاولى بكود الاستعمال تعمل بشكل ممتاز ولاكن الدالة التانية و يقراء من بعد الاوفست الناتج داخل الاديت ب 7 بايت مثلا
القيمة داخل اللاديت تبدا من 47621
كيف يبدا تحديد من بعد تلك القيمة ب7 بايت لتكون بداية التحديد والعرض داخل الميمو ب عد تلك القيمة وليس اول الملف
و استعمال opendlg وليس تحديد ملف داخل مسار معين
شكرا
ستكون هكذا
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; 
اقل ما يقال عنك انك رائع

لك كل التقدير ولاكن لدى استفسار بسيط لماذا اقوم بادخال القيمة يدويا فى الاديت 2 طالما استطيع ان اجعل البرنامج يطبعها بشكل الى
الأمر راجع إليك
الفكرة عندك وأكمل
كل الشكر والتقدير لك ساتمها بعون الله
احترامى لك ياغالى
سؤال اخير اخى الغالى استعملت
SizeFrag:=390
لاحدد بة قيمة بايت التحديد ولاكن اقع فى الخطاء البرمجى
الصفحات : 1 2