繁体   English   中英

Execve() 增加了两个额外的 arguments

[英]Execve() adds two extra arguments

当我编译以下代码并对其运行strace时,我可以看到它向args[]数组添加了两个额外的元素。

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
    char *args[2];
    args[0] = "/bin/ls";
    args[1] = "-lh";
    execve(args[0], args, NULL);

    return 1;
}

strace说这实际上是被调用的:

execve("/bin/ls", ["/bin/ls", "-lh", "\340\301\361\267", "\1"], NULL)

您需要将 null ptr 添加到参数数组的最后一个元素。 否则 execve 不知道你的数组在哪里结束。

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main(int argc, char **argv)
{
    char *args[3];
    args[0] = "/bin/ls";
    args[1] = "-lh";
    args[2] = NULL;
    execve(args[0], args, NULL);

    return 1;
}

所以基本上你看到的是 execv 传递随机 arguments 直到它在你指向数组的 memory 中找到 NULL 。 当然,它也可能会崩溃。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM