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

كيفية بناء DLL

مغلق
بدأه الاخير زمانه في 1 سبتمبر 2006 · 8 رد · 1,295 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

ممكن حد يوضح كيفية بناء dll بأستخدام ال RadAsm

طبعا انا قرأت درس Iczelion بهذا الخصوص ،

تقريبا فهمت النظري بس لدي اشكال بخطوات التطبيق العملي ، حاولت عمل مثال بالأعتماد على الكود الموجود في الدرس المذكور لكن ظهر لي erroe ،

ممكن حد يعطينا الخطوات بمثال بسيط ؟؟

و شي ثاني ،

ما هو البديل لهذا في لغة سي

#ifdefine  >>
…….
#else
……
#endif

كما تعلمون هذا يستخدم مع ال dll في لغة سي ،

هل يوجد شي مماثل في الاسمبلي ؟؟؟

وما هو البديل لكتابة شيء مثل هذا ؟؟

وبالنسبة ل

#define

هل يقابلة ما يكتب في

.const

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#2

المثال الخاص بـ Iczelion

.code
DllEntry proc hInstance:HINSTANCE, reason:DWORD, reserved1:DWORD
	.if reason==DLL_PROCESS_ATTACH
		invoke MessageBox,NULL,addr LoadMsg,addr AppName,MB_OK
	.elseif reason==DLL_PROCESS_DETACH
		invoke MessageBox,NULL,addr UnloadMsg,addr AppName,MB_OK
	.elseif reason==DLL_THREAD_ATTACH
		invoke MessageBox,NULL,addr ThreadCreated,addr AppName,MB_OK
	.else	   ; DLL_THREAD_DETACH
		invoke MessageBox,NULL,addr ThreadDestroyed,addr AppName,MB_OK
	.endif
	mov  eax,TRUE
	ret
DllEntry Endp
TestHello proc
	invoke MessageBox,NULL,addr HelloMsg,addr AppName,MB_OK
	ret	
TestHello endp

نوعا ما لو لم تكن تريد القيام بـ initialization معين عند طلب الملف او انهاء الطلب اليه فلست فعليا بحاجة الى تنفيذ اي شئ عند الـ attach او detach

ما اراه بسيط, الدالة المراد تصديرها باسم TestHello تم وضعها في النهاية وتم التصريح عنها للتصدير ضمن ملف [anyname].def مع اسم المكتبة و ستضاف تلقائيا الى قائمة الـ exports عند تجميعه

عند طلب الدالة الان تطلب بشئ يشبه

invoke LoadLibrary, addr LibName; LibName db "testdll.dll",0
test	 eax, eax
je	   error1
invoke GetProcAddress. eax. addr FuncName; FuncName db "TestHello",0
test	 eax, eax
je	   error2
; do something here, don't mess with EAX value
push   param1
push   param2
call	 eax; call TestHello function, the addr is in EAX
jmp	over
error1:
invoke MessageBox, NULL, addr szTextError1, NULL, MB_OK
jmp	over
error2:
invoke MessageBox, NULL, addr szTextError2, NULL, MB_OK
over:
; blah blah

اخبرني ما هو نص الخطأ الذي تحصل عليه بالاصل لاستطيع مساعدتك اكثر.

بخصوص #define, نستخدمها في الاسمبلي في ملفات الـ resource.. فما هو استخدامها سوى التصريح عن ملفات الـ header في C ؟

.const تستخدم لاعطاء الثوابت النصية مثلا ذات الاسماء الطويلة اسماء اقصر بان اقوم بالتصريح عن

NULL   equ	0

هذا يعني ان المجمع سيقوم فورا بتبديل اي تواجد لـ NULL بـ 0 وهذا مصرح عنه سلفا في windows.inc حسبما اذكر

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#3

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

اخي Xacker

أشكرك من اعماق قلبي على هذا التعاون ،،

جزاك الله كل خير ،،

سأقرء جميع الاجابات ،،

وسأعود لك ،،

--

سأعاود التنفيذ لأخبرك عن الخطأ ،

--

انا احاول تنفيذ ال درس dll لأن هناك درس في هذه المقالات عن ال hook وهو يعتمد على ال dll (اعتقد درس رقم 24) ،

هذا الدرس سيكون محور اسئلتي القادمة ،،

بس اولا خلي يتنفذ ال dll ..

:lol:

--

أشكرك مجددا فأنا عرفت بهذه الدروس من خلال ذكرها في مقالاتك ،،

بالفعل كما ذكرت اخي هي بداية جيدة جدا ..

لنا عودة ان شاء ربي ،

السلام عليكم

تم تعديل هذه المشاركة بواسطة الاخير زمانه في 1 سبتمبر 2006 في 17:15

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#4

السلام عليكم ،

بس بقي شي

هذا

اقتباس
و شي ثاني ،

ما هو البديل لهذا في لغة سي

#ifdefine  >>
…….
#else
……
#endif

هل يوجد هكذا شيء في الاسمبلي ،

يعني نختبر المتغير هل هو معرف من قبل ام لا ؟؟

،

انا لدي برنامج عن الهوك بالسي واريد ان احوله الى الاسمبلي وهو يحوي هكذا شيء (المذكور في الاعلى)

هذا الفايل :

#include <windows.h>

