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

[ شرح ] اساسيات لغة C | الدوال 0x08

N0Tb1t

./عضو جديد

firefox
linux

السمعة:

بسم الله الرحمن الرحيم

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

الدوال، تلعب دورًا محوريًا في البرمجة، وخصوصًا في الهندسة العكسية، حيث يمكن أن تساعدنا على فهم كيفية عمل البرامج من خلال تحليل الكود أو العمليات التنفيذية (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).

WhatsApp Image 2025-06-09 at 7.45.11 AM.webp


إن شاء الله هذه الدوال رح نتوسع فيها وقت نشرح الmemory management
2. دوال التحكم بالمدخلات والمخرجات:
* تساعد على فهم كيفية قراءة البيانات وكتابتها.
يمكن تحليلها لفهم نقاط ضعف الإدخال.

WhatsApp Image 2025-06-09 at 7.46.08 AM.webp


3. دوال السلاسل النصية:
* تُستخدم في التعامل مع النصوص.
تُعتبر أهدافًا شائعة لثغرات Buffer Overflow.

WhatsApp Image 2025-06-09 at 7.46.32 AM.webp



شو هي ال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).

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

إن شاء الله هذه الدوال رح نتوسع فيها وقت نشرح الmemory management
2. دوال التحكم بالمدخلات والمخرجات:
* تساعد على فهم كيفية قراءة البيانات وكتابتها.
يمكن تحليلها لفهم نقاط ضعف الإدخال.

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

3. دوال السلاسل النصية:
* تُستخدم في التعامل مع النصوص.
تُعتبر أهدافًا شائعة لثغرات Buffer Overflow.

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


شو هي الBuffer Overflow الي صرعتكن فيها: هي الثغرة بتصير وقت بتتجاوز كمية البيانات المدخلة سعة المخزن المؤقت (buffer) فهي البيانات الزائدة بتروح عالذاكرة المجاورة ف بتفسد البيانات الموجودة بالذاكرة المجاورة (يعني انت عندك قنينة عصير بتساع لتر بس ,فلنفترض هي الbuffer اذا حطيت فيها اكتر من لتر بالقنينة رح ينكب ع كنزتك هون الكنزة هي الذاكرة المجاورة والعصير هو الداتا) (:
ما شاء الله تبارك الله ! كل موضوع ابداع اكثر من اللي قبله 👏
الله يعطيك العافية ويزيدك من علمه وفضله
 
ما شاء الله تبارك الله ! كل موضوع ابداع اكثر من اللي قبله 👏
الله يعطيك العافية ويزيدك من علمه وفضله
آمين يا رب واياك ان شاء الله
 

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

عودة
أعلى