السلام عليكم
قررت كتابه سلسله مواضيع تهتم بمواضيع مختلفه , راجيا ان تنال اعجاب قارئيها .
قبل البدء اود التنيبه الى ان اي اخطاء قد ترد في المواضيع ترجع الى تقصير مني فارجو المعذره مقدما .
اي راي , تعقيب , تعديل ,انتقاد ... مرحب به . :)
لاي استفسارات يمكن التواصل ايضا على kcahcn@sina.com .
لنبدأ :
[1]: Enumerate the loaded modules for the specific process
في هذا الموضوع وكما يتضح من عنوانه سيتم ذكر الطرق التي يمكن من خلالها سرد الـ modules المستدعاه (المستخدمه) من قبل process معينه .
الطريقة الاولى :
باستخدام الداله EnumerateLoadedModules الموجوده في Imagehlp.dll كما انها موجوده في في Dbghelp.dll .
الداله السابقه مصرح بها في ImageHlp.pas كالتالي :
{$EXTERNALSYM EnumerateLoadedModules}
function EnumerateLoadedModules(hProcess: THandle;
EnumLoadedModulesCallback: TEnumLoadedModulesCallback;
UserContext: Pointer): Bool; stdcall;
...
function EnumerateLoadedModules; external ImagehlpLib name 'EnumerateLoadedModules';هناك داله اخرى حلت بديلا لهذه الداله هي EnumerateLoadedModules64 موجوده في ملفي الـ dll السابقين .
Declaration :
function EnumerateLoadedModules64(
hProcess : THANDLE ;
lpEnumFunc : TEnumloadedModulesCallback64
lParam : Pointer
): BOOL; stdcall;
external'Dbghelp.dll'name'EnumerateLoadedModules64';لمزيد من المعلومات عن الداله و الـ Parameters التابعه لها يمكن الاطلاع على http://msdn.microsoft.com/library/default....bghelp_7m7o.asp
بالنسبه للنوع TEnumloadedModulesCallback64 فهو معرف كالاتي :
type
PENUMLOADED_MODULES_CALLBACK64 = function(ModuleName: LPSTR; ModuleBase:Int64;
ModuleSize: ULONG; UserContext: Pointer): Bool; stdcall;
TEnumloadedModulesCallback64 = PENUMLOADED_MODULES_CALLBACK64;لمعلومات اكثر يمكن الاطلاع على http://msdn.microsoft.com/library/default....bghelp_33qs.asp
بعد هذه المقدمه ناتي لذكر مثال على ما ذكر :
ِAdd Button and ListBox to a Form
بعد تعريف TForm Class اضف الكود الاتي :
type
PENUMLOADED_MODULES_CALLBACK64 = function(ModuleName : LPSTR; ModuleBase : Int64;
ModuleSize: ULONG; UserContext : Pointer): Bool; stdcall;
TEnumloadedModulesCallback64 = PENUMLOADED_MODULES_CALLBACK64;
function EnumerateLoadedModules64(
hProcess :THANDLE ;
lpEnumFunc : TEnumloadedModulesCallback64;
lParam : Pointer
): BOOL; stdcall;
external'Dbghelp.dll'name'EnumerateLoadedModules64';هذا هو كود استدعاء الداله السابقه :
function EnumerateLoadedModulesProc64(
ModuleName : Pchar;
ModuleBase : int64;
ModuleSize : ULONG ;
UserContext : pointer
):BOOL; stdcall;
var
PStrList : ^TStringList;
begin
PStrList:=UserContext;
PStrList.Add(IntToHex(ModuleBase,8)+' '+inttostr(modulesize)+' '+ModuleName);
result:=true;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
hprocess:THandle;
StrList:TStringList;
begin
StrList:=TStringList.Create;
hprocess:=GetCurrentProcessId(); // The current process
EnumerateLoadedModules64(hprocess,@EnumerateLoadedModulesProc64,@StrList);
ListBox1.Items.Add('Base Size Name');
ListBox1.Items.AddStrings(StrList);
end;(f)
CIONO1