بسم الله الرحمن الرحيم
هذا المقال للمبتدئين الذين لم يقوموا بكتابة برنامج بواجهة مرئية للاسمبلي من قبل.
في المرفقات المقال بصيغة PDF (عذرا لمن لا يملك برنامج Acrobat Reader) وسورس كود للبرنامج الموضح في الشرح.
نسال الله لكم التوفيق
بسم الله الرحمن الرحيم
هذا المقال للمبتدئين الذين لم يقوموا بكتابة برنامج بواجهة مرئية للاسمبلي من قبل.
في المرفقات المقال بصيغة PDF (عذرا لمن لا يملك برنامج Acrobat Reader) وسورس كود للبرنامج الموضح في الشرح.
نسال الله لكم التوفيق
تم تعديل هذه المشاركة بواسطة Xacker في 21 مارس 2006 في 15:45
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
درس جميل يا X يعطيك الف عافية..
انصح كل مبتدء الاطلاع عليه طريقة سهلة وشرح ممتاز, ويمكن وضع اي سؤال هنا وإن شاء الله سوف تكون هذه إنطلاقة لكل من اراد ان يبداء فى البرمجة بmasm32..
بالتوفيق للجميع
والسلام عليكم
لا إله إلا الله محمد رسول الله
busbar : يجب ان تدرك انه هناك حد ادنى للمعرفة المطلوبة قبل البدء في عمل أي شئ.
ممتاز, هذا ما نريد الوصول اليه.. مقال بسيط مختصر ويوصل الفكرة بدون تعقيد.. شكرا اخي احمد على رايك الذي يهمني كثيرا.
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
جاري التحميل...
thx in advance
merci mon ami
السلام عليكم ،
درس جميل ومفيد ،
انا عندما قرأت عن التعامل مع المصادر في مقالات Iczelion ، شلت هم ،
لأن هو لايتكلم عن الاضافة بهذه الطريقة ، فهناك نحن نكتب ملف ال resource
الحمد لله ال RadAsm وفر علبنا هذا ،
--
سؤال صغير ..
في ال DlgProc
.if eax==WM_COMMAND Mov eax,wParam .if eax ==IDC_BTN1
لماذا لم نقل
.if ax ==IDC_BTN1
كما ورد في مقالات Iczelion على اعتبار
The low word of wParam contains the menu ID of the selected menu item.
،
بالنسبة لأضافة القوائم ،، هل يوجد طريقة مماثلة ام فقط الطريقة المذكورة في مقالات Iczelion
،
ياريت اخ xacker تستمر بهكذا دروس ..
،
لدي سؤال بخصوص ال RadAsm
في اول خطوة لتكوين مشروع جديد هناك
Project name Project
ما الفرق بينهما ؟؟
اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ
الاخير زمانه كتب:سؤال صغير ..في ال DlgProc
.if eax==WM_COMMAND Mov eax,wParam .if eax ==IDC_BTN1لماذا لم نقل
.if ax ==IDC_BTN1كما ورد في مقالات Iczelion على اعتبار
The low word of wParam contains the menu ID of the selected menu item.
واضح أنه لا فرق أخي, نقلت قيمة wParam الى eax بالكامل لاصفر الجزء الاعلى منه فقط لا غير وكان بامكاني نقلها بالشكل mov ax, wParam ثم اجرى المقارنة
اقتباس،بالنسبة لأضافة القوائم ،، هل يوجد طريقة مماثلة ام فقط الطريقة المذكورة في مقالات Iczelion
لكن لا ارى فرق بينها وبين النقر على اي زر في اي واجهة, فاي طريقة تقصد هل لم انتبه الى ما تشير اليه.. الله اعلم
اقتباسلدي سؤال بخصوص ال RadAsmفي اول خطوة لتكوين مشروع جديد هناك
Project name Projectما الفرق بينهما ؟؟
الاولى اسم المشروع للمجلدات والملفات وخلافه..
الثاني هو الوصف description
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
السلام عليكم ،
جزاك الله خيرا اخي الكريم على الرد ،
ممكن سؤال جديد حول البرنامج ،
DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM mov eax,uMsg .if eax==WM_INITDIALOG ; nothing goes here for initializing .elseif eax==WM_COMMAND mov eax,wParam .if eax==IDC_BTN1 invoke GetDlgItem,hWin,IDC_EDIT1 ; eax holds the editbox handle mov CtrlHwnd,eax invoke GetWindowTextLength,CtrlHwnd ; eax holds the length of the text inserted cmp eax, 0 je notext inc eax ; we use a different value for nMaxCount depending on how ; many char we enter.. we dont want it to be vulnerable ; for buffer overflows :p invoke GetDlgItemText,hWin,IDC_EDIT1,addr szBuffer,eax ; now the text is in szBuffer invoke MessageBox,hWin,addr szBuffer,addr cool,MB_OK notext: .elseif eax==IDC_BTN2 invoke SetTimer,hWin,NULL,3000,NULL invoke SetDlgItemText,hWin,IDC_STC2,addr copyright .endif .elseif eax==WM_TIMER invoke SetDlgItemText,hWin,IDC_STC2,addr blank .elseif eax==WM_CLOSE invoke EndDialog,hWin,0 .else mov eax,FALSE ret .endif mov eax,TRUE ret DlgProc endp end start
انا لم افهم هذا الجزء
.else mov eax,FALSE ret .endif mov eax,TRUE ret
يعني احنا نختبر الرسائل ،
اخر اختبار كان لرسالة WM_CLOSE ثم بعد ذلك اتت هذه الجمل
.else mov eax,FALSE ret .endif
هذه ال eles متى ستتنفذ ،
اذا اتتنا غير رسالة عدا التي اختبرناها ؟؟
وهذا ال ret الى اين يعود ؟؟
وهنا انتهت ال if
.endif
حسنا ،
ما فائدة هذا
mov eax,TRUE ret
؟؟؟
اخي بالنسبة لي
اقتباسإقتباس،
بالنسبة لأضافة القوائم ،، هل يوجد طريقة مماثلة ام فقط الطريقة المذكورة في مقالات Iczelion
لكن لا ارى فرق بينها وبين النقر على اي زر في اي واجهة, فاي طريقة تقصد هل لم انتبه الى ما تشير اليه.. الله اعلم
انا اقصد ،
في مقالات Iczelion
يشرح عن عمل القوائم هكذا ..
Menu.rc
#define IDM_TEST 1
#define IDM_HELLO 2
#define IDM_GOODBYE 3
#define IDM_EXIT 4
FirstMenu MENU
{
POPUP "&PopUp"
{
MENUITEM "&Say Hello",IDM_HELLO
MENUITEM "Say &GoodBye", IDM_GOODBYE
MENUITEM SEPARATOR
MENUITEM "E&xit",IDM_EXIT
}
MENUITEM "&Test", IDM_TEST
}لآ ادري هل كن عملت اخي على الفيجوال سي ،
عند الذهاب الى قائمة Insert ثم الضغط على resource
تظهر مجموعة من المصادر التي يمكن اضافتها ..
عمل dialog (كما في ال radasm) وهناك ايضا ايقونات و صور ،، وهناك ايضا القوائم ، يعني انا اضيف قوائم بتفرعاتها بدون ان اكتب جمل برمجية فقط كتابة ال ID لكل عنصر ،،
وهذا قصدي ،
انه هل في الاسمبلي ممكن عمل نفس الشيء (طريقة مال كساله !!!!!) .. ام الا عن طريق كتابة الجمل البرمجية كما ذكر في المقالات ؟؟؟
،،
اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ
وعليكم السلام ورحمة الله وبركاته,
اولا فيما يخص هذا الجزء:
.else mov eax,FALSE ret .endif mov eax,TRUE ret
بشكل بديهي لن يصل التنفيذ الى mov eax, false الا لو لم تتطابق اي رسالة وصلت الى النافذة مع الرسائل التي انت قمت بتحديدها مثل WM_TIMER و WM_COMMAND وغيرها
ليقوم السطر هذا بوضع قيمة 0 في EAX ويعيد التنفيذ ليتوجه عبر RET الى النظام ليقوم بمعالجة النافذة بنفسه, بمعنى, وضعنا 0 لنخبر النظام اننا لا نريد هذه الرسالة ولسنا مهتمين بها, فلتفعل بها ما شئت.. الامر مشابه لاستخدام DefWindowMessage
اما السطر الخاص بـ mov eax, TRUE فسيصل التنفيذ اليه عندما تتطابق الرسالة الحاثّة للنافذة مع احدى الرسائل التي قمنا بتنفيذها, فنقوم بتنفيذ ما يحلو لنا ثم يصل التنفيذ الى هذا السطر ليضع 1 في EAX ليخبر النظام باننا نريد هذه الرسالة واننا مهتمون بها.. التفصيلات نوعا ما تبق مجهولة بسبب تضييق الخناق على التفصيلات الداخلية للنظام.
وفيما يتعلق بالقوائم, تستطيع من خلال RadASM فرضا ان تقوم بالنقر على فرع Resource عندما تقوم باختيار مشروع مع resource, الفرع تجده في النافذة الى اليمين, من خلال القائمة المساعدة بالزر الايمن تختار Add new > menu لتقوم باضافة قائمة وتعدل عليها كما تفعل في VC++ وهو سيتكفل في بنيتها الداخلية وانت ما عليك سوى الانتباه الى الـ IDs التي ستخاطب القوائم من خلالها بنفس الطريقة التي تتعامل مع الازرار فيها اي من خلال WM_COMMAND ثم تحدد الى اي عنصر تتبع الرسالة من خلال wParam
السلام عليكم
Do as I say, not as I do
We are Anonymous. We are Legion. We don't forgive. We don't forget
السلام عليكم ،
جزاك الله خيرا على هذا التعاون ،،
سأحاول التطبيق ،،
اني وان كنت الاخير زمانه ---- لأتِ بما لم تستطعه الاوائلُ
هذا الموضوع مغلق.