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

时间:2018-10-03 12:00:09

标签: c

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

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忽略了空字节作为上述错误的输入。我怎么能通过这个?

1 个答案:

答案 0 :(得分:1)

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

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

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