TGViewer
SecForge SecForge @s3cforge · 94 subscribers
Post #22 136
خب سلام اومدیم یه مقدار درباره execve یه توضیح بدیم که احتمالا همتون وقتی یکم با strace کار میکنین این syscall میبینید . کارش بخوام خیلی کوتاه بگم اینه که میاد یه image  پروسه فعلی رو با یه برنامه جدید جایگزین میکنه . شاید بگی عین fork هست ولی نه توی این عمل process جدید درست نمیشه بلکه همونه ولی فقط اون برنامه ای که درحال اجرا بود جایگزین میشه و یه برنامه جدید اجرا میشه .
سینتکسش هم به صورت زیره:
int execve(
    const char *pathname,
    char *const argv[],
    char *const envp[]
);

pathname خب مربوط به مسیر اون فایل اجرایی هست که میخوایم توی پراسس فعلی اجرا بشه /bin/ls
argv هم مربوط به آرگومان هایی هست که اون فایل اجرایی ما میگیره مثلا ss -t
envp هم مربوط به اون متغیر های Environment هستش.

بخوایم الان با توجه به توضیحایی که بالا دادیم این بخشا رو پر کنیم به صورت زیر در میاد
execve("/bin/ls", args, env);

حالا برای مثال اگه بخوایم  ls -la بگیریم متغیر args باید به صورت زیر پر کنیم :
char *args[] = {
    "ls",
    "-l",
    "/home",
    NULL
};

اینم یادتون باشه آخر آرایه هم باید با NULL پر بشه که سیستم بفهمه آرگومان ها کجا به اتمام میرسند .
در واقع اینطوریه :
./main_program:
#include <stdio.h>
#include <unistd.h>

int main()
{
    char *args[] = {
        "program2",
        "hello",
        "world",
        NULL
    };
    printf("Before execve\n");
    execve("./program2", args, NULL);
    printf("After execve\n");
    return 0;
}

./program2:
#include <stdio.h>
int main(int argc, char *argv[])
{
    printf("I am program2\n");
    printf("argc = %d\n", argc);
    for (int i = 0; i < argc; i++)
    {
        printf("argv[%d] = %s\n", i, argv[i]);
    }
    return 0;
}

خب توی این بخش میاد آرگومان های داده شده توی برنامه اول رو در برنامه دوم به نمایش میزاره و میشه گفت تمام کاری که میکنه همینه .یه نکته دیگه هم اینه که pid این برنامه اگه 100 بار این وسط برنامه جدید با execve  بیاد وسط عوض نمیشه و جدا از اون وقتی یه برنامه جدید با execve اجرا میشه ادامه کدی که توی برنامه اول داریم اجرا نمیشه مگر اینکه به خطا بخوریم توی اجرا کردن برنامه دوم .
و در آخر، کنار execve چندین تابع کتابخانه‌ای هم وجود داره که همگی wrapper هستن و execve رو صدا می‌زنن execl، execlp، execle، execv و execvp که خب یه سری تفاوت دارن و زیاد توشون دیپ نمیشیم .

Join channel⚡
  • ❤ 3
More from @s3cforge
  1. Oct 6, 2026یکمی بزرگ مزرگ شد اینم pdf اگه خواستین بخونین
  2. Oct 6, 2026int main(int argc, char **argv) { pid_t pid = fork(); if (pid == 0) { // bache install_sec…
  3. Oct 6, 2026سلام چطورین؟ یه مقدار اومدیم امروز درباره linux seccomp یا همون secure computing حرف بزنیم…
  4. Oct 5, 2026سلام چطورین؟ فرداشب موضوعمون یکم درباره sandbox process توی لینوکس هستش به نظرم چیز جالبیه…
  5. Sep 25, 2026خب سلامی دوباره یه مقداری درگیر کار و .... بودم واقعا وقت نکرده بودم ادامه این پستو به اتم…
  6. Sep 24, 2026دوستان طول کشید ببخشید یکمی درگیرم این چند وقت امشب کاملش میکنم میزارم براتون❤
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →