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

سوف أدخل المستشفى بسبب الاسمبلي

بدأه amnnonymous في 3 يوليو 2012 · 4 رد · 2,668 مشاهدة · في أرشيف قسم الـــ Assembly
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

انا حاولت اتعلم الاسمبلي 4 مرات و كل مرة احاول افشل

الاسباب :

كل مرة اشوف درس فيه طريقة برمجة مختلفة

البعض يقول توجد اسمبلي خاصة لكل معالج و انا معالجي هو Intel Centrino (جهاز محمول)

جربت عدة Assemblers :

fasm masm32 tasm و غيره

وكلها ما نجحت معي

الا

WinAsm Studio

وقد عملت برنامج Hello World

وهاهو السكريبت الي عملته انا :

.386
.MODEL flat, StdCall
OPTION CASEMAP : NONE

Include windows.inc
Include kernel32.inc
Include masm32.inc
Includelib kernel32.lib
Includelib masm32.lib

.data
HelloMsg DB "Hello Assembly World !!!" ,0
QuestionMsg DB "Whats up Assembly ?" ,0
CRLF     DB 00Ah ,00Dh, 0
ExitMsg  DB "Press ENTER to Exit..." ,0

.data?
Buffer DB ?

.code
Start:

invoke StdOut , addr HelloMsg
invoke StdOut , addr CRLF
invoke StdOut , addr QuestionMsg
invoke StdOut , addr CRLF
invoke StdOut , addr ExitMsg
invoke StdIn  , addr Buffer ,1
invoke ExitProcess,0

End Start

وانا حاليا ادرس دورة من طرف الأخ Stoune من منتديات ستارتايمز .www.startimes.com

اضافة الى انني اعرف بنية الحسوب تقريبا يعني Registers و Segments و Pointers و Indexers و اعرف عدة اوامر

مثل POP و ADD SUB AND OR INC DEC و غيرها

اظافة الى انني فهمت بعض من طرق نقل Data و غيرها

المهم انتم تعلمون الباقي Stack و Code و Data و Extra segments

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

+ انا وجدت سكريبت لآلة حاسبة بسيطة فيها 100+ سطر برمجي فهل هذا يعد جنونا ام انني اتخيل ؟

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

أرجوووووووووووووووكم افيدني ولا تبخولوا علي فكما تعلمون الاسمبلي واحدة من اكبر الاشياء التي تعمل Export للبشر الى مستشفى المجانين :wacko:

أسف لان الاسئلة كثيرة بكنني والله احتاج اجوبة :S

و شكرا

#2

السلام عليكم

أخي العزيز حسب خبرتي البسيطة اجواب على اسألتك و ليعذرني المختصون اذا هنالك خطأ في كلامي

أنت تستعجل التعلم صحيح نحن في عصر السرعة و لكن عليك اتقان ما تتعلمه

اليك بعض الخطوات لتعلم لغة الاسمبلي

اولا عليك تعلم لغة اسمبلي 16 بت و هي سهلة تعطيك الاساس الصحيح للغة سواء طورت مهارتك في اسمبلي 32 او حتى اسمبلي 64 فتعلم الصحيح يستلزم

ذلك الشيء

انصحك باستخدام masm او ml من ميكروسوفت لترجمة اعمالك او هنالك nasm ايضا يستطيع التعامل في نظام ويندوز و لينوكس وهو مجاني كتاب تعليمي مرفق بداخل ملف nasm

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

http://www.4shared.com/rar/-_9srBeD/__online.html

هنالك جزء ثاني للكتاب

1
#3

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

اقتباس

ولكن اذا واصلت تلك الدورة هل سوف يمكنني ذلك من احتراف الاسمبلي

لا يكفي، فالدورة هي بداية الطريق لتعلم الأسمبلي

اقتباس
توجد لكل معالج طريقة خاصة للبرمجة بالاسمبلي ؟

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

اقتباس
انا وجدت سكريبت لآلة حاسبة بسيطة فيها 100+ سطر برمجي فهل هذا يعد جنونا ام انني اتخيل ؟

لم أفهم ما تعنيه، وضّح أكثر

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

لا توجد هندسة عكسية بدون تعلم الأسمبلي.

=====

