


السمعة:
بسم الله الرحمن الرحيم
في هذا المقال سنتعرف على الدوال وأنواعها وأهم الدوال التي تفيدنا بشكل كبير
الدوال، تلعب دورًا محوريًا في البرمجة، وخصوصًا في الهندسة العكسية، حيث يمكن أن تساعدنا على فهم كيفية عمل البرامج من خلال تحليل الكود أو العمليات التنفيذية (executables).
ما هي الدوال: الدوال هي وحدات أساسية لإعادة استخدام الكود وتنظيمه. يمكن اعتبارها كـ "كتل" من التعليمات البرمجية المصممة لتنفيذ مهام معينة. كل دالة يمكن أن تقبل معاملات (arguments)، وتُرجع قيمة (return value).
صيغة تعريف الدالة (syntax):
مثال بسيط:
ملاحظة هامة: عند تعريف دالة تقوم بوظيفة معينة لا يمكن استخدامها إلا باستدعائها داخلة دالة (main).
وهناك اشكال وأنواع للدوال ويجب ملاحظة الفرق بين الأشكال والأنواع.
ما هي اشكال الدوال:
1. دالة بدون معاملات وبدون إرجاع:
2. دالة مع معاملات وبدون إرجاع:
بالبنط العريض: الدالة بس كانت ما بترجع شي منعرفها ب 'void'
3. دالة بدون معاملات مع إرجاع:
4. دالة مع معاملات ومع إرجاع:
الآن ما هي أنواع الدوال:
1. دوال مكتبية (Library Functions):
* توفرها مكتبات لغة C مثل printf وscanf (تُستخدم بشكل واسع).
2. دوال مخصصة (User-Defined Functions):
* يقوم المبرمج بكتابتها لتنفيذ عمليات محددة. "متل الي كتبناهن فوق".
3. دوال ضمنية أو داخلية (Inline Functions):
* تُعرّف باستخدام الكلمة المفتاحية inline (تُستخدم لتحسين الأداء في الحالات التي يتم استدعاء الدالة فيها بشكل متكرر).
أهم الدوال التي يتم استخدامها وتكون افادتها كبيرة بالهندسة العكسية:
1. دوال الذاكرة:
* تتحكم في تخصيص وإدارة الذاكرة.
تُستخدم بكثرة، ويمكن أن تكشف عن نقاط ضعف مثل تجاوز المكدس (buffer overflow).
إن شاء الله هذه الدوال رح نتوسع فيها وقت نشرح الmemory management
2. دوال التحكم بالمدخلات والمخرجات:
* تساعد على فهم كيفية قراءة البيانات وكتابتها.
يمكن تحليلها لفهم نقاط ضعف الإدخال.
3. دوال السلاسل النصية:
* تُستخدم في التعامل مع النصوص.
تُعتبر أهدافًا شائعة لثغرات Buffer Overflow.
شو هي الBuffer Overflow الي صرعتكن فيها: هي الثغرة بتصير وقت بتتجاوز كمية البيانات المدخلة سعة المخزن المؤقت (buffer) فهي البيانات الزائدة بتروح عالذاكرة المجاورة ف بتفسد البيانات الموجودة بالذاكرة المجاورة (يعني انت عندك قنينة عصير بتساع لتر بس ,فلنفترض هي الbuffer اذا حطيت فيها اكتر من لتر بالقنينة رح ينكب ع كنزتك هون الكنزة هي الذاكرة المجاورة والعصير هو الداتا)
في هذا المقال سنتعرف على الدوال وأنواعها وأهم الدوال التي تفيدنا بشكل كبير
الدوال، تلعب دورًا محوريًا في البرمجة، وخصوصًا في الهندسة العكسية، حيث يمكن أن تساعدنا على فهم كيفية عمل البرامج من خلال تحليل الكود أو العمليات التنفيذية (executables).
ما هي الدوال: الدوال هي وحدات أساسية لإعادة استخدام الكود وتنظيمه. يمكن اعتبارها كـ "كتل" من التعليمات البرمجية المصممة لتنفيذ مهام معينة. كل دالة يمكن أن تقبل معاملات (arguments)، وتُرجع قيمة (return value).
صيغة تعريف الدالة (syntax):
C:
return_type function_name(parameter_list) {
// Body of the function
}
// return_type: نوع القيمة التي تُرجعها الدالة (مثل int، float، void).
// function_name: اسم الدالة.
// parameter_list: قائمة المعاملات التي تقبلها الدالة (arguments).
// body: الكود الذي ينفذ المهمة المطلوبة.
مثال بسيط:
C:
int add(int a, int b) {
return a + b;
}
int main() {
int result = add(5, 3); // استدعاء الدالة
printf("The sum is: %d\n", result);
return 0;
}
ملاحظة هامة: عند تعريف دالة تقوم بوظيفة معينة لا يمكن استخدامها إلا باستدعائها داخلة دالة (main).
وهناك اشكال وأنواع للدوال ويجب ملاحظة الفرق بين الأشكال والأنواع.
ما هي اشكال الدوال:
1. دالة بدون معاملات وبدون إرجاع:
C:
void hello() {
printf("Hello, World!\n");
}
int main() {
hello(); // استدعاء الدالة
return 0;
}
2. دالة مع معاملات وبدون إرجاع:
C:
void displayNumber(int number) {
printf("The number is: %d\n", number);
}
int main() {
displayNumber(10); // استدعاء الدالة
return 0;
}
بالبنط العريض: الدالة بس كانت ما بترجع شي منعرفها ب 'void'
3. دالة بدون معاملات مع إرجاع:
C:
int getNumber() {
return 42;
}
int main() {
int number = getNumber();
printf("The number is: %d\n", number);
return 0;
}
4. دالة مع معاملات ومع إرجاع:
C:
include <stdio.h>
// تعريف الدالة
int add(int a, int b) {
int sum = a + b; // حساب المجموع
return sum; // إرجاع النتيجة
}
int main() {
int num1 = 10, num2 = 20;
int result;
// استدعاء الدالة
result = add(num1, num2);
// طباعة النتيجة
printf("The sum of %d and %d is %d\n", num1, num2, result);
return 0;
}
الآن ما هي أنواع الدوال:
1. دوال مكتبية (Library Functions):
* توفرها مكتبات لغة C مثل printf وscanf (تُستخدم بشكل واسع).
C:
#include <stdio.h>
int main() {
printf("Hello, World!\n");
return 0;
}
2. دوال مخصصة (User-Defined Functions):
* يقوم المبرمج بكتابتها لتنفيذ عمليات محددة. "متل الي كتبناهن فوق".
C:
int add(int a, int b) {
return a + b;
}
3. دوال ضمنية أو داخلية (Inline Functions):
* تُعرّف باستخدام الكلمة المفتاحية inline (تُستخدم لتحسين الأداء في الحالات التي يتم استدعاء الدالة فيها بشكل متكرر).
C:
#include <stdio.h>
// تعريف دالة داخلية
inline int square(int x) {
return x * x; // إرجاع مربع العدد
}
int main() {
int num = 5;
// استدعاء الدالة
int result = square(num);
// طباعة النتيجة
printf("The square of %d is %d\n", num, result);
return 0;
}
أهم الدوال التي يتم استخدامها وتكون افادتها كبيرة بالهندسة العكسية:
1. دوال الذاكرة:
* تتحكم في تخصيص وإدارة الذاكرة.
تُستخدم بكثرة، ويمكن أن تكشف عن نقاط ضعف مثل تجاوز المكدس (buffer overflow).
إن شاء الله هذه الدوال رح نتوسع فيها وقت نشرح الmemory management
2. دوال التحكم بالمدخلات والمخرجات:
* تساعد على فهم كيفية قراءة البيانات وكتابتها.
يمكن تحليلها لفهم نقاط ضعف الإدخال.
3. دوال السلاسل النصية:
* تُستخدم في التعامل مع النصوص.
تُعتبر أهدافًا شائعة لثغرات Buffer Overflow.
شو هي الBuffer Overflow الي صرعتكن فيها: هي الثغرة بتصير وقت بتتجاوز كمية البيانات المدخلة سعة المخزن المؤقت (buffer) فهي البيانات الزائدة بتروح عالذاكرة المجاورة ف بتفسد البيانات الموجودة بالذاكرة المجاورة (يعني انت عندك قنينة عصير بتساع لتر بس ,فلنفترض هي الbuffer اذا حطيت فيها اكتر من لتر بالقنينة رح ينكب ع كنزتك هون الكنزة هي الذاكرة المجاورة والعصير هو الداتا)

التعديل الأخير بواسطة المشرف: