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

ما هو الفرق بين ال dll المكتوبة بال c++ و المكتوبة

مغلقرائج
بدأه طارق إبراهيم في 23 أكتوبر 2003 · 66 رد · 11,642 مشاهدة · في لغة C و ++C
مشاركة: واتساب X فيسبوك تيليجرام
#26

بالنسبة لموضوع ال com بعض الاجزاء انقلها إليكم من بعض المقالات التى حفظتها و هى للاستاذ هانى الاتاسى لا اعلم إذا كانت المقالات ما تزال فى المنتدى

اقتباس
قبل أن تطرق لمعنى COM يجب أن تعرف ما هو ال Component . ما معنى كلمة Component : هي عبارة عن قطعة برمجية تقوم بعمل ما، وأي برنامج يستطبع استخداك هذا الكومبوننت. ومن ميزت ال component أنها متضمنة لجميع أعمالها داخليا وبالتالي من السهر تغييرها.. الفكرة طبعا رائعة ، لأنها تسمح لك بكتابة component مرة واحدة واستخدامها أكثر من مرة في برامج مختلفة. ومن ثم يمكنك تحسين هذه ال component فقط عن طريق تطوير الكود ووضعها محل السابقة. ولكن من أجل أن يعمل هذا بشكل صحيح يجب أن تكون هناك مقاييس معينة من أجل أن تعرف البرامج كيف يمكن أن تنشئ ال component وكيف يمكن استدعائها وغير ذلك من الأمور .

بالنسبة إلى COM كما تعلم هي Component Object Model .. وهي عبارة مقياس وضعته ميكروسوفت من أجل بناء ال components .. إذا COM هي عبارة فقط عن مواصفات من أجل بناء قطعة من الكود متوافقة. هذا يعني أن COM هي ليست لغة برمجة أو مكتبة library أو حتى مترجم  .. لكن هي تمنحك موصفات ثابتة من أجل بناء components تستطيع أن تتحدث مع بعضها بغض النظر عن اللغة التي تم تطويرها بها ..

بالمختصر .. COM عبارة عن قوانين وإذا اتبعت هذه القوانين في بنائك لاحدى ال components فسوف تستطيع هذه أن تعمل مع باقي ال COM Components بغض النظر عن اللغة المبرمجة بها ..

قد تتخربط بين مفهوم COM و Static Library : الوضع هنا مختلف لأن ال static library تحتاج إلى اعادة ترجمة مشروعك عند تغيير المكتبة ..

ماذا عن COM و Dynamic Library : هنا المفهوم متقارب حتى أن COM في النهاية تنتج لك ملفات DLL أو EXE لكن الفرق بينهما أن COM تقوم بتعريف مواصفات ثابتة من أجل تطوير ال component .. طبعا إذا أردت أن تعمل قطعة من برنامجك adabtable بحيث فقط تعمل معك فالأسل صنعها عن طريق Synamic Library ..

مفهوم ال Proxy .. هو ماتتميز به COM أيضا .. كما تعلم من أجل استدعاء تابع في مكتبة ديناميكية فأنت تستدعي LoadLibrary وهذا الAPI يقوم بتحميل المكتبة في نفس ال Process وبعدها تستطيع استخدامها .. لكن ال COM ممكن أن تعمل بغض النظر عن توضعها فقد تكون في نفس ال Process أو في Process آخر أو حتى في جهاز آخر .. وال COM Engine مسؤولة عن عملية نقل الاستدعاء من موقع إلى آخر بشمل شفاف .. أي أن المستدعي لن يعرف أين تتوضع الcomponent التي يستدعيها .. هذه العملية تتم أن ال COM Engine تقوم بانشاء كود اسمه Stub و كود اسمه Proxy يتخاطبان مع بعضهما ..

ال COM في عالم هندسة البرمجيات تجمع بين المصطلحين :

Polymorphism: وهي امكانية الوصول إلى الكائن الحقيقي عن طريق معرفة مؤشر لكائن أب . وهي تماما كما في ال virtual في السي++

Proxy: وهي امكانية الوصول إلى الكائن بغض النظر عن توضعه الفيزيائي فقد يكون في process آخر أو في جهاز آخر او حتى في شبك أخرى ..

ببساطة ال COM صنعت من أجل المفهومين السابقين طبعا مع مفاهيم أخرى مثل ال Reuse و ال Encapsulation ولكن هذه كلها مفاهيم تنطبق على كلاسات . بعض المفاهيم الأخرى التي يجب أن تتواجد في COM هي ال Reference Counting وال Class Factory .. وسوف نتطرق لها لاحقا ..

