繁体   English   中英

警告:命令替换:忽略输入中的空字节。 如何使gdb不忽略输入中的空字节?

[英]warning: command substitution: ignored null byte in input. How can I make gdb not ignore the null byte in the input?

我有的缓冲区溢出分配具有以下代码:

int zerg(char *arg)
{
    char buf[12];
    static int i, sum;

    if (strlen (arg) > 24) /* Argument too long! */
    {
        printf ("String too long!\n");
        return -1;
}

这就是为什么我将其用作输入:

run "$(python -c "print 'RUSHKEKEKEzAS\00\xa9\x87\x04\x08'")"

但是gdb忽略了空字节作为上述错误的输入。 我该如何通过?

无法将NUL字节放入命令行参数,因为该参数以第一个NUL字节终止。 execve()argv数组复制到要运行的进程的新创建的内存空间中时,它仅复制到第一个NUL字节。

由于shell基本上是为了将命令行参数提供给命令行实用程序而存在的,因此它们无需处理嵌入式NUL字节,而大多数则不需要。 特别是Bash会丢弃在命令替换期间遇到的所有NUL字节。 其他shell可能在第一个NUL字节处终止参数。 该行为未由Posix标准指定。

由于gdb基本上是模仿bash的,因此它遵循相同的规则,如该警告消息所示。

暂无
暂无

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

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