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

هل يمكنى عمل DLL من هذا الكود ام لا ؟

مغلق
بدأه Siner في 16 أغسطس 2005 · 49 رد · 3,195 مشاهدة · في لغة Delphi
مشاركة: واتساب X فيسبوك تيليجرام
#26

الشكر لله اخى الكريم عروة

حمدا لله على عودتك وارجو الله ان يكون تغيبك هذه الفترة فى خير

وبالنسبه الى الموضوع فهناك مشكله بسيطه فقط اعتقد انها فقط بسبب عدم معرفتى الكامله

لآ إله إلا الله محمد رسول الله

#27

السلام عليكم

انا شاكر جدا لجميع من عاوننى فى محنتى وارجو ان لا اكون اثقلت عليكم بطلباتى الكثيرة

وارجوا ايضا ان يكون هذا هو الطلب الأخير لأنهاء ذلك الموضوع وياليت تتقبلوه بصدر رحب

علما بأنى مازال امامى طريق طويل لكتابه برامجى كلها بالدلفى لكنى اريد ان استخدم الDLL الذى تم عمله هنا فى برنامج كبيير قمت ببرمجته بــVB والى الآن مع ان الأخ Deltaaziz ارسل مثالا لكيفيه استخدامه الأ انه بالدلفى وانا لن اقدر ان اترجم البرنامج الذى عملت به لمده سنه بالVB الى دلفى الآن

الخلاصه انى استخدم طريقه قراءة الملفات التاليه :Open "ExeFile.exe" For Binary As #FN

وهى تعنى فى الVB انى افتح الملف ExeFile للقراءة او الكتابه فى الباينرى

ثم اقرأء محتويات الملف المفتوح داخل Buffer بواسطه جمله Get مثلا

Get FN, , Buffer

وهنا اصبح عندى الملف مخزن فى هيئه Binary فى متغير اسمه Buffer مثلا

أى عندى ExE مخزن فى متغير Buffer

كل الموضوع يا اساتذة انى اريد ان امرر محتويات المتغير Buffer الى الداله الموجوده بالDll

وهى تقوم بتشغيل البرنامج الموجود بمحتوى البفر المرر اليها

وقد قام بالفعل الأخ Delta بذلك وارفق مثال لكن بالدلفى وجربت اعمل عليه بالVB ولم ينفع

وكنت اخجل من كتابه هذا الرد فى المنتدى لأنه ليس له علاقه بالدلفى ولكن طمعى فى كرم الله كبير أن لا تخذلونى او تقللوا من شأنى لأنى اريده فى مشروع Vb وانى قد قلت انى اتعلم الدلفى الآن لأنى فعلا لمستها عن قرب ووجدت فيها ماليس فى لغه اخرى مع انى كنت انوى تعلم الجافا بعد الVB

لكنى غيرت رأيى والله المستعان

اعتذر ان كنت اطلت عليكم لكنى فعلا كنت اريد ان اقول لكم كل ما اريد

واخيرا ادعوا لكل من شارك فى هذا الموضوع بكل التوفيق فى الآخرة والدنيا وصلاح الأحوال

وربنا يحسن ختامنا جميعا

السلام عليكم

لآ إله إلا الله محمد رسول الله

#28

حياك الله اخي ولماذا الخجل كثيرون هم من انتقل من الVB الى الدلفي ولوقلت ذلك لربما استطاع مساعدتك من يعرف اللغتين هنا

أضاعوني وأي فتى أضاعـوا * * * ليـوم كــريهـة وســـداد ثغــــر

وخـــــلونـي ومعتـرك المنايـا * * * وقد شـــرعوا أسنــتهم لنحـري

كأني لم أكــــــن فيهـم وسيطـا * * * ولم تك نســبتي في آل عمــرو

أجرر في الجـــوامع كـل يـوم * * * ألا لله مظــــلمتـي وهـصـــري

عسى الملك المجيب لمن دعاه * * * سينجيني فيعلم كيــف شكـري

فأجـــزي بالكرامـة أهـل ودي * * * وأجزي بالضـغينة أهل ضري

منتديات الرياضيات العربية

#29

و كنت أعرف أنك تستخدم VB لما تدخلت :s

أمزح :lol:

يكفي أن تمرر Pointer نحو Buffer وستعمل إن شاء الله

d4baa0.gif
#30

السلام عليكم ورحمة الله

عفوا لم افهم قصدك اخى DeltaAziz

هل امرر الBuffer الى MyCreateProcessEx ,ام ماذا تقصد بالمؤشر هنا Pointer