#define UWM_MOUSEHOOK_MSG "UWM_MOUSEHOOK-7F888989-D7D3-4b9e-8B1F-C40F7CCF89DF"
#define DllImport extern "C" __declspec( dllimport )
#define DllExport extern "C" __declspec( dllexport )


#ifdef DLL_MODULE
  DllExport void WINAPI MouseHook(HWND);
  DllExport void WINAPI MouseUnHook();
#else
  DllImport void WINAPI MouseHook(HWND);
  DllImport void WINAPI MouseUnHook();
#endif

كيف يحول ؟ ومثل هذه الامور اين اجد معلومات عنها ؟؟

-----------------

اخي ،

الحمد لله تنفذ برنامج بناء dll

طبعا الخطأ الذي كان يظهر لي ،

هنا

include \masm32\include\windows.inc 
include \masm32\include\user32.inc 
include \masm32\include\kernel32.inc

كان يقول لا استطيع فتح هذا الفايل !!!

حولته الى

include windows.inc
include kernel32.inc
include user32.inc

كما تكتب انت اخي في برامجك ، والحمد لله تنفذ

،

ما السبب ياترى ؟؟

طريقة استخدام ال dll في البرنامج تعتمد على LoadLibrary

طبعا يمكن استخدام طريقة ثانية ،

مثلا وضع ال dll في ملف .inc ثم عمل include لهذا الملف ،

تمام ؟؟

هنا طريقة الاستدعاء

	mov TestHelloAddr,eax 
	 call [TestHelloAddr]

الا يمكن ان تستدى بغير طريقة ؟؟

-----------

أخي Xacker

ولو انا خجلان منك لأن اعرف عد اتعبك معاي واخشى ان تضجر مني ،

بس ممكن اطلب منك طلب ،، وان شاء الله سهل عليك ،

في منتدى دلفي كان هناك درس للمشرف محمد عبد العزيز عن ال API hook ، لدالة ال TerminateProcess

أخي ،، ممكن تحول هذا المثال الى الاسمبلي ؟؟ اذا أمكن جزاك الله كل خير ..

مشكور على تعاونك معي

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#5

السلام عليكم ،

اقتباس
بس بدك تصبر علي شوي لاني مشغول هذه الايام بامور متفرقة

على راحتك اخي ،، تكرم عينك ;)

بس لا تنساني !! :lol:

تحياتي لك ،

وجزاك الله كل خير على هذا التعاون

في الانتظار

تم تعديل هذه المشاركة بواسطة الاخير زمانه في 3 سبتمبر 2006 في 17:09

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#6

السلام عليكم

سؤال أخير :)

هذا السطر ما يعني ؟؟

You must put /DLL switch and /DEF:<your def filename> in your linker switches like this: 
link /DLL /SUBSYSTEM:WINDOWS /DEF:DLLSkeleton.def /LIBPATH:c:\masm32\lib DLLSkeleton.obj

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#7

السلام عليكم

هذا السطر هو عملية الربط. عندما تريد إنشاء ملف EXE اي ملف تنفيذي تقوم بعملية الربط بدل المتغير /DLL او /DEF اما إذا اردت ان يكون الناتج ملف DLL فيجب عليك إضافة المتغيرين...

هل تعرف كيف تقوم بعلية الترجمة الربط ؟؟؟ إذا كنت لا تعرف يمكنك مراجعة الارشيف لان فيه دروس للمبتدئين تشرح كيفية عمل ذلك..

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

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

busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.

#8

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

مشكور اخي على الايضاح

اقتباس
هل تعرف كيف تقوم بعلية الترجمة الربط ؟؟؟ إذا كنت لا تعرف يمكنك مراجعة الارشيف لان فيه دروس للمبتدئين تشرح كيفية عمل ذلك..

بصراحة .. لا اعرف :o

هل تقصد في ارشيف هذا القسم ؟؟

سأبحث بعون الله ..

----

أأأأأأأخ

بس لو يصير اليوم 30 ساعة :lol: :lol:

----

مشكورين اخواني على تعاونكم معي

و جزاك الله خيرا اخي على الرد

تم تعديل هذه المشاركة بواسطة الاخير زمانه في 5 سبتمبر 2006 في 10:20

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

#9

انا لدي برنامج عن الهوك بالسي واريد ان احوله الى الاسمبلي وهو يحوي هكذا شيء (المذكور في الاعلى)

هذا الفايل :

كود

#include <windows.h>

#define UWM_MOUSEHOOK_MSG "UWM_MOUSEHOOK-7F888989-D7D3-4b9e-8B1F-C40F7CCF89DF"
#define DllImport extern "C" __declspec( dllimport )
#define DllExport extern "C" __declspec( dllexport )


#ifdef DLL_MODULE
  DllExport void WINAPI MouseHook(HWND);
  DllExport void WINAPI MouseUnHook();
#else
  DllImport void WINAPI MouseHook(HWND);
  DllImport void WINAPI MouseUnHook();
#endif

كيف يحول ؟ ومثل هذه الامور اين اجد معلومات عنها ؟؟

/index.php/topic/264448-%D8%A7%D9%84%D8%A8%D8%AF%D8%A7%D9%8A%D8%A9-%D9%85%D8%B9-%D8%A7%D9%84%D8%A7%D9%86%D8%AF%D8%B1%D9%88%D9%8A%D8%AF/

 

اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ

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

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