繁体   English   中英

使用 printf shell 命令将字节打印到文件中

[英]Print bytes into file using printf shell command

我试图将以下数据打印到文件中,但出现以下错误:“/bin/sh: 1: 语法错误:未终止的引号字符串”。 这是我的程序:

int main(void)
{
char* argv[] =  {"/bin/sh", "-c","printf '%b' '\x7f\x45\x4c\x46\x01\x00\x02\x03' > file.bin", NULL };
execve("/bin/sh", argv, NULL);

  return 1;
}

问题出在上面文本中间的 null 字节: \x7f\x45\x4c\x46\x01\x00\x02\x03"有没有办法像上面那样做?

您的代码的问题是反斜杠在 C 字符串中被解释,而您希望将其作为sh命令的参数传递。

因此,您必须双重转义每个反斜杠字符。

int main(void)
{
    char* argv[] =  {"/bin/sh", "-c","printf '%b' '\\x7f\\x45\\x4c\\x46\\x01\\x00\\x02\\x03' > file.bin", NULL };
    execve("/bin/sh", argv, NULL);
    return 1;
}

有一个允许R"(printf '%b' '\x7f\x45\x4c\x46\x01\x00\x02\x03' > file.bin)"的编译器扩展——请参阅Does C support raw string literals? ,但为了便携性不要使用它。

此外,不可能将原始 null 字节传递给execve ,请参阅那些问题

暂无
暂无

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

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