معذرة ارجو التوضيح قليلا (وياحبذا لو بمثال :rolleyes: )

لآ إله إلا الله محمد رسول الله

#31

لست معكم بالأجواء , ولكن إذا كنت تملك متحول نصي وتريد تمريرة كمؤشر ضع أمامة المعامل @

وإذا سبب مشاكل ضعه كالتالي :

@Buffer[0]

أتمنى أن تحصل على ماتريد , والفكرة ممتازة

#32

السلام عليكم

للأسف الشديد البرنامج لم يعمل معى حتى الآن وجربت عليه كل ماكتبتم الى يأست من كتر المحاوله

ما العمل اذن ؟ :(

لآ إله إلا الله محمد رسول الله

#33

لا تيأس يا أخي...

مرر مؤشر Buffer إلى الدالة

ما هو الخطأ الناتج بالضبط ؟

d4baa0.gif
#34
لا تيأس يا أخي... 
مرر مؤشر Buffer إلى الدالة

ما هو الخطأ الناتج بالضبط ؟

أكتب له شفرة ذلك أخي

ربما الخطأ هنا

#35

اخى البرنامج كله ينهار ويغلق ويظهر طلب ارسال الخطأ لمايكروسوفت

مع العلم انى جربت استخدام كلا من Deltaaziz.dll , Mylib.dll اى كل من الملفين يعطيان نفس النتيجه

وللتأكد من مشكله اليكم كود الvb لبرنامج اختبار ال Dll's التى ارفقت هنا من قبل :

Private Declare Function LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Private Declare Function FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
Private Declare Sub MyCreateProcessEx Lib "mylib.dll" (FileMemory  as String)

Dim Hnd As Long
Dim Buff As String
Dim Fn As Long


Private Sub Command1_Click()
Fn = FreeFile
Buff = String(FileLen(T1), Chr(0))
Open "D:\test.exe" For Binary As Fn
Get Fn, , Buff
Close Fn
Call MyCreateProcessEx(Buff)
End Sub


Private Sub Form_Load()
Hnd = LoadLibrary(Environ("windir") & "\System32\mylib.dll")
End Sub


Private Sub Form_Unload(Cancel As Integer)
FreeLibrary (Hnd)
End Sub

هذا كود برنامج اختبار كتبته الآن لكى اختبر اى Dll وطبعا فقط غير اسم ال Dll و اسم الفنكشن الى المراد اختباره

و مع العلم ان رساله اغلاق البرنامج تفيد بأن ال DLL هو سبب غلق البرنامج وتوقفه عن العمل

ارجوكم افيدونى بسرعه افادكم الله

لآ إله إلا الله محمد رسول الله

#36

لست خبير VB

أخر مرة لمست البيزك كان مع GWBasic و QBasic

سأطرح المشكل على قسم VB

الموضوع هنا

تم تعديل هذه المشاركة بواسطة DeltaAziz في 25 أغسطس 2005 في 12:14

d4baa0.gif
#37

غفر الله لك أخي Siner

أمضيت كل و قت فراغي أبحث...

Dim Buff As String

لا يمكنك إستعمل String إقرأ هنا لماذا

Private Declare Sub MyCreateProcessEx Lib "mylib.dll" (FileMemory  as String)

هذا لا يصلح

من موقع مايكروشوفت

إقرأ هذا

ثم هنـــــا التفسير

أقترح عليك كتابة برنامجك بدلفي

.

d4baa0.gif
#38

لا اله الا الله يعنى بعد كل هذا الجهد والتعب يضيع كل هذا هباء :( :(

وكمان لن استطيع استخدام AddressOf ولا اقدر على التعامل مع الDLL بعد كل هذا .. والله حرام

جزاك الله خير الجزاء Deltaaziz والله لقد بذلتم جهدا انت و اجميع من شارك فى الرد

ولكن كل شئ انهار امامى الآن وضاقت الدنيا بعد ماظننت انها قد فرجت للأسف وبعد ان قرأت ماكتب عن الموضوع :(

وانا لا استطيع ان اكتب البرنامج كله بالدلفى ثانيه لأنى مازلت اتعلمها من الصفر والبرنامج الذى تعبت فيه على مدار 15 شهر متقدم جدا

وكبير لدرجه لا تمكنى من اعاده كتابته مره ثانيه :(

لقد ازدا كرهى لمايكروسوفت اضعافا مضاعفة الآن ولا ادرى ماذا افعل . . لكن

على العموم ربنا يكرمكم جميعا و شكرا للمساعده

تم تعديل هذه المشاركة بواسطة Siner في 25 أغسطس 2005 في 20:01

لآ إله إلا الله محمد رسول الله

#39

السلام عليكم

هل يمكنك اخى Deltaaziz ارفاق كود الDLL الأخير الذى قمت بالتعديل عليه

وشكرا

لآ إله إلا الله محمد رسول الله

#40

ليس معي الأن و ليس لي أنترنت بالبيت :angry:

لكن تجد نسخة في هذا الموضوع

ملاحظة: ما تريد فعله ممكن ب VB لكن بإستخداف API فقط و من دون DLL

للأسف ليس لدي VB لتجربته لكني متأكد

d4baa0.gif
#41

:( ممكن من فضلك اخى DeltaAziz كود الdll الاخيرالذى قمت بالتعديل عليه :(

{ربى زدنى علما}

#42

رجاء من الاستاذ DeltaAziz ان يعيرنا اهتمامه

{ربى زدنى علما}

#43
JuStNiCk كتب:
رجاء من الاستاذ DeltaAziz ان يعيرنا اهتمامه

أنت تظلمني بقولك هذا... :blink:

عدم و جود رد لا يعني أن لا أعير الإهتمام

ثم هناك رابط بما تريد فوق، أنظر جيدا

سلام

d4baa0.gif
#44

ممكن سورس كود اخر dll ارفقته واسف على العبارة السابقة ومعلش انا مش لقيه ما تقوليش انظر فوق

{ربى زدنى علما}

#45

و من الربط فوق

type
  TSections = array [0..0] of TImageSectionHeader;


function GetAlignedSize(Size: dword; Alignment: dword): dword;
begin
  if ((Size mod Alignment) = 0) then
    Result := Size;
  else
    Result := ((Size div Alignment) + 1) * Alignment;
end;

function ImageSize(Image: pointer): dword;
var
  Alignment: dword;
  ImageNtHeaders: PImageNtHeaders;
  PSections: ^TSections;
  SectionLoop: dword;
begin
  ImageNtHeaders := pointer(dword(dword(Image)) + dword(PImageDosHeader(Image)._lfanew));
  Alignment := ImageNtHeaders.OptionalHeader.SectionAlignment;
  if ((ImageNtHeaders.OptionalHeader.SizeOfHeaders mod Alignment) = 0) then
  begin
    Result := ImageNtHeaders.OptionalHeader.SizeOfHeaders;
  end
  else
  begin
    Result := ((ImageNtHeaders.OptionalHeader.SizeOfHeaders div Alignment) + 1) * Alignment;
  end;
  PSections := pointer(pchar(@(ImageNtHeaders.OptionalHeader)) + ImageNtHeaders.FileHeader.SizeOfOptionalHeader);
  for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do
  begin
    if PSections[SectionLoop].Misc.VirtualSize <> 0 then
    begin
      if ((PSections[SectionLoop].Misc.VirtualSize mod Alignment) = 0) then
      begin
        Result := Result + PSections[SectionLoop].Misc.VirtualSize;
      end
      else
      begin
        Result := Result + (((PSections[SectionLoop].Misc.VirtualSize div Alignment) + 1) * Alignment);
      end;
    end;
  end;
end;

procedure CreateProcessEx(FileMemory: pointer);
var
  BaseAddress, Bytes, HeaderSize, InjectSize,  SectionLoop, SectionSize: dword;
  Context: TContext;
  FileData: pointer;
  ImageNtHeaders: PImageNtHeaders;
  InjectMemory: pointer;
  ProcInfo: TProcessInformation;
  PSections: ^TSections;
  StartInfo: TStartupInfo;
begin
  ImageNtHeaders := pointer(dword(dword(FileMemory)) + dword(PImageDosHeader(FileMemory)._lfanew));
  InjectSize := ImageSize(FileMemory);
  GetMem(InjectMemory, InjectSize);
  try
    FileData := InjectMemory;
    HeaderSize := ImageNtHeaders.OptionalHeader.SizeOfHeaders;
    PSections := pointer(pchar(@(ImageNtHeaders.OptionalHeader)) + ImageNtHeaders.FileHeader.SizeOfOptionalHeader);
    for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do
    begin
      if PSections[SectionLoop].PointerToRawData < HeaderSize then HeaderSize := PSections[SectionLoop].PointerToRawData;
    end;
    CopyMemory(FileData, FileMemory, HeaderSize);
    FileData := pointer(dword(FileData) + GetAlignedSize(ImageNtHeaders.OptionalHeader.SizeOfHeaders, ImageNtHeaders.OptionalHeader.SectionAlignment));
    for SectionLoop := 0 to ImageNtHeaders.FileHeader.NumberOfSections - 1 do
    begin
      if PSections[SectionLoop].SizeOfRawData > 0 then
      begin
        SectionSize := PSections[SectionLoop].SizeOfRawData;
        if SectionSize > PSections[SectionLoop].Misc.VirtualSize then SectionSize := PSections[SectionLoop].Misc.VirtualSize;
        CopyMemory(FileData, pointer(dword(FileMemory) + PSections[SectionLoop].PointerToRawData), SectionSize);
        FileData := pointer(dword(FileData) + GetAlignedSize(PSections[SectionLoop].Misc.VirtualSize, ImageNtHeaders.OptionalHeader.SectionAlignment));
      end
      else
      begin
        if PSections[SectionLoop].Misc.VirtualSize <> 0 then FileData := pointer(dword(FileData) + GetAlignedSize(PSections[SectionLoop].Misc.VirtualSize, ImageNtHeaders.OptionalHeader.SectionAlignment));
      end;
    end;
    ZeroMemory(@StartInfo, SizeOf(StartupInfo));
    ZeroMemory(@Context, SizeOf(TContext));
    CreateProcess(nil, pchar(ParamStr(0)), nil, nil, False, CREATE_SUSPENDED, nil, nil, StartInfo, ProcInfo);
    Context.ContextFlags := CONTEXT_FULL;
    GetThreadContext(ProcInfo.hThread, Context);
    ReadProcessMemory(ProcInfo.hProcess, pointer(Context.Ebx + 8), @BaseAddress, 4, Bytes);
    VirtualAllocEx(ProcInfo.hProcess, pointer(ImageNtHeaders.OptionalHeader.ImageBase), InjectSize, MEM_RESERVE or MEM_COMMIT, PAGE_EXECUTE_READWRITE);
    WriteProcessMemory(ProcInfo.hProcess, pointer(ImageNtHeaders.OptionalHeader.ImageBase), InjectMemory, InjectSize, Bytes);
    WriteProcessMemory(ProcInfo.hProcess, pointer(Context.Ebx + 8), @ImageNtHeaders.OptionalHeader.ImageBase, 4, Bytes);
    Context.Eax := ImageNtHeaders.OptionalHeader.ImageBase + ImageNtHeaders.OptionalHeader.AddressOfEntryPoint;
    SetThreadContext(ProcInfo.hThread, Context);
    ResumeThread(ProcInfo.hThread);
  finally
    FreeMemory(InjectMemory);
  end;
end;
d4baa0.gif
#46

شكرا واضح انه ناقص حاجة علشان كدة مكتوب فى المنتدى وليس فى ملف دلفى ومرفق على كل حال شكرا شكرا شكرا شكرا على المجهود الكبير اوى ده :)

{ربى زدنى علما}

#47

ليس لي الكود بالعمل

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

و هو من نفس الرابط السابق

ينقصه الجزء الذي يجعله DLL

جرب الملفات الأخري و سيكون كامل

d4baa0.gif
#48

بصراحة انا معجب بيك كمبرمج لان الdll بتاعك كتير صغير يا استاز بس انا عندى استفسار ولو هو محرج لى شوية

فى المثال exe2 انا شايف فيل اسمه pro.inc ما هذا ؟؟؟؟؟؟؟؟؟؟

{ربى زدنى علما}

#49

Pro.inc هو البرنامج المراد دمجه داخل الملف التنفيذي

Inc= Include و قد و ضعته في Array

كنت أعمل كثيرا بهذه الطريقة

ِConst Delta:String='Delta';

لكن بورلند حذفت هذا...لذا أستعمل Delphi5

ملف DLL صغير لأنه مضغوط

أخي JuStNiCK صحح توقيعك: ربى زدني علما

تم تعديل هذه المشاركة بواسطة DeltaAziz في 8 سبتمبر 2005 في 11:10

d4baa0.gif
#50

وهو مضغوط بايه معلش اصله صغير اوى اسمح لى ان اسال على فكرة انا بقالى كام يوم بحاول ان اعمل Function تقرأ ملف وترجعه ك array of byte ولكن واضح انى لا اذال تحت المستوى

شكرا لتنبيهك والله اللغة العربية لا اجيد الكتابة بها على الرغم انى مصرى و عايش فى مصر بس بدايتى فى التعليم لم تكن موفقة وهذا تحت بند (يرزق الله العلم لمن يشاء)

{ربى زدنى علما}

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

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