مضى على الشبكة و يوم من العطاء.

[ شرح ] أساسيات لغة C | المراحل التي يمر بها الكود 0x00

N0Tb1t

./عضو
>:: v1p ::<

firefox
linux

السمعة:

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

بسم الله الرحمن الرحيم بداية انا طالب علم بخبرة متواضعة في المجال ولكن احاول الإفادة ،اتقبل النقاش والنقد وان اخطأت فمن نفسي والشيطان وإن أصبت فمن الله على بركة الله.
ان شاء الله هذه المقالات ستكون شاملة بالامور الاساسية وسوف تكون متوسعة بالامور الهامة فقط لمجال الهندسة العكسية (Reverse Engineering) التي تخص لغة C.


المراحل التي يمر بها كود لغة C

اولاً يكون لدينا الكود المصدر (Source Code) وهو الذي يكون بامتداد '.c' والذي يكون فيه الكود الذي قمنا بكتابته
حسنا هذا الكود يمر بمراحل قبل أن ينفذ ومن المهم جداً ان نعلم هذه المراحل :

1. المعالجة المسبقة التي تعرف (Preprocessor) وهذه المرحلة يتم فيها عدة خطوات من أهمها :
  • إزالة التعليقات
  • توسيع وحدات الماكرو
  • توسيع الملفات المضمنة
يكون الملف بامتداد '.i'


2. المترجم (Compiler) :
تقوم هذه المرحلة بتحويل الكود إلى لغة التجميع 'Assembly' ويكون الملف بامتداد '.s'


3
. المجمع (Assembler) :
بهذه المرحلة يقوم المجمع بتحويل كود لغة التجميع إلى لغة الآلة والتي هي تكون عبارة عن صفار وواحدات (0, 1)
ويكون الملف بامتداد '.o'


4. الرابط (Linker) :
هذه المرحلة يتم فيها ربط جميع استدعاءات الوظائف بتعريفاتها
نهايةً يكون الملف قابل للتنفيذ بامتداد '.exe'


WhatsApp Image 2025-05-25 at 12.34.19 AM.webp


من المهم كتير تتعلم كيف بتطبق هي الخطوات يدويا وتعمل نظرة عالكود كيف بيتغير من مرحلة لمرحلة

هاد الرابط بيشرح كيف بتعمل هي الخطوات على لينيكس
 
السلام عليكم ورحمة الله وبركاته

بسم الله الرحمن الرحيم بداية انا طالب علم بخبرة متواضعة في المجال ولكن احاول الإفادة ،اتقبل النقاش والنقد وان اخطأت فمن نفسي والشيطان وإن أصبت فمن الله على بركة الله.
ان شاء الله هذه المقالات ستكون شاملة بالامور الاساسية وسوف تكون متوسعة بالامور الهامة فقط لمجال الهندسة العكسية (Reverse Engineering) التي تخص لغة C.


المراحل التي يمر بها كود لغة C

اولاً يكون لدينا الكود المصدر (Source Code) وهو الذي يكون بامتداد '.c' والذي يكون فيه الكود الذي قمنا بكتابته
حسنا هذا الكود يمر بمراحل قبل أن ينفذ ومن المهم جداً ان نعلم هذه المراحل :

1. المعالجة المسبقة التي تعرف (Preprocessor) وهذه المرحلة يتم فيها عدة خطوات من أهمها :
  • إزالة التعليقات
  • توسيع وحدات الماكرو
  • توسيع الملفات المضمنة
يكون الملف بامتداد '.i'


2. المترجم (Compiler) :
تقوم هذه المرحلة بتحويل الكود إلى لغة التجميع 'Assembly' ويكون الملف بامتداد '.s'


3
. المجمع (Assembler) :
بهذه المرحلة يقوم المجمع بتحويل كود لغة التجميع إلى لغة الآلة والتي هي تكون عبارة عن صفار وواحدات (0, 1)
ويكون الملف بامتداد '.o'


4. الرابط (Linker) :
هذه المرحلة يتم فيها ربط جميع استدعاءات الوظائف بتعريفاتها
نهايةً يكون الملف قابل للتنفيذ بامتداد '.exe'


مشاهدة المرفق 17543


من المهم كتير تتعلم كيف بتطبق هي الخطوات يدويا وتعمل نظرة عالكود كيف بيتغير من مرحلة لمرحلة

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

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

و بالتوفيق
إن شاء الله
بارك الله فيكم
 
السلام عليكم ورحمة الله وبركاته

بسم الله الرحمن الرحيم بداية انا طالب علم بخبرة متواضعة في المجال ولكن احاول الإفادة ،اتقبل النقاش والنقد وان اخطأت فمن نفسي والشيطان وإن أصبت فمن الله على بركة الله.
ان شاء الله هذه المقالات ستكون شاملة بالامور الاساسية وسوف تكون متوسعة بالامور الهامة فقط لمجال الهندسة العكسية (Reverse Engineering) التي تخص لغة C.


المراحل التي يمر بها كود لغة C

اولاً يكون لدينا الكود المصدر (Source Code) وهو الذي يكون بامتداد '.c' والذي يكون فيه الكود الذي قمنا بكتابته
حسنا هذا الكود يمر بمراحل قبل أن ينفذ ومن المهم جداً ان نعلم هذه المراحل :

