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

الدرس 24 ل Iczelion

مغلق
بدأه الاخير زمانه في 4 سبتمبر 2006 · 5 رد · 891 مشاهدة · في لغة Assembly لأنظمة 16, 32, 64 بت
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

لدي كم سؤال بخصوص هذه المقالة ،

بعض الاسئلة عن الكود ..

ما هذا التصريح ،

wsprintfA proto C :DWORD,:DWORD,:VARARG 
wsprintf TEXTEQU <wsprintfA>

وهذا

template db "%lx",0

وهذا

mov edx,lParam
assume  edx:PTR MOUSEHOOKSTRUCT

ثم

assume edx:nothing

هل هذا يقابل ..

PMOUSEHOOKSTRUCT hok=(PMOUSEHOOKSTRUCT) lParam;

في لغة سي ؟؟

،،

وفي بناء ال dll

ما هذا ،،

This is the makefile of the DLL ---------------------------------------------- 
NAME=mousehook 
$(NAME).dll: $(NAME).obj 
		Link /SECTION:.bss,S  /DLL /DEF:$(NAME).def /SUBSYSTEM:WINDOWS /LIBPATH:c:\masm\lib $(NAME).obj 
$(NAME).obj: $(NAME).asm 
		ml /c /coff /Cp $(NAME).asm

لم افهم شيء :blink:

ما فائدتها ؟

وما هذه الحروف العجيبة ؟؟!!

أظن انها تقابل شيء من هذا بالسي ,,

#pragma comment(linker, "/section:.share,rws")

هذا مكتوب في MAKEFILE،

ماهذا الفايل ؟

هل اضيفه في اخر خطوة من تكوين المشروع ؟

يعني اضيف فايل من نوع MAK ؟؟

/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

السلام عليكم

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

الكود الاول هو مجرد تسريح عن الدلة wsprintf والتى تسمح لك بعمل تنسيق لنص معين, يعنى لو عندك متغير من نوع int وتريد ان تضعه فى داخل نص تستطيع بوصطة هذه الدالة ان تدخله داخل النص, وهذه الدالة تعمل تقريباً بنفس الطريقة التى تعمل بها الدالة printf :::

الكود الثاني : هذه هى طريقة التعامل معى الدالة السابقة, تعطيها تنسيق ميعن من النص وهى تقوم بتحويلة لنص بدل من متغيرات..

الكود الثالث : فى لغة الاسمبلي لا يوجد مؤاشرات لذلك تستطيع ان تاخذ اي مسجل من نوع 32 بت وتعتبر انه مؤاشر ثم تجعله يواشر على نوع معين من المتغيرات..

الكود الرابع: بعد الانتهاء من الانتهاء من المؤاشر تعيد المسجل لحالته الطبيعية.

الكود الخامس: نعم تقريباً نفس الشئ ولو اننا لا نستخدم المسجلات بشكل مباشر فى لغة السي.

الكود السادس : هذه لغة برمجة لعمل ملفات Make التى تساعدك على عمل كمبايل ولنك لبرامجك وبما انك تستخدم الفشول فانت لن تحتاج لها, ولكن انصح بتعلمها حتى تستطيع فهم الية الترجمة والربط ولا يكون اعتمادك بالكامل على الفشول..

الكود السابع: هذا جزء من الية الربط وهناك العدد من الParameters التى تستطيع اضافتها لتتم اثناء الترجمة والربط...

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

لا اقول لك هذا الكلام لاني مملت من اسئلتك وإنما لاني ارجو لك اكبر فائدة ممكنة, وهذه مجرد نصيجة من اخ كبير لاخو الصغير...

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

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

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

#3

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

اقتباس
وارجوك اخي ان تبحث

والله ياأخي ما توقفت عن البحث والقراءة ،،

تستطيع ان تقول انه انا مستعجل شوي ،، والظاهر هذا شي سيء بهكذا امور

اقتباس
لا اقول لك هذا الكلام لاني مملت من اسئلتك وإنما لاني ارجو لك اكبر فائدة ممكنة, وهذه مجرد نصيجة من اخ كبير لاخو الصغير...

مشكور اخي الكريم على نصيحتك وعلى هذا الكلام الطيب ،،

وسأحاول أن أخذ بها ان شاء الله ،،

بارك الله بك على الاجابة ،،

سأحاول ان اقرء بأستافضة ،،

واكيد راح ارجعلكم ،، واتحملوني ;)

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

أخوك الصغير .. زيد

/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

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

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

يعني هل هي لغة برمجة مستقلة ؟؟

ما فائدتها ؟؟

طيب ، لو ارد ان ابحث عنها في googel ماذا اكتب :unsure:

،،

انا سحبت كود البرنامج لهذا الدرس (الدرس رقم 24)

ووجدت هذا الفايل ،

يعني الان لو انا كتبت برنامج خاص بي هل ايضا اعمل لي هكذا فايل ،