ببساطة تصور أنك صنعت class ووضعته في مكتبه خارجية .. هذا الكلاس يحتوي على توابع ثابتة .. ولديك طبعا برنامج يقوم باستدعاء هذه التوابع بعد أن يطلب بناء كائن لها (عملية البناء تتم عن طريق ال class factory الذي يجب بنائه مع ال class السابق) أي أنك لن تستدعي new من أجل بناء كائن لك ..

الآن ماذا لو أحببت تغيير الكود للclass الموجود في مكتبة خارجية فما عليك سوا اعادة ترجمة المكتبة ونسخها فوق القديمة ليستمر البرنامج بالعمل على الكود الجديد من غير أن يجس أي فرق .. أما لو كانة هذه ال class موجودة داخل برنامجك فالأمر يقتضي عملية ترجمة كاملة للبرنامج .. وهذا أمر لا نريده في معظم الأحيان 

توجد عدة طرق من أجل بناء COM في السي++ ويفضل أن نبدأ ببنائها من الصفر باستخدام كود سي++ ومن بعدها نقوم باستخدام ال ATL

تم تعديل هذه المشاركة بواسطة win98_eg في 5 نوفمبر 2003 في 02:22

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#27

السلام عليكم,

سأرجع إلى قضية برنامج HOOK ولاحضت أن ليس هناك اقتراحات كثيرة.

وقد قمت بهدا البرنامج مؤخرا بالأسمبلر وهو في منتدى الأسمبلر .انضر الرابط:

http://www.arabteam2000.com/ib/index.php?s...opic=33253&st=0

فلكل من يهمه هدا الأمر يمكنه أن يستأنس بهدا للبرمجة عل س++ فهو نفس المفهوم والمبدء والطريقة.

في انتضالا المزيد من الإقتراحات أقول لكم إلى اللقاء.

#28

السلام عليكم,

أين أنتم يا شباب.

هل نعتبر هدا الموضوع مغلوق أم مادا.

ما هي اقتراحاتكم.

إلى اللقاء.

#29

السلام عليكم ,,,,

لا ياأخ chik لم يغلق الموضوع ,,,,

وأعتقد أنه شيء جيد للدخول في بعض الاعمال الحقيقية ,,, والخروج من عالم console الجاف ...

وأعتقد اننا توقفنا على فكرة برنامج ال HOOK ... ومن لديه فكرة أخرى لنطور بها dll فاليخبرنا ....

لأننا نريد أن نرتقي بصناعة الرمجيات العربية ,, فعلينا اقتحام مجال البرمجة ومن أوسع أبوابه ... ومن لديه مشروع جدي اخر في الفيجوال سي ,, بشرط أن يكون مجديا ...

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

وفي انتظار الردود ,,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#30

و ماذا عن مبرمجى الفيجوال بيسك هل نسيتمونا ام ليس لنا نصيب معكم

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#31

السلام عليكم,

أنا لا أضن أن هدا يستثني أحد أو أي نوع من البرمجة فالعكس يمكن أن نعتبر أن قضية DLL يمكن ان تمثل واجهة بين جميع أنواع اللغات.وأن برمجة الوندوز إدا تمت بواسطة API فهي تقريبا متشابهة في جميع اللغات.

وكما قال الأخ HGB والدي أشكره عن المجهودات التي يقوم بها في هدا المنتدى ونعرف أن كتابة درس يتطلب الكثير من الوقت, فبرمجة Console هي الآن بدت متجاوزة وهي نستعملها في تعلم المبادء ولكن يجب في يوم من الأيام أن نقتحم عالم GUI .

وكما اقترحت في منتدى الأسمبلي يمكن أن نعمل مثيله هنا وهو أن نعطي كل مرة تعريفا ل API نعطي مادا تعمله ومادا تتطلب وكيف تتم برمجتها مع مثال بسيط لها.

سأبدأ إن شاء الله في هدا الأسبوع المقبل ومعرفة برمجة API قد تفيد في جميع اللغات البرمجية.

وإلى اللقاء.

#32

السلام عليكم ,,,

بداية ألف مبروك للأخ win98_eq الذي اكتشفنا اسمه أخيرا " بعبقريتنا " وأصبح بقدرة قادر طارق ابراهيم ,.. وأتمنى له التوفيق في رحلته الاشرافية .,,,

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

