为什么我的setenv()调用不起作用?

时间:2012-12-17 10:51:04

标签: c bash

我编写了以下C代码,将env变量设置为\x09。但是,当我使用echo $EGG | hexdump时,我发现它将其设置为00。仅当第一个半字节为零时才会出现此问题。有什么问题的线索?

char shellcode[] = "\x09";

main() {
    setenv("EGG", shellcode, 1);
    system("/bin/bash");

    return 0;
}

2 个答案:

答案 0 :(得分:4)

问题是字符0x08, 0x09, 0x0a, 0x0b, 0x0c ...被视为空白字符,并从变量值中删除。如果您尝试设置0x01,它将在shell中可见。

P.S。看起来变量 设置为\x09但未被shell回显: 事实上:

prev_sh_$ ./so2 
$ export IFS=" \n"
$ echo $EGG | hexdump
0000000 0a09                                   
0000002
shell添加了

0x0a\n)以在下一行打印值。

答案 1 :(得分:2)

嗯,您的代码正常运行;)

0x09是ASCII码标签键。

因此EGG设置为 tab 键。当你打印它时,它实际打印 tab ,你通常不会在控制台中识别它。