1. المعالجة المسبقة التي تعرف (Preprocessor) وهذه المرحلة يتم فيها عدة خطوات من أهمها :
  • إزالة التعليقات
  • توسيع وحدات الماكرو
  • توسيع الملفات المضمنة
يكون الملف بامتداد '.i'


2. المترجم (Compiler) :
تقوم هذه المرحلة بتحويل الكود إلى لغة التجميع 'Assembly' ويكون الملف بامتداد '.s'


3
. المجمع (Assembler) :
بهذه المرحلة يقوم المجمع بتحويل كود لغة التجميع إلى لغة الآلة والتي هي تكون عبارة عن صفار وواحدات (0, 1)
ويكون الملف بامتداد '.o'


4. الرابط (Linker) :
هذه المرحلة يتم فيها ربط جميع استدعاءات الوظائف بتعريفاتها
نهايةً يكون الملف قابل للتنفيذ بامتداد '.exe'


مشاهدة المرفق 17543


من المهم كتير تتعلم كيف بتطبق هي الخطوات يدويا وتعمل نظرة عالكود كيف بيتغير من مرحلة لمرحلة

هاد الرابط بيشرح كيف بتعمل هي الخطوات على لينيكس
ما شاء الله!
من اول المتابعين للشرح 🔥
 
أولا جزاك الله خيرا أخي فعلا أول مرة اعرف بهذه التفاصيل
في مرحلة "الربط في Linker" وجدت انه يتعامل حتى مع ملفات بامتداد .a لكن لم افهم جيدا ما دور هذه الملفات
الذي فهمته و أتمنى التصحيح هو أن ملف .a هو ملف يجمع عدة ملفات من نوع .o
 
أولا جزاك الله خيرا أخي فعلا أول مرة اعرف بهذه التفاصيل
في مرحلة "الربط في Linker" وجدت انه يتعامل حتى مع ملفات بامتداد .a لكن لم افهم جيدا ما دور هذه الملفات
الذي فهمته و أتمنى التصحيح هو أن ملف .a هو ملف يجمع عدة ملفات من نوع .o
واياكم يارب هذا هدف المحتوى الافادة ان شاء الله

مرحلة الربط هي بتدمج الملفات الي نحنا عنا ياها ليطلع بعدها ملف exe قابل للتنفيذ

ملف الـ .o هو عبارة عن ملف بالـmachine code بس هو ملف غير قابل للتنفيذ وبيكون بلاحقة .obj بالويندوز

عندك ملفات .a هني ملفات المكتبات الثابتة وهي عبارة عن ارشيف بتحوي على مجموعة من ملفات الكائن (.o) مع فهرس للرموز. وبتكون لاحقتا بالويندوز .lib (يعني انت بالبرنامج عندك مثلاً دالتين add() و sub() وحدة للجمع ووحدة للطرح تمام وقت التجميع بلينكر بتصير كل دالة هيك -> add.o, sub.o هدول بيتم دمجن بالمكتبات الثابتة فرضاً math.a)

وعنا لسا ملفات .so بالويندوز .dll هدول ملفات المكتبات الديناميكية وهي عبارة عن مكتبات بيتم تحميلا بالـruntime واذا عندك اكتر من برنامج عاملهم ربط بين بعضن بالـ header files بيتم تشارك هي المكتبات بين الملفات

واخر الشي وقت التنفيذ بيتم دمج هدول الملفات مع بعض طبعاً هني بيكون بالباينري فـ انت مش قادر انك تعدل عليهن او تقرأن

اتمنى ان تكون وصلت الفكرة واي فكرة مش واضحة انا جاهز ايمت ما بتحب

ان شاء الله رح احكي عن الـ header files المقال الجاي.
 
واياكم يارب هذا هدف المحتوى الافادة ان شاء الله

مرحلة الربط هي بتدمج الملفات الي نحنا عنا ياها ليطلع بعدها ملف exe قابل للتنفيذ

ملف الـ .o هو عبارة عن ملف بالـmachine code بس هو ملف غير قابل للتنفيذ وبيكون بلاحقة .obj بالويندوز

عندك ملفات .a هني ملفات المكتبات الثابتة وهي عبارة عن ارشيف بتحوي على مجموعة من ملفات الكائن (.o) مع فهرس للرموز. وبتكون لاحقتا بالويندوز .lib (يعني انت بالبرنامج عندك مثلاً دالتين add() و sub() وحدة للجمع ووحدة للطرح تمام وقت التجميع بلينكر بتصير كل دالة هيك -> add.o, sub.o هدول بيتم دمجن بالمكتبات الثابتة فرضاً math.a)

وعنا لسا ملفات .so بالويندوز .dll هدول ملفات المكتبات الديناميكية وهي عبارة عن مكتبات بيتم تحميلا بالـruntime واذا عندك اكتر من برنامج عاملهم ربط بين بعضن بالـ header files بيتم تشارك هي المكتبات بين الملفات

واخر الشي وقت التنفيذ بيتم دمج هدول الملفات مع بعض طبعاً هني بيكون بالباينري فـ انت مش قادر انك تعدل عليهن او تقرأن

اتمنى ان تكون وصلت الفكرة واي فكرة مش واضحة انا جاهز ايمت ما بتحب

ان شاء الله رح احكي عن الـ header files المقال الجاي.
جزاك الله خيرا و جعلها في ميزان حسناتك
وصلت الفكرة تماما
 

آخر المشاركات

عودة
أعلى