........................................

أشكرك يا chik كثيرا على الفكرة الممتازة لاستعراض توابع ال win32 api ,,, وهي كثيره لدرجة تثير الغثيان ,,, ومازلت أجاهد كثيرا عندما أحاول ايجاد دالة جديدة تقوم بغرض ما ,,,

مع أني أملك MSDN لنسخة الدوت نت ,,, وأبحث فيه الساعات الطوال ,, ومن تخمة المعلومات أحيانا لاأخرج بنتيجة ,,,

ولدي هنا ملف حجمه 5ز1 ميجابايت "لملف excel " به سرد ل 13 ألف دالة api مع بيان اسم المكتبة وملف ال .h ونظام التشغيل المتوافق معها ,,

عموما ابدأ وانا معك ,,, ويكفي استعراض الدوال المهمة كثيرة الاستخدام ,,,

.....................................

وأقول للأخ win98_eq ,, أقصد طارق ابراهيم ,,, لماذا تتوقف عند حدود الفيجوال بيزك ؟

يمكنك ان تتعلم الفيجول سي بيرعة كبيرة بفضل هذا المنتدى ,,, وسنكون معك باذن الله ,, ثم ان برمجة الوندوز تعتمد بشكل أكبر على برمجة win32 api وهي نفسها لكل لغات البرمجة في منصة الوندوز ,,,

....................................

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

أقصد برنامج ال HOOK ,,, أرجو من الجميع توضيح ارائهم فلو أردتم أن نبدأ ممكن أن ننتهي في فترة وجيزة جدا ,,,

عندها لدي لكم فكرة برنامج ممتازة ,, وسأطرحها بعد أن أعرف ارائكم ,, ولو أردنا غيرها طورنا أخرى ,,,

الفكرة ياشباب هي أن نتحرك ,, ونحاول أن نتعلم بشتى الطرق ,, وطريقة التعلم الجماعية هي الأفضل على الاطلاق ,, ولا أخفيكم سرا أنني أصبحت أتعلم أسرع بمرتين أو ثلاث أكثر من السابق بفضل الله ثم بفضل هذا المنتدى الرائع ,,,

في انتظار أصواتكم ,,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#33

السلام عليكم,

بما أن هدا الموضوع بدأ في النسيان ولم تظهر أي اقتراحت أخرى ما عدى الأخ HGB سأقترح هنا برنامجا يقوم على أساس Hook لكل نقر أيمن من الماوس.كل ما يعمل الهوك هو أن يرجع لنا هاندل النافدة الدي نقرنا عليها بالأيمن ودلك بإرسال رسالة خاصة إلى نافدتنا الأصلية وفي هده الأخيرة وحين نتوصل بالرسالة المعلومة يمكن أن نعمل عدة أشياء.هدا البرنامج يقوم ب 5 وضائف ولكن يمكن أن نزيد هدا العدد بسهولة.

لتشغيل البرنامج نضع الملف EXE و DLL معا وحين نشغل البرنامج ننقر Activate لنشغل الهوك وبعد هدا ننقر باليمين على نافدة مفتوحة أو نافدة وسط نافدة وفي برنامجنا سنحصل على هاندل هده النافدة وكتابتها إدا كانت.ومن هنا يمكن أن نتحكم في هده النافدة إد يمكن أن نرجعها إما enabe أو Disable كما يمكن أن نخفيها أو نبرزها ويمكن أيضا أن ننهي برنامج هده النافدة.فيمكن كثال أن تخفوا المكتب أو ترجعوه Disable .

وهدا البرنامج يمكن أن تكون له استعمالات عديدة لن أدكرها هنا من أجل احترام منتدانا ولكن يمكن أن أقول كم مرة نتصادف بعض الأزرار غير شغالة DISABLED لأاسباب ما وكم كنا نود أنها تكون شغالة.

في المرفق تجدون الملفان EXE و DLL وكما تجدون المشروعين كاملين.

يمكنكم تغيير ما تشاؤون ومن قام بزيادة شيء ما اللرجاء إعطاؤه هنا ربما هدا يزيدنا أفكارا أخرى وكدلك كل من وجد أي خطء ما الرجاء اإدلاء به.

وإدا كان أي سؤال أو اقتراح سأكون إن شاء الله رهن الإشارة.

متمنياتي للجميع بالتوفيق وإلى اللقاء.

Hook.ZIP

#34

