execve
glibc
execve() 执行由 pathname 指定的程序。这会导致当前正在被调用进程运行的程序被一个新程序替换,且该新程序会重新初始化栈、堆,以及(已初始化和未初始化的)数据段。

demo
execve(path, args, env):用 execve() 替换当前进程为 ls 命令。如果 execve() 执行成功,当前进程的内存和代码会被 ls 替换,所以之后的 printf 不会被执行。
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main() {
    // 要执行的程序路径
    char *path = "/bin/ls";
    // 传递给 ls 的参数列表(第一个参数通常是命令的名称本身,后面是选项和参数)
    char *args[] = {"ls", "-l", NULL};  // 参数数组,最后一个必须是 NULL
    // 环境变量(可以传递 NULL 使用当前的环境变量)
    char *env[] = {NULL};  // 环境变量数组,最后一个必须是 NULL
    // 调用 execve 来执行 ls 命令
    if (execve(path, args, env) == -1) {
        // 如果 execve 失败,打印错误信息并退出
        perror("execve failed");
        exit(EXIT_FAILURE);
    }
    // execve 成功后,这行代码将不会执行,因为当前进程已经被 ls 替换
    printf("This line will not be printed if execve succeeds\n");
    return 0;
}

                    
                
                
            
        
浙公网安备 33010602011771号