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

نسخة كاملة : معرفة function المصدرة من مكتبة DLL
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم
هذا البرنامج وجدته في إحدى المواقع و هو يستعمل لمعرفة function المصدرة من مكتبة DLL
وعليكم السلام ورحمة الله
بارك الله لك أخي paix144 مثال جميل
المثال يستخدم المكتبة المضمنة ImageHlp
تحمل هذه المكتبة أغراض مفيدة لبعض الأعمال
مثال SearchForFile للبحث عن ملفات:
كود :
uses ImageHlp; function SearchForFile(const ARootPath: string; const AFileName: string; var APathFound: string): Boolean; var Found: array[0..500] of Char; begin FillChar(Found, SizeOf(Found), #00); Result := (SearchTreeForFile(PChar(ARootPath), PChar(AFileName), Found) = True); APathFound := ExtractFilePath(Found); end; procedure TForm1.Button1Click(Sender: TObject); var APathFound: string; begin if SearchForFile('C:\WINDOWS\', 'winhlp32.exe', APathFound) then ShowMessage('winhlp32.exe found in: ' + APathFound); end;
المثال لـ Thomas Stutz

مثال آخر لاختبار الملفات Checksum:
PHP كود :
uses Windows, ImageHlp;

{
$APPTYPE CONSOLE}

function 
ComputePEChecksum(FileName: string): DWORD;
var
  
h, hMap: Cardinal;
  
pMem: Pointer;
  
headersum, checksum, fsizehigh, fsizelow: DWORD;
  
nth: PImageNtHeaders;
Label
  cleanup
;
begin
  pMem 
:= nil;
  
Result := 0;
  
headersum := 0;
  
checksum  := 0;
  
h := Windows.CreateFile(PChar(FileName), GENERIC_READ, FILE_SHARE_READ,
    
nil, OPEN_EXISTING, 0, 0);
  if (
h = INVALID_HANDLE_VALUE) then
    
Exit;
  
fsizelow := Windows.GetFileSize(h, Pointer(@fsizehigh));
  
hMap := Windows.CreateFileMapping(h, nil, PAGE_READONLY, fsizeHigh, fsizeLow, nil);
  if (
hMap = 0) then
    
goto cleanup;
  
pMem := Windows.MapViewOfFile(hMap, FILE_MAP_READ, 0, 0, 0);
  if (
pMem = nil) then
    
goto cleanup;
  
nth := CheckSumMappedFile(pMem, fsizeLow, @headersum, @checksum);
  if (
nth = nil) then
    checksum 
:= 0;
  
cleanup:
  if (
pMem <> nil) then
    Windows
.UnmapViewOfFile(pMem);
  if (
hMap <> 0) then
    Windows
.CloseHandle(hMap);
  if (
h <> 0) then
    Windows
.CloseHandle(h);
  
Result := checksum;
end;

var
  
x1, x2: DWORD;
begin
  x1 
:= ComputePEChecksum('c:\1.exe'); // original filename
  
x2 := ComputePEChecksum('c:\2.exe');
  
// original filename but has a string in it lightly modified
  
WriteLn('Checksum 1: ', x1, #13#10'Checksum 2: ', x2);
end. 
المثال لـ Elias Bachaalany
شكرا كثيرا.
و فيكم بارك الله
ما قمت بطرحه من دالات مهم جدا
المثال الذي طرحته مبرمج من طرف Sephiroth Lune
بالتوفيق أخي
هناك خطا عند استخدام dxe
إقتباس : result := (searchtreeforfile(pchar(arootpath), pchar(afilename),
found) = true);
إقتباس :[dcc error] unit1.pas(35): E2010 incompatible types: 'pansichar' and 'pwidechar'

كيف نحل المشكلة؟
السلام عليكم
إقتباس : هناك خطا عند استخدام dxe
..
كيف نحل المشكلة؟
كود :
function SearchForFile(const ARootPath: string; const AFileName: string; var APathFound: string): Boolean; var Found: array[0..500] of ansichar; begin FillChar(Found, SizeOf(Found), #00); Result := (SearchTreeForFile(PansiChar(AnsiString (ARootPath)), PansiChar(AnsiString (AFileName)), Found) = True); APathFound := ExtractFilePath(string(Found)); end;
بالتوفيق
وعليكم السلام
انت مبدع بكل معنى الكلمة
دائما يصادفني هذا الخطا عند وجود char
الحل هو تحويلة
كود :
PChar(ARootPath)
الى
كود :
PansiChar(AnsiString(ARootPath)
او
كود :
ansichar

الى
كود :
string(Found)

يعني تغليف يرجع type الى الاصل
كيف نستخرج عنوان Method
وننفذه
كود :
procedure ListDLLExports(const FileName: string; List: TStrings); type TDWordArray = array [0 .. $FFFFF] of DWORD; var imageinfo: LoadedImage; pExportDirectory: PImageExportDirectory; dirsize: Cardinal; pDummy: PImageSectionHeader; i: Cardinal; pNameRVAs: ^TDWordArray; Name, AddressOfFunctions: string; begin List.Clear; (* function MapAndLoad(ImageName, DllPath: LPSTR; LoadedImage: PLoadedImage; DotDll, ReadOnly: Bool): Bool; stdcall; *) if MapAndLoad(PAnsiChar(AnsiString(FileName)), nil, @imageinfo, True, True) then begin try // Form1.Label2.Caption :='Address Of Dll = ' + AnsiString(@imageinfo) ; pExportDirectory := ImageDirectoryEntryToData(imageinfo.MappedAddress, False, IMAGE_DIRECTORY_ENTRY_EXPORT, dirsize); if (pExportDirectory <> nil) then begin pNameRVAs := ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress, DWORD(pExportDirectory^.AddressOfNames), pDummy); for i := 0 to pExportDirectory^.NumberOfNames - 1 do begin Name := PAnsiChar(ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress, pNameRVAs^[i], pDummy)); // AddressOfFunctions := PAnsiChar(pExportDirectory^.AddressOfFunctions) ; List.Add(Name); end; end; finally UnMapAndLoad(@imageinfo); end; end; end;