بعد الإنتهاء من الدورة أنصحك بهذا الكتاب، و طبعا هذا القسم

عمّار +1

تم تعديل هذه المشاركة بواسطة Z3r0n3 في 4 يوليو 2012 في 00:56

#4

شكرا للجميع على المرور و الاجابة

وهنا الباقي :

كنت اقصد اخي Z3r0n3 انني وجدت سكريبت لآلة حاسبة بسيطة بلغة الاسمبلي و لكن فيها اكثر من 100 سطر بينما اقدر اعمل آلة حاسبة ب 30 سطر فقط بالسي بلس بلس

فهل هكذا هي الاسمبلي ؟

وجدت بعض الاقاويل تقول انه من اجل تعلم الهندسة العكسية يلزم تعلم اوامر الاسمبلي فقط و كيفية عملها و اساسياتها فقط يعني MOV PUSH ADD وغيرها لانه يحتاجها الهكر

في OllyDBG من اجل التنقيح و و غيره

اما عن الاسمبلرز فانا اعمل ب WinAsm Studio فهل اواصل به ام احمل واحد غيره ؟

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

لا ادري لماذا مع انني عملت جولة على معظم اللغات المشهورة و استوعبتها معظمها و لكن نسيتها الآن و الآن انا متفرغ لسي بلس بلس و الاسمبلي

انا جقا لا اريد ترك الامبلي من دون المحاولة و لكن انا خائف ان تكون المحاولة هذه فاشلة مثل المحاولات الاولى

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

و شكرا

+ هل يمكنني ان اصل الى قوة الاسمبلي عبر السي بلس بلس و السي ؟

انا اعلم ان الاسمبلي تتعامل مع الذاكرة و المعالج مباشرة و لكن حتى السي لغة منخفضة المستوى فهل هي مثل الاسمبلي ؟

وشكرا

#5

أسمبلي 16 بت و 32 بت عالمين مختلفين وأغلب ماتتعلمه بعالم 16 بت لايمكن تطبيقه أو الإستفادة منه إذا أتيت إلى 32 بت سوى بعض أبسط الأشياء من أوامر الأسمبلي الأساسية مثل add, sub, push ..إلخ.

البرمجة في ويندوز تعتمد على الـWindows API (واجهة ويندوز البرمجية) وأغلب دروس أسمبلي 32 فعلياً دروس Windows API. إنظر لكود الـC هذا والذي يظهر رسالة :

....
int ret;
char *message	= "Message";
char *title	= "Title";

ret	= MessageBoxA(NULL, message, title, 0);
....

مايقابله في الأسمبي تقريباً :

ret     db ?            ; int re
...
message db "Message", 0 ; char *message	= "Message"
title   db "Title"0     ; char *title	= "Title"
...

push 0                  ; 0);
push offset title       ; title,
push offset message     ; message,
push 0                  ; 0,
call MessageBoxA        ; MessageBoxA(
mov dword ptr[ret], eax ; ret =

هناك نمط بين الكود المكتوب في الـC والمكتوب بالأسمبلي :

* معاملات الدوال تدفع للمكدس بطريقة معكوسة, فأول معامل للدالة MessageBoxA هو آخر معامل مررناه .وجميع دوال ويندوز تعمل بنفس المبدأ.

; function(one, two, three);

push three;
push two;
push one;
call function;

* القيمة التي تُعيدها الدالة MessageBoxA غالباً ماتكون في المُسجل eax.

إذا كنت تجيد الـC/C++ مع فهم للواجهة ويندوز البرمجية وطريقة عمل برامجة في الذاكرة فلن تواجه صعوبات في فهم الأسمبلي 32 فهي أبسط مقارنة بـ 16 بت وتتبع نمط واحد لدرجة أن هناك منقحات مثل IDA تستطيع إعادة البرنامج لكود مشابه للكود الاصلي في C (إختفت بعض الأشياء مثل re لأن الصمرفات تعمل تحسين للكود وحذف للأشياء الغير مهمة):

int __cdecl sub_40138C()
{
  sub_401900();
  return MessageBoxA(0, "Message", "Title", 0);
}

إذا كُنت مهتم بالهندسة العكسية وهذه المجالات, فالذي يلزمك فعلياً الـWin API.

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