اقتباس
وبما انك تستخدم الفشول فانت لن تحتاج لها

ممكن شوية ،، شوية توضيح ،

يعني انا اكتب برنامج بصورة اعتيادية وخلص ؟؟!!وهذه الامور تتم تلقائيا ام كيف ؟؟

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

بعد هذا الدرس كتبت برنامج خاص بي عن الهوك ،

شيء بسيط ،،

لكن كالعادة ،، تواجهني بعض المشاكل ،،

هذه الخطوات التي قمت بها ،،

فتحت مشروع جديد لتكوين ال DLL وكتبت بداخل ملف ال .Asm

.386
.model flat,stdcall
option casemap:none
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\kernel32.lib
include \masm32\include\user32.inc
includelib \masm32\lib\user32.lib

.const
WM_MOUSEHOOK equ WM_USER+6
.data
hInstance dd 0

.data?
hHook dd ?
hWnd dd ?

.code
DllEntry proc hInst:HINSTANCE, reason:DWORD, reserved1:DWORD
	push hInst
	pop hInstance
	  mov  eax,TRUE
	  ret
DllEntry Endp

MouseProc proc nCode:DWORD,wParam:DWORD,lParam:DWORD
	invoke CallNextHookEx,hHook,nCode,wParam,lParam

.if ( wParam==WM_LBUTTONUP || wParam==WM_RBUTTONUP ||  wParam==WM_MOUSEMOVE)
		invoke PostMessage,hWnd,WM_MOUSEHOOK,wParam,lParam

		.endif

	xor eax,eax
	ret
MouseProc endp

InstallHook proc hwnd:DWORD
	push hwnd
	pop hWnd
	invoke SetWindowsHookEx,WH_MOUSE,addr MouseProc,hInstance,NULL
	mov hHook,eax
	ret 
InstallHook endp

UninstallHook proc
	invoke UnhookWindowsHookEx,hHook
	ret
UninstallHook endp

End DllEntry

وفي ملف ال .Def

LIBRARY MyDll2
EXPORTS 
MouseProc
InstallHook
UninstallHook

،،

ملف ال DLL تكون تمام وقام بتصدير الثلاث دوال ،

كونت مشروع اخر يستخدم هذه ال DLL ،

في ملف ال .Asm

كتبت ،

.386
.model flat, stdcall;32 bit memory model
option casemap :none;case sensitive

include MyProj1_Hook.inc

.code

start:

	invoke GetModuleHandle,NULL
	mov		hInstance,eax

	invoke InitCommonControls
	invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL
	invoke ExitProcess,0

;########################################################################

DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM



 	mov		eax,uMsg
	.if eax==WM_INITDIALOG


	.elseif eax==WM_COMMAND

;mov eax,wParam
	.if wParam==IDC_HOOK

		   invoke InstallHook , hWin
		   invoke GetDlgItem,hWin,IDC_HOOK
		   invoke EnableWindow,eax,FALSE
		   invoke GetDlgItem,hWin,IDC_UNHOOK
		   invoke EnableWindow,eax,TRUE

	.elseif wParam ==IDC_UNHOOK


		   invoke UninstallHook 
		   invoke GetDlgItem,hWin,IDC_UNHOOK
		   invoke EnableWindow,eax,FALSE
		   invoke GetDlgItem,hWin,IDC_HOOK
		   invoke EnableWindow,eax,TRUE	   	  

 	.endif



	.elseif eax==WM_MOUSEHOOK



		.if wParam== WM_RBUTTONUP


			assume edx:PTR MOUSEHOOKSTRUCT

			invoke MessageBox, NULL, addr Right, addr Right, MB_OK 

			invoke SetDlgItemText,hWin,IDC_ACTION,addr Right

			invoke SetDlgItemInt,hWin,IDC_X,[edx].pt.x,TRUE
			invoke SetDlgItemInt,hWin,IDC_Y,[edx].pt.y,TRUE

			assume edx:nothing 
			.elseif wParam== WM_LBUTTONUP
			assume edx:PTR MOUSEHOOKSTRUCT
			invoke MessageBox, NULL, addr Left, addr Left, MB_OK 

			invoke SetDlgItemText,hWin,IDC_ACTION,addr Left

			invoke SetDlgItemInt,hWin,IDC_X,[edx].pt.x,TRUE
			invoke SetDlgItemInt,hWin,IDC_Y,[edx].pt.y,TRUE
			assume edx:nothing 

	;.elseif wParam== WM_MOUSEMOVE
;invoke MessageBox, NULL, addr MsgBoxText, addr Move, MB_OK 

;	invoke SetDlgItemText,hWin,IDC_ACTION,addr Move