السلام عليكم ,,,

جزاك الله ألف خير يا chik ,,,

ماشاء الله عليك " قليل الكلام كثير العمل " ,,,,

البرنامج أكثر من ممتاز ,,, ويعمل بشكل جيد ,,,

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

لمذا كل برامج ال HOOK نجد معها ملفات dll منفصلة ؟؟

حاولت في الايام الخوالي أن أجعله يعمل دون ملف dll منفصل ... فلم أفلح !!

وقرأت في احدى الكتب كلاما غريبا لم أستطع أن أستنبط منه سوى أن ال HOOK يجب أن يكون في تشعب مختلف " thread مختلف عن الأم " ...

ونعلم أن ال dll ينشيء thread اخر لنفسه ,,,

لكن يمكننا انشاء ال thread دون الحاجة لملف ال dll ...!!

لكن لم أجرب هذه الفكرة بعد ,,, ولا أريد أن أضيع وقتي قبل أن أعرف رأيك ,,

وجزاك الله ألف خير وعافية ,,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#35

Hi toall;

Sorry to write in english cause I am in a place and there is no arabic on this computer cause I am on Aid Holliday till next week.

Thanks HGB for your replay.

First I want to say that we can make a hook without DLL but this will hook only the running process and we must have a dll if we want to hook all the other processes. We must know that when we make a hook for all the processes the dll is copied in the space of every running process of corse this copy is virtual and because of this copy weput it in a dll to facilitate tis procedure.

We can return to that with more specification after tha Aid.

Aid Said wakoullou am wa antoum bikhayr.

#36

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

اعتقد ان الموضوع مهم بدرجه كبيره حتى اننى اجد نفسى مضطراً لدراسه ال system wide hook بالرغم من قلة المصادر التعليمية لها فى ال vb مره لاشارك فى هذا النقاش و الاخرىلانه طلب منى برنامج يعتمد على ال hook

بالصدفه وجدت مثالين عن ال hook فى vb

vb_hook.rar

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#37

السلام عليكم ,,,

بداية أهلا بالأخ طارق ابراهيم الغائب ,,, وكل عام وأنتم بخير ,,,

وأشكرك جدا أخي chik على معلومتك الثمينة التي حيرتني لمدة ,,, وقد فهمت منها أن دوال الHOOK فقط ومنها SetWindowsHookEx هي التي تنسخ نفسها في جميع المعالجات التي تعمل في الوندوز ..... وليس أي دالة في ملف DLL ,,,

لذا تستطيع أن تستلم الرسائل الخاصة بتلك المعالجات ,,,, وتقوم بارسالها الى تطبيقنا المضيف .... بارك الله فيك مرةأخرى ,,,

سأضيف قريبا دالة جديدة لتعالج عملية ال KeyStroking وهي عملية مشهورة في كتب البرمجة ككل وتستخدم دائما كمثال ل DLL ... وياشباب فقط الغرض منها التعلم لاغرض اخر ,, وكل بحسب نيته وما علينا الا البلاغ ,,,

عمل الدالة أنك حين تكتب شيئا بواسطة الكيبورد في أي نافذه في الوندوز سيتم ارسال رسالة الى برنامجنا بأن هذا الحرف قد تمت طباعته في التطبيق الفلاني الذي يحمل HWND فلانية ,,, يمكنك بعد ذلك أن تعالج الاحداث كما تشاء ...

عموما لن أنقح البرنامج فقط سأكتفي بعرض رسالة تعرض الحرف الذي كتب ...

وبعدها سنعرف صيغة COM بشكل أفضل .. ونعمم هذا البرنامج عليها ,,,

وأرجو من أي عضو لديه فكرة أو معلومات عن COM أن يدلي بدلوه ويزيدنا من علمه ,,

والى لقاء قريب ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#38

السلام عليكم,

أشكر الجميع على التفاعل مع هذا الموضوع وبالخصوص الأخ HGB لإهتمامه بالبرنامج ومحاولة تطويره.

وأريد أن أضيف أن هذا النوع من Hook يجري على صعيد الوندوز وأنه يمكن أن ننجز Hook على صعيد السيستم وتكون مثل برامج TSR الدوس القديمة وهذه تكون أقوى وكثيرا ما يستعملها الفايروسات.

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

عيد سعيد للجميع وإلى اللقاء.

#39

السلام عليكم ,,,

