الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

قراءة بايتات من ملف

مغلق
بدأه xc-delphi-cx في 16 أبريل 2006 · 6 رد · 716 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

في الـ++borland C يكفي الكود

if(memcmp(DosHeader,Digits,128)==0)

لكن في الدلفي

أحاول أكتب كود أفتح فيه ملف وأقرأ بايتات محدده بعدين أقارنها ببايتات موجوده مسبقا وبحسب النتائج راح أقرر للبرنامج أوامر

اللى يهمني فقط كيف أقارن البايتات المحدده بالبايتات المقروءه

const
Digits: array[0..27] of byte = ($4D, $5A, $90, $00, $03,
 $00, $00, $00, $04, $00 , $00,$00, $FF, $FF, $00,
 $00, $B8, $00, $00, $00, $00, $00, $00, $00, $40,
 $00, $00, $00);

function scan ():boolean;

var
  lpData: Pointer;
  hFile: THandle;
  dwReadBytes, dwFileSize, dwEP: DWORD;
  DosHeader: TImageDosHeader;
  NtHeaders: TImageNtHeaders;
begin
  hFile := CreateFile(PChar('virus.exe'), GENERIC_ALL, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
  if hFile = 0 then
  begin
    CloseHandle(hFile);
    Exit;
  end;
  // Read DOS Header
  SetFilePointer(hFile, 0, nil, FILE_BEGIN);
  ReadFile(hFile, DosHeader, sizeof(DosHeader), dwReadBytes, nil);
  if dwReadBytes = sizeof(DosHeader) then
  begin

// هنا محتاج لكود يحدد حجم الـDosHeader كـبايتات محدده
// بعدين يقارنها بالبايتات الموجوده بـDigits

    SetFilePointer(hFile, DosHeader._lfanew, nil, FILE_BEGIN);
    ReadFile(hFile, NtHeaders, sizeof(NtHeaders), dwReadBytes, nil);
    if dwReadBytes = sizeof(NtHeaders) then
    begin

// هنا محتاج لكود يحدد حجم الـNtHeaders كـبايتات محدده
// بعدين يقارنها بالبايتات الموجوده بـDigits

        CloseHandle(hFile);
        Result := True;
        end else
        CloseHandle(hFile);
        end else
        CloseHandle(hFile);
end;
#2

You may try CompareMem

"First they ignore you, then they laugh at you, then they attack you, then you win"

===

اقتباس

حُكَّامُـنَا إِنْ تَصَـدّوا لِلْحِمَــى اقْتَحَمُـوا ***** وَإِنْ تَصَدَّى لَـهُ المُسْتَعْمِـرُ انْسَحَبُـوا

هُمْ يَفْرشـُونَ لِجَيْـشِ الغَــزْوِ أَعْيُنَـهُـمْ ***** وَيَدَّعُــونَ وُثُـوبَـاً قَـبْـلَ أَنْ يَثِـبُــوا

الحَاكِمُـونَ و«وَاشُنْـطُـنْ» حُكُومَتُـهُـمْ ***** وَاللامِعُــونَ وَمَـا شَعَّـوا وَلا غَرَبُــوا

القَاتِلُـــونَ نُبُــوغَ الشَّـعْــبِ تَرْضِـيَـــةً ***** لِلْمُعْتَدِيــنَ وَمَـا أَجْـدَتْـهُـمُ الـقُــرَبُ

لَهُمْ شُمُـوخُ «المُثَنَّـى» ظَاهِـرَاً وَلَهُـمْ ***** هَـوَىً إِلَـى بَابَـك الخَرْمِـيّ يُنْتَسَـبُ

البردوني "أبو تمام وعروبة اليوم" 1971

===

اقتباس
عبيد الهوى يحكمون البـلاد ***** ويحكمهــم كلّهـــم درهــــــم

و تقتـادهـم شهـوة لا تنــام ***** وهـــم فـي جـهالتهــم نــــوّم

ففــي كـــلّ ناحيــة ظـالـــم ***** غبــــــيّ يسـلـّطــــه أظلـــم

أيا من شبعتم على جوعــنا ***** وجـــوع بنينـا ألـم تتخمـــوا ؟

ألم تفهموا غضبة الكادحين ***** على الظلـم ؟ لا بدّ أن تفهموا

البردوني "نحن و الحاكمون "

#3

ماخلوها memcmp وريحونااا :D

نجرب ليش لا :rolleyes:

تعديل :http://www.ceu.fi.udc.es/docs/freepascal/units/units.html

حصلته وانا ابحث للفائده

تم تعديل هذه المشاركة بواسطة xc-delphi-cx في 16 أبريل 2006 في 14:14

#4

بما أن عدد Bytes المتعامل معها صغير لماذا لم تستخدم For ...

d4baa0.gif
#5

المشكله اني اتعامل مع byte ولما أقرأ الـDosHeader راح يتخزن في pointer وكذا مع كذا راح أتوووه

التعامل مع المتغيرات مش ولا بد عندي

#6

ما تحاول

ٍVirus signature scanner ؟

d4baa0.gif
#7

بالضبط

هذا الموضوع مغلق.

مواضيع مشابهة