;	invoke SetDlgItemInt,hWin,IDC_X,[edx].pt.x,TRUE
	;invoke SetDlgItemInt,hWin,IDC_Y,[edx].pt.y,TRUE



		.endif

	.elseif eax==WM_CLOSE
		invoke EndDialog,hWin,0
	.else
		mov		eax,FALSE
		ret
	.endif
	mov		eax,TRUE
	ret

DlgProc endp

end start

و في ملف ال .Inc ، كتبت التعاريف

include windows.inc
include kernel32.inc
include user32.inc
include Comctl32.inc
include shell32.inc

includelib kernel32.lib
includelib user32.lib
includelib Comctl32.lib
includelib shell32.lib

;include MyDll2.inc
includelib MyDll2.lib

DlgProc			PROTO	:HWND,:UINT,:WPARAM,:LPARAM

.const

IDD_DIALOG1			equ 101
IDC_HOOK		equ 1001
IDC_UNHOOK			equ 1002

IDC_X			equ 1003
IDC_Y			equ 1004
IDC_ACTION			equ 1005

WM_MOUSEHOOK			 equ WM_USER+6 

;#########################################################################

.data
hook db "you pressed hook ",0
unhook db "you pressed unhook ",0
AppName db " hook ",0
Right db " you pressed Right ",0
Left db " you pressed Left ",0
Move db " Mouse Move ",0

MsgBoxCaption  db "Iczelion Tutorial No.2",0 
MsgBoxText	   db "Win32 Assembly is Great!",0 


;****************************************************
.data?

hInstance			dd ?
R dd ?
L dd ?

;#########################################################################


InstallHook proto :DWORD
UninstallHook proto
MouseProc proto :DWORD,:DWORD,:DWORD

،

البرنامج يقوم بعرض نص في Edit Box اذا ضغط المستخدم زر الماوس الايمن او الايسر مع عرض الاحداثيات ،

المشكلة الاولى ،

هذا الخطأ

assume edx:PTR MOUSEHOOKSTRUCT

الاحداثيات تكون في المتغير lParam ،

كيف استخلصها من هذا المتغير ،

في لغة سي كنا نكتب

PMOUSEHOOKSTRUCT hok=(PMOUSEHOOKSTRUCT) lParam;

ماذا نكتب الان ؟؟

بأستثناء هذه المشكلة البرنامج تنفذ لكن بحدود برنامجي أي لم يتنفذ على ال system ،

طبعا بما ان البرنامج تنفذ على الثريد يعني تكوين ال dll صحيح والبرنامج تعامل مع الدوال المصدرة ،

لكن لماذا لم يتنفذ على ال system ،

هل لملف ال Make تأثير ؟؟

لهذا طلبت منك اخي احمد التوضيح اكثر ،،

طبعا سأحاول مجددا ،،

ولنا عودة ..

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

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

/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

السلام عليكم

اخي زيد ملف الmakefile هو ملف الترجمة, لنفترض انك وضعت مشروع يتكون من 20 ملف شفرة البعض منها تريد ان تحوله إلى ملفات DLL والبعض الاخر تريد ان تحوله إلى ملفات تنفيذية وملفات resources الخ هل ستقوم بعد كل عملية تغير فى ملف معين بترجمة جميع الملفات وكتابة الاوامر سطر تلو الاخر ؟؟؟

لذلك يوجد برنامج إسمة make وملف إٍسمة Makefile عندما تضع جميع ملفات مشكروعك فى مسار معين وتريد ان تقوم بعمل ترجمة وإنشاء ملفات تنفيذية كل ما عليك عمله هو ان تكتب الامر Make فى المسار الذى وضعت فيه ملف الmakefile...

بالنسبة لملف الmakefile والذى طرحت مثال عليه فى مشاركتك الاولي كل ما يقوله هذا الملف هو انه يريد برنامج إٍسمه mousehook ووضعها فى متغير سماه NAME ولو لاحظت ستجده كتب تقريباً نفس الاوامر التى تعودنا ان نكتبها عندما نترجم برامجنا فى سطر الاوامر, معى ملاحظة انه استخدم متغير بدل من إٍسم البرنامج...

بالنسبة للامر ASSUME فالمسئلة بسيطة جداً, lParam يحتوي على مؤاشر من نوع PMOUSEHOOKSTRUCT وكل ما نريده هو ان نجعل edx هو المؤاشر حتى نستطيع الوصول إلى محتوى PMOUSEHOOKSTRUCT.

mov edx,lParam
assume  edx:PTR MOUSEHOOKSTRUCT

;;;;;; USE EDX TO ACCESS THE VALUSE;;;;;;;;;

assume edx:nothing

هذا هو بالظبط محتوى الامر المكتوب بلغة السي, اما بالنسبة لملف makefile فلا دخل له بعمل البرنامج وماهو سوي طريقة لتسهيل الترجمة فحسب...

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

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

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

#6

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

مشكور على هذا التوضيح

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

/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/

 

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

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

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