أهلين بالأخ العزيز chik ,,,لو استطعت فقط أن تعطينا رؤوس أقلام عن ال TSR ,,, وهل هي مثل برامج ال Debugging التي تعمل على مستوى KERNEL التي تقوم بتثبيت نظام التشغيل ,, مثل برنامج SoftIce وغيره ,, أم هي مفهوم اخر لذلك ,,,

بارك الله فيك ,,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#40

السلام عليكم,

في أيام الدوس كنا نستعمل TSR وهي تعني Terminate and Stay Resident أي نحمل برنامجنا إلى الداكرة ولكن يبقى شغالا على طول وغالبا هدا النوع من البرنامج يعمل Hook لبعض Interruptions التي يريد أن يستقبلها وسيقوم هدا البرنامج بمعالجة Interruption عوض نضام التشغيل وكانت هده غالبا ما تستعمل في برمجة الفيروسات إد يقوم الفيروس ب Hook ل INterruption 21h وإدا تعلق الأمر بفتح أو بأمر يتعلق الملفات فإن برنامج TSR يأخد زمام الأمور ويعمل ما يريد عمله قبل أن يعطي اليد إلى نضام التشغيل.وهده الأمور كانت سهلة إلى حد ما لأن النضام كان نضام حقيقي Real mode وكانت البرامج تختلط بنضام التشغيل.

وفي نضام الوندوز فيمكن أن نستعمل نفس الطريقة إلا أن هنا النضام يستعمل Protected mode لدى يجب علينا أولا أن نقتحم هده المنطقة قبل أن نضع برنامجنا.ولأجل دلك يمكن أن نكتب برنامجنا على شكل ملف VXD وللمعرفة فإن هدا النوع من الملفات يستعمل كواسطة بين النضام وأدوات الكمبيوتر HardWare ولكن يمكن أن نستعمله كوسيلة لبرامج TSR فكمثال السابق يمكن أن نستعمل File Service مثل INstallFileSystemApiHook لنضع Hook يتعلق بكل مي يخص الملفات فتح-إغلاق-حدف-...

هدا بخلاصة مع العلم أن هناك برامج تمكن هدا النوع من البرمجة في س++ مثل DriverTools لشركة Numega و VxdWriter وغيرها.

وإلى اللقاء.

#41

السلام عليكم ,,,

مشكور جدا أخي العزيز chik على المعلومات القيمة جدا,,

وفعلا أنا قرأت في الاونة الاخيرة عن اكتشاف فيروسات تعمل عن طريق VXD بحيث تصبح Device Driver ,, واكتشافها صعب للغاية ,,,

ويعتقد الخبراء بوجود هذه الفيروسات وعملها بيننا ونحن لانعلم بذلك الان ,,,

وفعلا أفضل طريقة لتجميد قدرات نظام التشغيل هي بوضع طبقة بينه وبين الاجهزه العاملة عليه ,,,

وكما ذكرت اعتقد أن ال Device Drivers يتم اختبارها بواسطة برامج الاختبار التي تعمل على Kernel Mode ,,, مثل Soft Ice وهو أحد برامج شركة NuMega

,,,

بارك الله فيك أخي العزيز chik ,, واذا كان لديك المزيد من المعلومات من هنا أو هناك فأتحفنا بها ,,,

وفقك الله ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#42

اسلام عليكم,

أريد أن أقول أن الفيروسات التي تعتمد على VXD ليست جديدة العهد فيمكن أن نعتبرها الآن قديمة فالكل يعرف مثلا فيروس CIH أو ما يعرف بتشرنوبيل فهو يعمل على هدا النوع وإن هو ليس VXD هكدا ولكن يعمل مثل هدا الأخير.والمهم في كل هدا أن نقتحم الحلقة 0 أو Ring 0 وهي الحلقة التي يعمل فيها نضام التشغيل وعلما أن vxd هو كدلك يشتغل في هده الحلقة.وهناك طرق وتقنيات أخرى للوصول إلى هده المنطقة مثل استعمال ما يسمى ب IDT أو Interrupt Data Table أو Exception HANDLER أو غيرها.والغلية من الوصول إلى هده المنطقة هي التخلص من القيود التي يمليها النضام المحروس ففي هدا المكان يمكن أن نعمل أي شيء نريده إد يمكن مثلا أن نبرمج الأدوات مباشرة وأن نستعمل أي Interruption نريدها وأن نقرأ ونكتب أي مكان في الداكرة.فكمثال يمكن أن أقرأ أي Sector مباشرة على الفلوبي أو القرص الصلب في الوندوز 9x كما يمكن أن أغلق ملفا ما أو أن أجعل له كلمة سر وإلى غير دلك.

