معرفة function المصدرة من مكتبة DLL
#1
السلام عليكم
هذا البرنامج وجدته في إحدى المواقع و هو يستعمل لمعرفة function المصدرة من مكتبة DLL


الملفات المرفقة
.rar   dllfunc1.rar (الحجم : 1.86 ك ب / التحميلات : 329)
الرد
#2
وعليكم السلام ورحمة الله
بارك الله لك أخي 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
شكرا كثيرا.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد
#3
و فيكم بارك الله
ما قمت بطرحه من دالات مهم جدا
المثال الذي طرحته مبرمج من طرف Sephiroth Lune
بالتوفيق أخي
الرد
#4
هناك خطا عند استخدام dxe
إقتباس : result := (searchtreeforfile(pchar(arootpath), pchar(afilename),
found) = true);
إقتباس :[dcc error] unit1.pas(35): E2010 incompatible types: 'pansichar' and 'pwidechar'

كيف نحل المشكلة؟
الرد
#5
السلام عليكم
إقتباس : هناك خطا عند استخدام 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;
بالتوفيق
الرد
#6
وعليكم السلام
انت مبدع بكل معنى الكلمة
دائما يصادفني هذا الخطا عند وجود char
الحل هو تحويلة
كود :
PChar(ARootPath)
الى
كود :
PansiChar(AnsiString(ARootPath)
او
كود :
ansichar

الى
كود :
string(Found)

يعني تغليف يرجع type الى الاصل
الرد
#7
كيف نستخرج عنوان 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;
الرد


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


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