我如何在C中执行此Shellcode“ ls PathToDirectory> newFile.txt”以创建包含目录内容列表的新文件

如何在C中执行此shellcode ls PathToDirectory > newFile.txt来创建包含目录内容列表的新文件。

我已经尝试过,但这总是给我一个错误。 “ ls:无法访问'>':没有这样的文件或目录”

我正在使用此代码:

execl( "/bin/ls","ls","PathToTheDirectory",">","newFileTocreate.txt",NULL);

输出:

  

ls:无法访问“>”:没有这样的文件或目录   newFileTocreate.txt

“显示目录的内容”

maguanying412 回答:我如何在C中执行此Shellcode“ ls PathToDirectory> newFile.txt”以创建包含目录内容列表的新文件

一种方法是像dols.c中的示例一样使用系统调用

hr
  • 编译并运行并检查
    #include <stdio.h>
    #include <stdlib.h>

    int main(){

        int ret = system("ls > listing.txt");
        if (ret) printf("ERROR: non-zero return %d",ret);

    }
,

输出重定向>execl系列功能不理解的shell构造;他们不调用外壳来运行命令。

会发生什么情况,>作为参数传递给ls,因此,它表示当前目录中没有这样的文件。

您几乎没有选择:

  • 您可以使用popen(3)运行命令并读取输出,然后可以写入文件。

    char buf[1024] = {0};
    FILE *fp = popen("/bin/ls PathToTheDirectory");
    while(fgets(buf,sizeof buf,fp)) {
        /* write to newFileToCreate.txt */
    }
    
  • open(2)文件并复制((带有dup2)其标准输出,然后执行它,以便将输出写入文件。

     int fd = open("newFileToCreate",O_WRONLY | O_CREAT | O_TRUNC);
     dup2(fd,STDOUT_FILENO);
     execl( "/bin/ls","ls","PathToTheDirectory",NULL);
    
  • 使用system(3)调用外壳程序。因此,您可以按需使用命令。尽管请注意,应尽可能避免使用此选项。参见Issuing system commands in Linux from C,C++

    system("/bin/ls PathToTheDirectory > newFileTocreate.txt");
    
本文链接:https://www.f2er.com/3130850.html

大家都在问