وفعلا هدا النوع من البرامج يصعب التعرف عليها على الدين لا يعرفون هدا النوع وهي لا تضهر في قائمة البرامج الشغالة. وSoftIce تمكننا من ديبوك لهده البرامج كما أن فيها يمكن أن نتعرف على VXD التي هي شغالة.

وقد يبدو لأول وهلة أن هده البرمجة صعبة جدا رغم أنها لا تختلف كثيرا عن مثيلاتها ونعلم أن الكثير من البرامج توفر لنا عددا من الماكرو تسهل هدا.

وإدا كان من يهمه هدا يمكن أن نبدأ ببرامج وأمثلة حتى نتعرف عنها وكما قلت يمكن أن نبرمجها ب س أو س++ وهناك برامج تسهل هدا وتعطينا الهيكل الأساسي لهدا وأنا أفضل برمجتها بالأسمبلر ويمكن أن نفتح بابا للنقاش في هدا الموضوع إدا كان من يهمه هدا.

إلى اللقاء.

#43

السلام عليكم ,,,

مشورين أخي العزيز chik مرة أخرى على المعلومات القيمة جدا التي لاتوجد بالمجان هذه الايام وبلغة عربية !!!

ولو أعطيتنا بعض الامثلة سنكون لك من الشاكرين جدا وخصوصا ال VXD لأني كنت أسمع بها فقط حتى الان ,,,

وياريت لو جعلناها بالسي لأن الاسمبلر قد يطفش الكثيرين ويرعبهم من التعامل معه ,,,

" لاتخف انا لست منهم" :) لكني أفضل السي++ ,,,

وهناك أمر اخر أيضا أخي العزيز chik هل فعلا الاسمبلر الذي يأتي مع مصرف الفيجوال سي++ لايدعم تعليمات المقاطعات Inturup ,,, ذات ال int 21 وأخواتها ,,

خذ راحتك أخي العزيز chik ولاتثقل على نفسك ونحن في الانتظار ,,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#44

Hi

Sorry another time to write in english cause I can't find on this time a computer with arabic.

If you want I can try to give some examples for programming the VXD in C++ even if I like that in Assembler and I did in my life only a little sample with C PlusPlus.

First I want to say that all the code will be for win98 caus it's the only system I have and this programmation differs a little bit between the systems.

You have to get some tools like:

DDK98 we can download it from microsoft or we can search for it on the net and it's like 23Mega in it's globality or we can download it in parts.

Driver Studio from Numega and it's like 34 Mega in this totality and it includes Softice.

or we can use VXD Writer and the demo version is not big 2 or 3Mega

Of course I suppose you have Visual C++6 cause these programs work with it.

And it's better have Softice for debugging our VXD.

That's what we need for that.

You second question I want to say that it's not the Visual C++ that have not the interrupts but It's the protected mode that don't accept the dos interrupts and this is essentially due to the memory which differs in dos and in protected mode cause in dos we use memory segmentation and in protected mode or in windows we'll use the flat memory and the dos interruptions like int 21 and it's functions use the segmentation.and for example we can use int 21 if we are in a VXD and the other interruptions of course.

Adding to this that Visual C++ can't make programs for 16 bits

And of course we can use in C++ assembler the interruptions tolerated in 32 mode for example we can use int 3 68 and so on.

CIAO

#45

السلام عليكم ,,,

ما شاء الله عليكي أخي العزيز chik تكتب في السلم وفي الحرب في حال الرخاء والشدة,,, :)

,,,,,,,,,,,,,,,,,,,,,,

سأقومك بتنزيل ال DDk32 أو الاخر الخاص ب Neumega ,,,

ونحن في الانتظار ,,,

,,,,,,,,,,,,,,,,,,,,,

وأخيرا أعتقد أن كل مشاكل الدنيا سببها هي الدخول لل KERNEL MODE ذو الحلقة صفر ,, لذا أمر جيد أن نعلم كيف يمكن فعل ذلك في عالم الوندوز ,,,

,,,,,,,,,,,,,,,,,,,

ومشكور جدا مرة أخرى على ردودك السريعة,,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#46

السلام عليكم ,,,

أردت قبل أن نتابع الحديث عن Device Drivers ,, أن أوضح خلاصة الموضوع الذي بدأ هذه النقاشات وهو " مالفرق بين dll المكتوبة بالفيجوال بيسك والاخرى المكتوبة بلافيجوال سي++"

أخيرا أقول عندما نريد أن نكتب dll بالسي++ ليعمل على الفيجوال بيسك :

أولا يجب أن نتقيد بالانواع الاساسية int , long , double وغيرها ,,

أو أن يكون النوع الجديد المعرف معرف في مكان يمكن الوصول اليه ,, بحيث نمرر بنية مشابهه لها في التكوين من الفيجوال بيسك وستعمل بشكل جيد ,,

أخيرا وهوالأمر الأساسي يجب كتابة stdcall _ قبل كل دالة نريد تصديرها لتستدعى من الفيجوال بيسك ,,

مثلا دالة اسمها MULT ,,يجب أن تصبح على الشكل التالي ,,

( int _stdcall MULT(int x , int y

لاحظ الدالة عادية جدا لكن توجد الكلمة الاساسية stdcall _ قبل اسم الدالة ,,

كما قلت stdcall _ كلمة اساسية سيتحول لونها للأزرق ,,,

تسمى هذه الكلمة الاساسية وغيرها "نوع الاستدعاء " حيث توجد أنواع أخرى وهي:

cdecl_

fastcall_

declspec_

this

,,,,,,,,,,,,,,,,,,,,

هذه الانواع تبين طريقة استدعاء الدوال وكيفية تمرير البارمترات فوق المكدس وكيفية ارجاع القيم من الدالة ,,,

لن أدخل في التفاصيل بشكل كبير فقط سأذكر الفرق بين cdecl_ و stdcall_ وهي مايهمنا هنا الان ,,

الان كل دوال الفيجوال بيسك تستدعي الدوال بطريق stdcall_ بشكل افتراضي ,,

وكل دوال السي++ تستدعي الدوال باستدخدام طريقة cdecl_ بشكل افتراضي ,,

الان مالفرق بين الطريقتين ؟؟

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

فقط يجب أن نعرف أن الدوال التي تستدعى بطريقة stdcall_ وتسمى "الاستدعاء العادي " بتنظيف المكدس بعد الانتهاء من الاستدعاء بنفسها ,," في المكدس توجد البارمترات المررة للدالة",, أي أن الدالة هي التي تنظف المكدس بنفسها قبل أن تنتهي ويعود تنفيذ البرنامج لاخر سطر بعد استدعاء الدالة ,,

أما بالنسبة لطريقة cdecl_ فالعكس يقوم المستدعي أو الشيء الذي استدعى لنا الدالة المعرفة بأنها cdecl_ " الشيء قد يكون دالة أو scope معين " بتنظيف المكدس وليس الدالة نفسها ,, " المستدعي وليس المستدعى",,

في هذه الحالة يمكن كتابة دوال تتوقع عدد غير محدد مسبقا من البارمترات كما في الدالة printf ,,, يمكن أن نمرر ل printf عدد غير محدد من البارمترات كما نشاء ,, لأنها مكتوبة في الاصل لتستدعى بواسطة cdecl_ لذا الدالة التي تمرر البارمترات للدالة printf مثلا هي التي تحجز للمكدس وتنظف المكدس ,,,

أما الدوال التي stdcall_ فلا يمكن أن تتوقع بارمترات متغيرة ,يجب أن تكون بارمتراتها ثابتة,,,

الان من هنا وبما أننا نعلم أن الفيجوال بيسك تستدعي الدوال فقط باستخدام stdcall_ ,, فقط عندها يمكن للفيجوال بيسك أن تستدعي الدوال ذات البارمترات الثابتة فقط,,,

لذا لايمكنها استدعاء printf مطلقا ,,, " ربما توجد طرق ملتوية لذلك ",,

أخيرا أقول أن جميع دوال ال win32api مكتوبة بطريقة الاستدعاء stdcall_ لذا يمكن للفيجوال بيسك أن تستدعيها " مع أن دوال الwin32 api مكتوبة في الاصل بلغة السي ",,

بالطبع ماعدا الدوال التي تستخدم بارمترات عددها غير معروف فهي خاصة بلغة السي فقط ,,,وكتوبة بطريقة cdecl_ مثل printf ,,

أخيرا أذكر أن مصرف ال BORLAND Delpi يستخدم الاستدعاء fastcall_ وهو مختلف نوعا ما عن طريقتي cdecl_ و stdcall_

قد نزيد في المعلومات لو أراد الجميع ذلك ,,

وبالتوفيق ,,

banner_60_468.gif

NOTHING IS IMPOSSIBLE

#47

السلام عليكم,

إدا كان عندك DriverStudio يمكن أن أعطيك أمثلة لهدا النوع من البرمجة وأقترح أن نفتح لها موضوعا خاصا بها حتى لا تتخلط الأمور.

وسأبدا في المرة القادمة بهدا وبإعطاء نوع من الدروس على هدا رغم أنني لا أجيد إعطاء الدروس وأفضل طريقة السؤال والجواب والبرمجة.ومن جهتك يمكن أن تبحث في النت عن دروس لتسهل لنا المأمورية ويمكن أن نناقش أي نقطة فيها ومع الأمثلة ستتضح الأمور إن شاء الله وهده كانت دائما طريقتي لا أهتم بكل النضري في الأول بل أحاول تطبيق الشيء القليل الدي أتعلمه وأرجع إلى النضري في كل مرة أحتاجه.

كما قلت سابقا برمجة VXD تحطنا في الحلقة 0 وكما أن هناك طرق أخرى تمكن من هدا وهده الأخيرة لا أرى كيف يمكن برمجتها ب س أو س++ إد هي تتطلب بعض الأوامر بالأسمبلر لا أعرف مثيلاتها في اللغات الأخرى.

على أي حال سنكتفي هنا ببرمجة VXD وسنرى الأمور الأخرى من بعد.

وكما قلت سابقا أفترض أنه عندك فيجوال س++ 6 والوندوز 98 DriverStudio. و Softice إد هي تكون ضمن هدا الأخير.

إلى اللقاء.

#48

اولاً:اعتذر عن غيابى بسبب المذاكره و امتحانات العملى

ثانياً:اعتذر عن عدم استطاعتى المشاركه فى الموضوع فقد افحمتمونى بعلمكم و الذى اتمنى ان يكن لى منه ولو 10%

ثالثاً:لدى سؤال هل يمكن عمل dll injection فى process مختلفه

فى ويندوز 2000 لا اعتقد لانه يعطى كل process معرف process id و لكن ماذا عن بقيه الويندوز

رابعاً:سؤال اخر ما هى ال VXD PROGRAMMING كنت انوى طرح هذا السؤال منذ فتره و لكنى نسيت و هانتم تثبتون قدراتكم البرمجيه و العلميه

خامساً: ملحوظه- ويندوز 2000 لا يعتمد على ال VXD PROGRAMMING هذا ما سمعته لذل فلانظمه العامله بتكنولوجيا WINDOWS NT لا تصاب بفيروس تشيرنوبل

اخيراً بعد كل هذا و الثرثره و الصداع اود ان اشكر العقاد لمشاركته و كل الشكر ل CHIK و HGB على هذه المعلومات القيمه

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

#49

السلام عليكم,

اسمح لي فأنا لم أعمل كثيرا على أنضمة 2000 أو شبيهاتها لأن الكمبيوتر اللي عندي من عهد قديم ولا يتحمل الأنضمة الجديدة لدا لم أجرب الأشياء التي تكلمت عنها في هده الأنضمة.

فيما يخص DllInjection أضن أنه يمكن عملها إدا مانت عندك الصلاحية لدلك ففي الوندوز 98 أيضا كل Process له Process ID الخاص به. كنت أود أن أجرب هده الأشياء من قبل لكن ليس لدي الإمكانيات لتجربتها.

وبالنسبة لبرامج VXD فهي فعلا لا تعمل في أنضمة NT وشبيهاتها ولكن لها مثيلاتها في تلك الأنضمة وهي تبرمج بنفس الطريقة تقريبا.إلا أنه حين تبرمج يجب أن تبرمج برنامجا خاص ب 98 وآخر خاص بالأنضمة الأخرى.

أتمنى من يعمل على هده الأنضمة إفادتنا بتجاربه.

إلى اللقاء.

#50

اخى chik المشروع ال>ى يعرض ال windows caption و ال class التابعه لها و ال hwnd

برمجته بالفيجوال بيسك

Www.rar

Technical Lead Developer

My LinkedIn Profile

اللهم قنى شر الجهل و الجهلاء

( اقْتَرَبَ لِلنَّاسِ حِسَابُهُمْ وَهُمْ فِي غَفْلَةٍ مَّعْرِضُونَ ) {الأنبياء:1}

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

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…